Docker:合并多个图像
- 2024-10-10 09:28:00
- admin 原创
- 78
问题描述:
Docker 可以将两个图像合并为一个吗?
就像这样:
genericA --
\n ---> specificAB
/
genericB --
例如,有一个用于 Java 的图像和一个用于 MySQL 的图像。
我想要一个包含 Java和MySQL 的图像。
解决方案 1:
Docker 并不直接支持这一点,但您可以使用DockerMake(完全公开:我编写了它)来管理这种“继承”。它使用 YAML 文件来设置镜像的各个部分,然后通过生成适当的 Dockerfile 来驱动构建。
以下是构建这个稍微复杂一点的示例的方法:
--> genericA --
/ \n 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
运行
docker-make specificAB
解决方案 2:
不可以,您只能从一张图片继承。
您可能不希望 Java 和 MySQL 出现在同一个映像中,因为在容器中拥有单个组件更加惯用,即创建一个单独的 MySQL 容器并将其链接到 Java 容器,而不是将两者都放入同一个容器中。
但是,如果您确实必须将它们放在同一个镜像中,请编写一个以 Java 为基本镜像的 Dockerfile(FROM 语句),并在 Dockerfile 中安装 MySQL。您应该能够从官方 MySQL Dockerfile 中复制大部分语句。
解决方案 3:
如果你这样做docker commit
,那么查看构建容器所用的命令就不方便了,你必须发出一个docker history image
如果您有一个 Dockerfile,只需查看它,您就会知道它是如何构建的以及它包含什么内容。
Docker 提交是“手动”的,因此容易出错,docker build
使用有效的 Dockerfile 会更好。
解决方案 4:
您可以FROM
在单个 Dockerfile 中放置多个命令。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD