🐳 Как обновить образ Docker c новыми изменениями?

Как обновить образ Docker новыми изменениями, которые мы внесли в контейнер?

Да, все мы знаем, что образ Docker – это основная часть вашего контейнера Docker.

Контейнер работает на основе этого образа.

Образ Docker можно создать разными способами.

Мы можем построить множество контейнеров из одного образа. Образ – это комбинация файловой системы и параметров. Образ Docker состоит из ряда слоев. Каждый слой представляет собой инструкцию в файле Dockerfile. Каждый слой, кроме самого последнего, доступен только для чтения.

После запуска контейнера с использованием образа вы можете вносить в него изменения.  Например, вы можете создавать новые файлы, вы можете устанавливать новые модули, пакеты и т.д.

Эти изменения будут сохраняться в контейнере, пока он существует.

Не рекомендуется обновлять образ Docker с помощью этого метода. Всегда старайтесь использовать контейнеры stateless.

Это должно повысить производительность, и ваше приложение будет более подходящим для инфраструктуры stateless.

Рассмотрим ситуацию: ваш контейнер Docker завершен/остановлен, и вы не можете запустить контейнеры с помощью команды docker start.

В этом случае вам необходимо перезапустить или пересобрать контейнер из образа Docker.

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

Итак, как обновить образ Docker?

Как зафиксировать изменения в существующих образах Docker?

Синтаксис

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Пример:docker commit 782ce39021a0 wordpress:new2

Как зафиксировать изменения в существующих образах Docker?

Здесь 782ce39021a0 – это идентификатор контейнера, в котором вы внесли изменения в конфигурацию, и имя образа wordpress с тегом new2.

Вы также можете сохранить изменения в существующем образе Docker.

Здесь мы создадим новый образ с другим тегом.

Пример

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

docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

782ce39021a0 wordpress:new «docker-entrypoint…» 5 days ago Up 2 seconds 0.0.0.0:1883->80/tcp wp3

Выполним вход в контейнер:

# docker exec -it 782ce39021a0 bash

К примеру, мне нужен редактор файлов nano

Проверяем, доступен ли он в текущей среде контейнера.

# which nano

Вывод оказался пустым

Установим Nano

apt-get install nano

Проверим еще разок:

# which nano/bin/nano

Теперь закоммитим изменения

docker commit 66a9db890230 wordpress:new.with.nanosha256:c3afbec42bfcb883189d967a504076a993172db99bfdae2725d3fe8ac7d1efec

Проверим образы:

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

wordpress new.with.nano c3afbec42bfc 50 seconds ago 799MB

wordpress new2 204ca49e7475 About an hour ago 798MB

Теперь запустим новый контейнер с обновленным образом.

docker run -it —name wp-new -d -p 1882:80 wordpress:new.with.nano8ba28a0f25dd750d0e6d3179f7587525f991a58bf6b2c233cc0c2dc3e05d4360

Выполним вход в контейнер:

docker exec -it wp-new bashroot@8ba28a0f25dd:/var/www/html#

Проверим, появился ли nano

which nano/bin/nano

Друзья помогите этому контенту стать доступнее в социальных сетях.

Не проходи мимо жмакни по кнопке возможно кому то еще он будет полезен!