Перейти к содержимому
Главная страница » Как изменить образ Docker

Как изменить образ Docker

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

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

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

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

FROM myName/myImage:latest 
ADD myFile.py bin/myFile.py

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

docker build .

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

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

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

zabbix-agent: 
 container_name: zabbix-agent 
 image: zabbix/zabbix-agent:latest 
 net: "host" 
 privileged: true 
 restart: always 
 environment: 
 ZBX_SERVER_HOST: zabbix.mysite.com 

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

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

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

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

docker-compose -f dockerfile.yml up -d --no-recreate

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

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

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

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

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

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

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

docker commit [options] [container-id-or-name] [image-name]:[tag]

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

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

docker run -it --name editcontainer ubuntu

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

 apt-get update
 apt install vim
 mkdir /myconfigs
 # etc

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

docker commit editcontainer myeditedimage

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

# Run container 
docker run -it --name editubuntu ubuntu:latest 

# Install updates
apt-get update
apt-get install python3

# Add new file
echo "hello" > /myfile.txt  

# Commit changes to new image 
docker commit editubuntu mycustomubuntu

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

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

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