Docker:合并多个镜像
使用 Docker 是否可以将两个映像合并为一个映像?
像这里这样:
genericA --
\
---> specificAB
/
genericB --
例如,有一个用于Java的映像和一个用于MySQL的映像。
我想有一个Java和MySQL的图像。
使用 Docker 是否可以将两个映像合并为一个映像?
像这里这样:
genericA --
\
---> specificAB
/
genericB --
例如,有一个用于Java的映像和一个用于MySQL的映像。
我想有一个Java和MySQL的图像。
不可以,您只能从一个映像继承。
您可能不希望Java和MySQL在同一映像中,因为在容器中具有单个组件(即创建一个单独的MySQL容器并将其链接到Java容器而不是将两者放入同一容器中)更为惯用。
但是,如果您确实必须将它们放在同一映像中,请编写一个以Java作为基本映像的Dockerfile(FROM语句),并在Dockerfile中安装MySQL。您应该能够从官方MySQL Dockerfile中大量复制语句。
Docker不直接支持这一点,但你可以使用DockerMake(完全披露:我写的)来管理这种“继承”。它使用 YAML 文件来设置映像的各个部分,然后通过生成相应的 Dockerfile 来驱动生成。
下面介绍了如何构建这个稍微复杂一些的示例:
--> 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