Подтвердить что ты не робот

Docker: объединить несколько изображений

Возможно ли, что Docker объединяет два изображения в один?

Как здесь:

genericA --
            \
             ---> specificAB
            /
genericB --

Например, есть изображение для Java и образ для MySQL.

Я хотел бы иметь изображение с Java и MySQL.

4b9b3361

Ответ 1

Docker не поддерживает это напрямую, но вы можете использовать DockerMake (полное раскрытие: я написал это), чтобы управлять таким "наследованием". Он использует файл YAML для настройки отдельных фрагментов изображения, затем управляет сборкой, создавая соответствующие файлы Docker.

Вот как вы могли бы построить этот несколько более сложный пример:

                                     --> genericA --
                                    /                \
      debian:jessie -->  customBase                   ---> specificAB
                                    \                /
                                      --> genericB --

Вы использовали бы этот файл DockerMake.yml:

specificAB:
  requires:
    - genericA
    - genericB

genericA:
  requires:
     - customBase
  build_directory: [some local directory]
  build: |
    #Dockerfile commands go here, such as
    ADD installA.sh
    RUN ./installA.sh

genericB:
  requires:
    - customBase
  build: |
    #Here are some other commands you could run
    RUN apt-get install -y genericB
    ENV PATH=$PATH:something

customBase:
  FROM: debian:jessie
  build: |
    RUN apt-get update && apt-get install -y buildessentials

После установки инструмента CLI docker-make (pip install dockermake) вы можете затем создать образ specificAB, запустив

docker-make specificAB

Ответ 2

Нет, вы можете наследовать только одно изображение.

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

Однако, если вы действительно должны иметь их на одном изображении, напишите файл Docker с Java в качестве базового образа (оператор FROM) и установите MySQL в файл Docker. Вы должны в значительной степени скопировать заявления из официального файла MySQL Docker.

Ответ 3

Если вы выполняете docker commit, нецелесообразно видеть, какие команды использовались для сборки вашего контейнера, вам нужно выпустить docker history image

Если у вас есть файл Docker, просто посмотрите на него, и вы увидите, как он был построен и что он содержит.

Docker commit "вручную", поэтому подвержен ошибкам, docker build с использованием Dockerfile, который работает намного лучше.