2014-11-30 7 views

ответ

8

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

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

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

+0

Спасибо за ваш ответ. Поскольку я очень новичок в Docker (я установил его 3 часа назад ;-) быстрый вопрос: зачем мне Dockerfiles? Могу ли я просто создать, не уверен, как он называется в терминах «Докер», моментальный снимок (?) Контейнера Java, а затем вручную установить MySQL (с apt-get и т. Д.) В нем? – Frizz

+0

Вы можете сделать это с помощью «фиксации докеров». Проблема в том, что она не повторяется, поэтому, если вы хотите что-то изменить, вам нужно снова начать с нуля. Докерфилы, безусловно, путь. –

1

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

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

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

-3

Вы можете поместить несколько команд FROM в один файл Docker.

https://docs.docker.com/reference/builder/#from

+7

'FROM может появляться несколько раз в пределах одного файла Docker ** для создания нескольких изображений. **' - из вашей ссылки. Таким образом, он не объединяет изображения, а создает несколько изображений – luxas

9

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 

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

docker-make specificAB 
Смежные вопросы