Docker & Python

Часть 1 – Терминология

Образ (Image)

Образ – это доступный только для чтения набор окружения для приложения. За основу для такого образа выбирается специально подготовленный образ операционной системы, например Ubuntu. После чего на основу накладываются дополнительные изменения, как то установка необходимых библиотек и программ. Существует целый репозиторий с базовыми образами докер. Необходимый образ для приложения создается при помощи серии команд в Dockerfile. Поэтому наличие такого файла в корне проекта указывает, на то, что проект поддерживает контейнеризацию. При этом созданные вами образы, также могут быть помещены в реестр дальнейшего использования в качестве базовых.

Слои (Layers)

Слой – это изменение внесенное в образ докера, путем выполнения инструкций в Dockerfile. Обычно такие изменения появляются в следствии выполнения команд RUN. При этом тут стоит отметить, что одна такая команда создаёт отдельный слой. Поэтому если в фале содержится несколько таких команд то слоев станет ровно столько сколько команд было выполнено в файле.

Например путь Dockerfile имеет следующие содержимое:

В этом случае докер возьмёт базовый образ Ubuntu и создаст в нем три слоя:

  • первый – как результат создания каталога /tmp/logs
  • второй – как результат  установки vim
  • третий – как результат установки htop

Когда Docker формирует образ от соединяет все слои в один единый слой через union файловую систему. Слои как правило отслеживаются по хешам sha256, что позволяет отслеживать изменения и пере использовать слои. Докер сканирует базовый образ, затем сканирует идентификаторы всех слоев и скачивает их, в том случае если нужный слой не найден в локальном кэше. Общая рекомендация по слоям такова, что самые часто изменяемые слои должны быть сверху, тогда не будет происходить пере сборка слоев если более нижний изменился.

Контейнер (Container)

Каждый образ запускается на компьютере в отдельном пространстве ядра, называемом контейнером. При этом стоит отметить, что в контейнере допускается модификация файлов в файловой системе, при этом она не затронет сам образ и все изменения исчезнут после завершения работы контейнера. При этом для того, что бы сохранить изменения (например в БД) используется специальные техники, например Docker Volumes.

Mount & Volumes

В связи с тем, что все изменения внесенные при работе в файловую систему контейнера сотрутся после его остановки существуют методы соединения частей файловой системы контейнера с файловой системой хоста. При этом стоит отметить, что такие соединения снижают быстродействие контейнера. Есть несколько способов: монтирование (mount), volumes и tmpfs (это такие пространства файловой системы которые на самом деле хранятся в оперативной памяти компьютера).

Реестр Докер (Docker Registry)

Это специальный архив с образами, которые вы можете использовать в качестве базовых. Самым известным таким реестром является Docker Hub.

Файл Dockerfile

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

  • FROM – указывает на то какой образ будет взят в качестве базового (это обязательная инструкция);
  • ENV – инструкция для передачи параметров окружения в контейнер;
  • RUN – выполняет команду в командной оболочке (и создает новый слой);
  • CMD или ENTRYPOINT указывает какое приложение должно быть запушено при запуске контейнера.

Docker Engine

Это клиент серверное приложение, которое отвечает за платформу для выполнения и сборки контейнеров и образов. Состоит из демона докер, клиентского приложения и API.

Демон (Docker Daemon)

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

Клиетское приложение (Docker CLI)

Это основной путь взаимодействия с докер, путем выдачи отдельный команд через консольную утилиту. Например:

API

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

Docker Compose

Это специальное средство позволяющие запускать приложение, состоящее из нескольких контейнеров. Например, в одном контейнере размещена БД, а втором приложение. Данная утилита позволяет автоматизировать запуск этих контейнеров, а также их настройку для взаимодействия между собой и с внешним миром.

Машина (Docker Machine)

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

Основные команды в следующе части “Часть 2 – Основные команды

Обсуждение закрыто.