Введение в создание и распространение образов Docker

Образы Docker — это строительные блоки контейнеров Docker. Образ содержит все, что необходимо для запуска приложения или сервиса в контейнере: код или двоичные файлы, время выполнения, зависимости и конфигурации.

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

Работа с образами Docker состоит из двух основных этапов:

  1. Сборка — создание образа Docker из файла Dockerfile
  2. Pushing — загрузка образа в реестр, например Docker Hub

В этом руководстве мы подробно рассмотрим эти шаги, включая:

  • Основы работы с докерфайлами
  • Локальная сборка образов
  • Тегирование изображений
  • Отправка изображений в реестры
  • Управление изображениями

Основы работы с докерфайлами

Образы Docker создаются из Dockerfile — текстового файла, содержащего инструкции по созданию образа. Dockerfile определяет все, что входит в образ — ОС, конфигурации, файлы и папки для копирования, сетевые порты для выставления, тома Docker для создания и многое другое.

Некоторые распространенные инструкции Dockerfile включают:

  • FROM — Устанавливает базовый образ для сборки
  • COPY — Копирование файлов с хоста в образ
  • RUN — Запуск команд и сценариев оболочки во время сборки
  • EXPOSE — Открыть сетевые порты, которые будет прослушивать контейнер
  • ENV — Установка переменных окружения
  • ENTRYPOINT — Определите исполняемый файл, который будет запускаться при старте контейнера
  • CMD — Параметры по умолчанию, которые передаются в ENTRYPOINT

Вот пример простого Dockerfile, который создает приложение Node.js:

# Use the latest Node.js 11 base image
FROM node:11
# Set the working directory in the container  
WORKDIR /app
# Copy package files and install dependencies
COPY package*.json ./
RUN npm install 
# Copy app source code
COPY . .
# Expose port and start application
EXPOSE 8080
CMD ["node", "app.js"] 

Здесь используется node:11 образ в качестве отправной точки, копирует исходный код приложения в образ, устанавливает зависимости и устанавливает запуск приложения при запуске контейнера.

Создание локальных образов

Подготовив Dockerfile, вы можете собрать образ с помощью команды docker build команду. При этом образ будет собираться шаг за шагом в соответствии с инструкциями Dockerfile.

Основной формат следующий:

$ docker build [options] PATH

Где PATH — местоположение Dockerfile.

Например:

$ docker build -t my-app .

Это приведет к поиску Dockerfile в текущем каталоге и созданию образа под названием my-app из него.

Некоторые ключевые опции:

  • -t — Пометить изображение именем репозитория и тегом
  • --no-cache — Сборка образа с нуля вместо использования кэша
  • -f — Путь к Dockerfile, если он не находится в текущем каталоге

Вы можете создавать образы для разных окружений или параметров, просто имея несколько Dockerфайлов, например, Dockerfile.dev, Dockerfile.prod.

Во время разработки вы захотите быстро выполнять итерации, часто перестраивая образы по мере внесения изменений в приложение. Использование кэша значительно ускоряет время пересборки.

Тегирование изображений

Теги изображений идентифицируют принадлежность изображения к репозиторию и указывают название версии или варианта.

Теги состоят из имени репозитория и имени тега, разделенных двоеточием, например my-app:latest.

При сборке образа в качестве параметра -t флаг помечает его:

$ docker build -t my-app:latest .

Это название изображения my-app и помечает его тегами latest.

Если тег не указан, latest предполагается.

Некоторые распространенные стратегии маркировки:

  • latest — Самая последняя стабильная версия
  • Git commit SHA — пометить сборку коммитом SHA для отслеживания
  • Семантические версии — Метки типа v1.0.2 для версий релизов
  • Теги вариантов — такие как prod, test, dev для обозначения того, для чего используется изображение

Примечание: Метки придают изображению смысл и контекст. Неотмеченными изображениями трудно управлять.

Вы можете изменить существующее изображение, добавив или изменив теги:

$ docker tag my-app:latest my-app:v1.0

Отправка образов в реестры Docker

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

По умолчанию используется реестр Docker Hub, где есть публичные и частные репозитории.

Чтобы выложить изображение:

  1. Пометьте изображение именем реестра:
$ docker tag my-app:latest mydockerid/my-app:latest
  1. Переместите помеченное изображение:
$ docker push mydockerid/my-app:latest

Это позволит загрузить изображение my-app:latest в mydockerid пространство имен на Docker Hub.

Чтобы переместить в другой реестр:

$ docker push registry.example.com/my-app:latest

Некоторые компании ведут внутренние частные реестры для хранения собственных изображений. Они требуют аутентификации и SSL для обеспечения безопасности.

В конвейере CI/CD можно автоматизировать сборку и отправку образов в реестры при каждом изменении кода. Это позволяет непрерывно развертывать приложения, используя самые свежие образы.

Управление локальными образами

По мере создания образов хост Docker будет хранить их локально в движке Docker. Чтобы освободить место на диске, необходимо время от времени очищать старые и неиспользуемые образы.

Некоторые полезные команды для управления образами:

  • docker images — Перечисляет все изображения на хосте
  • docker image rm — Удалить одно или несколько изображений
  • docker image prune — Удаление неиспользуемых и висящих изображений
  • docker rmi — Удаление изображений по идентификатору или имени

Пример удаления изображений:

# Remove specific image
$ docker image rm my-app:latest 
# Remove all images matching name
$ docker image rm my-app
# Remove dangling images 
$ docker image prune
# Remove all images 
$ docker rmi $(docker images -q)

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

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

Заключение

На этом основы создания, маркировки, распространения и управления образами Docker исчерпаны!

Основные выводы:

  • Файлы Dockerfiles определяют, как создаются образы
  • docker build превращает Dockerfile в запускаемый образ
  • Образы должны быть помечены именами репозитория и версии
  • docker push загружает изображения в реестры, такие как Docker Hub
  • docker image команды управления образами на хосте Docker

Овладев этими основами, вы сможете эффективно использовать образы Docker для последовательной и надежной упаковки и развертывания приложений. Автоматизация создания и развертывания образов позволит вам перейти к зрелым практикам DevOps.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *