在启动容器

时间:2017-06-10 02:21:34

标签: docker containers

我尝试在容器first中构建RPM,然后使用docker cp命令将这些RPM复制到主机。

现在,我需要在second容器中安装这些RPM。我可以简单地docker cp将文件复制到正在运行的second容器中。

但是,问题是我试图拉动图像,执行命令(不是由我编写) 运行docker容器,在容器内运行各种命令并移除容器 即可。由于此步骤是自动执行的,因此我无法运行容器,然后复制该文件。我必须将RPM预加载到我已经拉过的图像中。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

有两种方法,包括创建新图像。

  1. 根据FROM image_name:tag等基本图像构建另一个图像。在RUN指令中运行所需的命令。然后你可以运行容器。这是更清洁的方式。
  2. 使用docker create创建包含您使用docker run时使用的确切参数的容器,然后使用docker commit -c创建一个--change的新图片}}选项如下:docker commit -c 'RUN yum install ... container_name image_name
  3. 一种hackish和丑陋的方式是绕过ENTRYPOINTCMD命令,使用一个执行所需操作的脚本,然后运行默认的ENTRYPOINT和/或{{1} }命令。

答案 1 :(得分:0)

Docker在17.05中添加了多阶段构建。 https://docs.docker.com/engine/userguide/eng-image/multistage-build/

使用此功能,您可以在第二个Dockerfile的顶部添加一条FROM行,其中包含第一个图像作为第一个阶段。然后进一步运行复制命令,将rpm文件从第一阶段复制到第二阶段进行测试。如果这需要澄清,请告诉我,明天我到办公室时会发一个例子。

以下是Dockerfile工作流程示例:

FROM first_image:latest as rpmsource

FROM second_base_image:latest
COPY --from=rpmsource /path/in/first_image/*.rpm /path/in/second_image/
CMD ["/script/that/does_stuff_with_rpms.sh"]

两个FROM行是一个多阶段构建,需要至少17.05才能构建。除非您构建特定目标,否则生成的图像将仅包含最后一个图像(有关详细信息,请参阅docker build --target选项)。带COPY行的--from命令可以复制后来的FROM文件。