Можно ли создать демо-версию Docker-контейнера, не останавливая и не затрагивая работоспособность основного контейнера?

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

Ответ

Да, это стандартная практика в DevOps для создания тестовых и демо-сред.

Основные методы:

  1. docker commit (Создание образа из работающего контейнера):

    # Создаёт новый образ на основе текущего состояния файловой системы контейнера
    docker commit <running_container_id_or_name> my-app:demo-snapshot
    # Запускаем новый, изолированный контейнер из этого образа
    docker run -d --name demo-app -p 8080:80 my-app:demo-snapshot
    • Важно: Коммит сохраняет только файловую систему, но не метаданные (например, VOLUME, EXPOSE, CMD из исходного Dockerfile).
  2. Клонирование через Dockerfile и docker cp:

    # Копируем критичные файлы конфигурации или данные из работающего контейнера
    docker cp <running_container_id>:/app/config/demo-config.yaml ./config-copy/
    # Создаём новый Dockerfile, который использует базовый образ и скопированные файлы
    # Затем собираем и запускаем новый образ
    docker build -t my-app:demo .
  3. Использование Docker Compose для изолированного стенда (Наиболее правильный способ): Создаётся отдельный docker-compose.demo.yml, который разворачивает полную копию стека в изолированной сети.

    version: '3.8'
    services:
      app:
        image: my-app:latest  # Или используем образ, созданный через commit
        ports:
          - "8081:80"  # Пробрасываем на другой порт хост-машины
        environment:
          - APP_ENV=demo
        # Можно подмонтировать специфичные для демо конфиги
        volumes:
          - ./demo-config:/app/config

    Запуск: docker-compose -f docker-compose.demo.yml up -d

Рекомендация: Для production-like демо используйте подход с Docker Compose или оркестратором (Kubernetes), так как он обеспечивает полную изоляцию и воспроизводимость среды.