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

by itisgood

Как обновить образ 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.nano
sha256: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.nano
8ba28a0f25dd750d0e6d3179f7587525f991a58bf6b2c233cc0c2dc3e05d4360

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

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

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

which nano
/bin/nano

You may also like

Leave a Comment