Можно ли изменить существующий Docker-образ?

«Можно ли изменить существующий Docker-образ?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Непосредственно изменить готовый образ нельзя, так как образы иммутабельны (неизменяемы). Однако можно создать новый образ на основе существующего, добавив слой с изменениями.

Способы создания модифицированного образа:

  1. Через Dockerfile (рекомендуемый способ):

    FROM existing-image:tag
    RUN apt-get update && apt-get install -y nano
    COPY ./app.jar /opt/app.jar
    CMD ["java", "-jar", "/opt/app.jar"]

    Сборка: docker build -t my-modified-image .

  2. Через команду docker commit (не для production):

    # Запускаем контейнер и вносим изменения интерактивно
    docker run -it --name temp-container existing-image:tag /bin/bash
    # ... внутри контейнера устанавливаем пакеты, меняем файлы
    # Создаем новый образ из измененного контейнера
    docker commit temp-container my-modified-image

Для данных, которые должны изменяться, используйте тома (Docker Volumes) или bind mounts, которые не являются частью образа.

Best practice: Все изменения должны описываться в Dockerfile для воспроизводимости и контроля версий.