Обложка: Видео: Docker для начинающих за 200 секунд

Видео: Docker для начинающих за 200 секунд

Docker — это инструмент, позволяющий запустить почти любое приложение со всеми его зависимостями в изолированной среде. Например, есть сервер с операционной системой CentOS с установленным Python версии 2.7. Нужно запустить приложение на ОС Debian и использовать Python версии 3. Или другая ситуация: вы работаете на ОС Windows и хотите запустить кластер Apache Kafka на Linux.

Другими словами, нам нужно ответить на вопрос: как упаковать приложение со всеми его библиотеками, чтобы его можно было переносить между различными системами без изменений?

Подробности — в видео и в текстовой расшифровке ниже.

Отличия Docker от виртуальной машины

Есть два способа упаковки и переноса приложений со всеми его библиотеками между различными системами: использовать виртуальную машину или Docker-контейнер.

Если выбрать виртуальную машину:

  • это ещё одна полноценная операционная система, в которой живут десятки процессов;
  • долгий старт приложения;
  • минимальный образ ОС весит более 100 МБ;
  • виртуальная машина потребляет много ресурсов, таких как процессор и оперативная память.

Из плюсов — у виртуальной машины удобные способы управления.

Если выбрать Docker-контейнер:

  • это будет облегченная операционная система с единственным процессом — вашим приложением;
  • быстрый старт приложения;
  • контейнер на базе ОС Alpine весит меньше 10 МБ;

Из минусов — у Docker сложная система управления контейнерами, которой можно управлять как локально на сервере, так и по протоколу HTTP.

Главное отличие технологий в том, что виртуальная машина виртуализирует аппаратные ресурсы, такие как процессор, память, системы input и output, а контейнеры виртуализируют только ОС. Кроме запуска приложений на рабочем ноутбуке Docker-контейнеры используются для создания production-систем на базе микросервисной архитектуры. Но в таком случае появляются вопросы, связанные с оркестрацией и мониторингом всей инфраструктуры.

Как создавать контейнеры

Есть три фундаментальные вещи в контейнерах: dockerfile, image и container.

Dockerfile — это декларативное описание, того что будет внутри контейнера.

Чтобы создать dockerfile, необходимо указать базовый image, от которого наш контейнер будет наследоваться. Этот базовый image будет скачан из репозитория. Репозитории могут быть как публичными, так и приватными. Самый известный публичный репозиторий — hub.docker.com.

Далее необходимо настроить наш образ:

  1. Инструкция ENV выставит переменную операционной системы.
  2. WORKDIR сменит вашу текущую директорию и последующие команды будут выполнены из указанной директории.
  3. COPY переносит файлы и папки в создаваемый образ.
  4. RUN запускает shell-команду — так вы можете установить библиотеки приложения или необходимые пакеты.
  5. EXPOSE сделает порт доступным снаружи контейнера.
  6. ENTRYPOINT — это основная команда, которая будет выполняться, когда вы запускаете контейнер из образа.
Содержимое dockerfile

Чтобы создать Docker-образ, выполняем команду:

docker build -t myapp ./

Здесь myapp — это название приложения, ./ — текущая директория, где лежит dockerfile и нужные файлы.

Docker скачает шаблон, который мы указали в инструкции FROM, далее выполнит все указанные нами команды и создаст Docker image с нашим приложением. Image — это набор read only слоёв, которые работают как фильтры: верхние слои дополняют либо перезаписывают файлы и папки на нижних слоях. Docker container отличается от Docker image тем, что он добавляет поверх всех read only слоёв writable-слой, на который можно записывать данные.

Чтобы запустить наш контейнер, выполним команду: docker run myapp

Docker выполнит инструкцию ENTRYPOINT или последнюю инструкцию CMD.

Отличия инструкций ENTRYPOINT от CMD следующие:

  • инструкций CMD может быть несколько и Docker выполнит последнюю полученную инструкцию;
  • инструкция ENTRYPOINT может быть только одна, и если она используется в dockerfile, то дополнительные команды при запуске контейнера выполнить уже не получится;
  • если контейнер запускается инструкцией CMD, то при запуске контейнера можно указать команду, которая выполнится вместо инструкции CMD в dockerfile.

Группа автора «ВКонтакте», Telegram, Twitter.

Хинт для программистов: если зарегистрируетесь на соревнования Huawei Cup, то бесплатно получите доступ к онлайн-школе для участников. Можно прокачаться по разным навыкам и выиграть призы в самом соревновании.

Перейти к регистрации