Образы Docker неизменяемы, то есть их структура и содержимое не могут быть изменены после завершения процесса сборки, однако есть следующие способы для изменения докер образа.

Создание нового Docker image на основе существующего

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

Создайте новый dockerfile и используйте существующий образ докер в качестве базового.

Затем создайте контейнер:

Изменить первоначальный Dockerfile

Наиболее часто используемым методом изменения docker образа, является редактирование Dockerfile, который используется для создания изображения Docker. Это удобный и надежный метод редактирования изображения docker.

Пример файла Dockerfile для контейнера мониторинга Zabbix будет выглядеть следующим образом:

Чтобы изменить образ, используемый существующим контейнером, мы удаляем этот контейнер, редактируем Dockerfile с необходимыми изменениями и воссоздаем контейнер с новым файлом.

В этом примере файла Dockerfile образ, используемый для создания контейнера, называется ‘zabbix / zabbix-agent: последняя версия». Этот образ можно изменить на другой или версию, отредактировав этот файл.

Инструмент ‘docker compose’ помогает легко управлять несколькими контейнерами Docker с помощью одного YAML-файла Docker. В случаях, когда изменения необходимо внести только для одного контейнера, его можно отредактировать в файле.

После внесения изменений в изображение необходимо воссоздать только соответствующие контейнеры, а остальные можно оставить нетронутыми. Для этого используется опция “–no-recreate”.

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

Хранение данных в томах вне контейнеров гарантирует, что даже при повторном создании контейнеров связанные с ними данные не будут затронуты.

Это позволяет нам легко редактировать изображение docker без потери базовых данных. Изменение Dockerfiles также помогает отслеживать изменения, внесенные в изображения.

При изменении файла Dockerfile необходимо соблюдать максимальную осторожность, особенно в производственной среде, поскольку одна ошибка может привести к нарушению нормального функционирования контейнера.

Фиксация изменений в Docker контейнере

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

Команда docker commit использует следующий синтаксис:

Общий рабочий процесс выглядит следующим образом:

Запустите контейнер из образа для редактирования:

Получите доступ к оболочке внутри контейнера и измените содержимое по мере необходимости:

Перенесите изменения в новый образ:

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

Теперь mycustomubuntu содержит Python и новый файл, которого изначально не было в ubuntu:latest образе.