Найти тему
Легко в’IT

Просто про Docker

Я как-то тут рассказывал про термин #Виртуализация и ее эволюцию из компьютеров реальных, стоявших под столом? И там я рассказывал, что на данный момент самым часто используемым механизмом являются контейнеры на примере морских грузовых контейнеров?

Так вот, Докер - это один из вариантов таких контейнеров. Про него я и хочу тебе сегодня рассказать.

Как ты вероятно знаешь, есть такая штука, которая называется "виртуальная машина", то есть виртуальный, а не реальный компьютер, который как бы запускается внутри твоего реального компьютера и пользуется его ресурсами. Так вот, в случае с Докером, ему не надо отдельной виртуальной машины: всю виртуализацию и разделение сетевых сегментов и оперативной памяти выполняет операционная система компьютера, на которой мы запускаем докер-контейнер, а значит им нужно куда меньше ресурсов, чем виртуальным машинам. Но как он в принципе работает? Давай посмотрим основные термины, чтобы увидеть, из чего эта прекрасная штука состоит:
1. Хост, то есть то, где докер запущен, при чем запущен он может быть хоть на физическом компьютере, хоть на виртуальной машине, ему это не играет особой роли
2. Демон, специальная программка, которая висит в памяти и управляет контейнеры: включить, выключить, скачать, удалить, создать контейнер - это все к ней
3. Клиент - наш с тобой интерфейс, через который мы общаемся с Докером: или консоль или графический пользовательский интерфейс
4. Образ - это то, на основе чего создается контейнер. Там должны быть включены все библиотеки, нужные тебе в работе, но его лучше не перегружать лишним софтом, иначе он весить будет больше, а толку - не прибавится. Таких готовых шаблонов полно на докер хабе, о котором я напишу ниже.
5. Контейнер - это образ + все необходимое окружение + наше приложение, которое мы хотим в него впихнуть
6. Реестр образов - то, откуда можно стянуть подходящий тебе образ. Например, я пишу сайт на каком-нибудь PHP, следовательно мне нужен образ, который в себя включает веб-сервер, сам интерпретатор PHP и другие нужные приложению программы и библиотеки. Характерный пример такого реестра - Docker Hub (https://hub.docker.com/)
7. Докер-файл - это файлик, который пишет ли программист или DevSecOps, который говорит Докеру: скачай такой-то образ, установи такие-то программы и запусти мое приложение.
Вот тебе пример прямо с сайта производителя:

```
FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py
```

1. Скачать образ Ubuntu Linux версии 18.04
2. Скопировать приложение в этот образ
3. Запустить приложение используя интерпретатор языка Python

Сразу хочу оговориться, что если ты в рамках даже одного компьютера ты запускаешь два контейнера, то даже не пытайся без специальных библиотек сделать, чтобы приложения, запущенные в разных контейнеров друг с другом общались. Это сделано для безопасности, но решается несложной настройкой.

И вот так у нас сейчас запускаются даже огромные корпоративные приложения, а про среду, в которой они для большего удобства, я расскажу в следующих статьях.