Если вы заинтересовались контейнеризацией, то уже наверняка слышали о Docker. Это программное обеспечение позволяет упаковывать ваши приложения и доставлять их в облако без каких-либо проблем.
В статье «Краткий экскурс в Docker» мы рассказывали подробнее о платформе и о том, как работать с её образами. Сегодня же речь идёт о контейнерах, а в таком случае нам важно понимать, чем они отличаются.
В статьях о Docker часто встречаются слова на «контейнеры» и «образы». Это не одно и то же, хотя иногда они используются как синонимы.
Существует большая разница между этими двумя понятиями: образ – это набор программного обеспечения на диске, а контейнер – работающий экземпляр образа вместе со сведениями о времени и процессах выполнении операции.
Примером образа может быть веб-сервер Apache и все его зависимости, из которых можно создать и запустить контейнер.
Образы доступны для повторного использования в общих или частных репозиториях, с которых их можно легко загрузить.
Каждый образ Docker состоит из одного или нескольких слоев, наложенных друг на друга. Некоторые слои содержат различные файлы, другие представляют собой метаслои, изменяющие уже существующие. Поэтому разные образы часто имеют общие слои.
Если существующий образ повторно распаковывается (например, загружается из репозитория) и в него вносятся изменения, то эти изменения сохраняются в виде одного или нескольких отдельных слоев поверх существующих слоев в образе. Начальные и новые слови вместе образуют ещё один образ, который впоследствии можно заключить в контейнер или сделать доступным в репозитории.
Контейнер Docker, как обсуждалось выше, упаковывает ПО приложения в невидимую коробку со всем, что нужно приложению для запуска. В том числе:
После формирования контейнера Docker создает сетевой интерфейс, чтобы контейнер мог взаимодействовать с локальным хостом, прикрепляет к нему доступный IP-адрес и выполняет процесс, который вы указали для запуска своего приложения.
Огромный плюс докер контейнера состоит в том, что, создав его однажды, вы сможете запустить его в любой среде без внесения изменений.
Термин «контейнер» на самом деле является просто абстрактным понятием, описывающим, как несколько различных функций работают вместе, чтобы визуализировать своеобразный «контейнер».
Давайте очень быстро пробежимся по этим механизмам.
Когда вы запускаете контейнер, Docker создаёт пространства имён, которые будет использовать конкретный контейнер и обеспечивать изоляцию процессов друг от друга.
В ядре есть шесть различных типов пространств имен, которые использует Docker:
Все эти неймспейсы используются вместе при создании контейнера.
Контрольные группы (так называемые «си-группы» или cgroups) — это функция ядра Linux, которая отвечает за управление ресурсами (ЦП, память, сеть). Контрольная группа гарантирует, что контейнеры Docker будут использовать только те ресурсы, которые им нужны, и при необходимости устанавливает ограничения на то, к каким ресурсам контейнер имеет доступ.
Иными словами, контрольные группы – это гарант того, что один контейнер не истощит один из этих ресурсов и не приведет к стопу всей системы.
Docker Compose – это инструмент Docker, используемый для определения и запуска многоконтейнерных приложений. Его активно применяют для разработки и тестирования рабочих процессов и промежуточных сред.
Наиболее популярными функциями Docker Compose являются:
docker pull ubuntu
На выходе вы получите следующую информацию:
docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
Digest: sha256:9a0bdde4188b896a372804be2384015e90e3f84906b750c1a53539b585fbbe7f
Status: Image is up to date for ubuntu:latest
docker.io/library/ubuntu:latest
docker create --name docker-cont ubuntu
В итоге, в терминале появится информация о завершении создания контейнера:
e4b0ae054671fc7b31d12004198d4cd2956b20ee6c173d41fc09052c89f03bcf
Команда docker create создаёт слой поверх исходного образа, который доступен для записи и готов для выполнения определённых команд.
«hello-world»
Как вы уже знаете, для запуска контейнера Docker, понадобится образ. Он загружается из репозитория Docker Hub, где любой может разместить своё приложение или дистрибутив.
Несмотря на то, что мы уже проверяли доступ к хабу, когда создавали контейнер, давайте снова сделаем это, введя простую команду:
docker run hello-world
В случае успеха вы получите следующий ответ:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
7050e35b49f5: Pull complete
Digest: sha256:6e8b6f026e0b9c419ea0fd02d3905dd0952ad1feea67543f525c73a0a790fefb
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
(arm64v8)
executable that produces the output you are currently reading.
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Давайте разберёмся, что произошло.
Мы вызвали команду «docker run», отвечающую за запуск контейнеров. Сначала поиск образа «hello-world» проводился в вашей системе, а после неуспешной попытки его обнаружения стартовал в Docker Hub, где и был обнаружен нужный образ.
Загрузив его, Docker превратил «hello-world» в работающий контейнер и запустил его. После этого мы получили возможность увидеть в консоли то самое сообщение сообщение.
Это самый простой контейнер, который можно запустить. Теперь попробуйте запустить более сложный, используя образ Ubuntu.
«ubuntu»
docker run -it ubuntu
Консоль предоставит вам весьма короткий ответ, содержащий лишь идентификатор контейнера:
root@4f809782c33e:/#
В будущем этот идентификатор будет полезен, если вы планируете работать с конкретным контейнером.
Вот некоторые полезные команды для управление контейнером:
Соответственно, если вы, например, хотите удалить контейнер, в командной строке пропишите:
docker rm docker-cont
где «docker-cont» – это название вашего контейнера.
Контейнеры Docker позволяют решить множество проблем в разработке приложений и существенно развязывают руки профессионалам. Вы можете запустить свой контейнер Docker на любом совместимом с ОС хосте (Linux или Windows), на котором установлен докер.
Кроме того, докер контейнеры небольшие и запускаются мгновенно. У них есть собственные встроенные механизмы управления версиями и повторного использования компонентов. Ими также можно легко поделиться через общедоступный Docker Hub или частный репозиторий.
После прочтения этой статьи у вас должно было появиться представление о том, что такое контейнеры Docker и как с ними работать. А если всё же остались вопросы, вы всегда можете их задать нашей службе поддержки.