В этой статье мы расскажем про базовые техники работы с Docker, а также погрузим читателя в основы докеризации приложений. Предполагается, что читатель что-то слышал про Docker и хотел бы начать знакомство с технологией. Мы постараемся упростить этот процесс. Docker — это платформа, позволяющая запускать приложения в изолированных контейнерах. Контейнеры обеспечивают приложениям стабильную и предсказуемую среду, где бы они ни запускались, будь то компьютер разработчика/сервер/облако/кластер Kubernetes. Docker обеспечивает повторяемость и консистентность проекта. Благодаря этому разработчики могут сосредоточиться непосредственно на разработке приложения, не беспокоясь о проблемах совместимости и настройке окружения. Чтобы понять, как работает Docker, нужно иметь представление о его двух основных единицах: образ и контейнер. Контейнеры — это легковесные, изолированные среды выполнения, внутри которых работают приложения. В отличие от виртуальных машин, контейнеры используют общее ядро операционной системы, что делает их менее затратными с точки зрения ресурсов. Это позволяет запускать больше контейнеров на одном сервере по сравнению с количеством виртуальных машин. Простоту доставки. Образы могут быть легко перенесены между различными окружениями, будь то локальное окружение, тестовые сервера или облачная инфраструктура.
n
Образ Docker — это статичное описание содержимого контейнера, включающее в себя все зависимости, настройки окружения, библиотеки и бинарные файлы, необходимые для выполнения приложения. Можно сказать, что образ является готовым к использованию шаблоном для создания контейнеров. Образы часто создаются на базе других образов. Это происходит благодаря системе слоев, которая позволяет создавать и сохранять изменения поверх базового образа. Например, вы можете взять официальный образ Go и добавить в него свой код, получив новый образ, готовый к развертыванию (подробнее в разделе о Dockerfile). Предположим, что вы уже установили Docker CLI или Docker Desktop для своей системы и, возможно, попытались запустить свой первый hello world контейнер командой docker run hello-world. Docker ищет образ hello-world в локальном хранилище. Контейнер выполняет скрипт, который выводит на экран приветственное сообщение и завершает работу. Весь описанный процесс можно наблюдать в терминале, в котором выполняется команда. This message shows that your installation appears to be working correctly. Docker предоставляет широкие возможности для управления контейнерами и образами с помощью команд CLI.
n
В этом разделе мы рассмотрим основные команды Docker, которые помогут вам эффективно управлять контейнерами. Запуск контейнера — это основное действие, которое вы будете выполнять в Docker. Мы уже запускали контейнер hello-world в предыдущем разделе. Теперь попробуем запустить более сложное приложение. По-умолчанию контейнеры стартуют изолированно, и stdin запущенного приложения не имеет связи с внешним миром. Где — это идентификатор контейнера, который вы хотите остановить. Вы можете определить идентификатор контейнера с помощью следующей команды: docker ps. Эта команда выводит список запущенных контейнеров вместе с их идентификаторами. Если вам нужно перезапустить контейнер, используйте команду docker restart: docker restart . ID контейнера можно получить из вывода команды ps, однако большинство команд, работающих с ID контейнеров, могут работать и с названиями. Для загрузки образа без его запуска можно использовать команду pull, например, docker pull ubuntu. Получить идентификатор образа можно с помощью команды docker images. В этом разделе мы подробно рассмотрим, что такое образы Docker, их роль в контейнеризации, а также процесс создания собственных образов с помощью Dockerfile.
n
Мы также разберем контекст Dockerfile и многоступенчатую сборку. Что такое образы Docker? Образ Docker — это лёгкий, автономный и исполняемый пакет, включающий всё необходимое для запуска части программного обеспечения, включая код, среды выполнения, библиотеки и системные зависимости. Образы Docker служат шаблоном для создания контейнеров. Образы описываются с помощью Dockerfile. Dockerfile — это текстовый файл специального формата, содержащий команды для сборки Docker-образа. Эти команды описывают шаги, необходимые для установки зависимостей и конфигурации вашего приложения с учетом контекста приложения. Контекст Dockerfile — это набор файлов, которые будут отправлены на Docker daemon для сборки образа. Часто это директория, в которой находится сам Dockerfile и любые другие файлы, необходимые для сборки (в основном, код). Крайне важное замечание про Dockerfile: каждая команда создает свой собственный слой образа. Из-за этого образы могут раздуваться до огромных размеров. Для того, чтобы этого не происходило, существует поэтапная сборка. В итоговый образ попадет только то, что было в образе alpine плюс исполняемый файл myapp.
n