如何在Dockerfile中提取Docker映像?

时间:2018-06-28 16:24:09

标签: docker docker-compose dockerfile

我有一个非常简单的系统,由两个容器组成,并且可以使用docker compose在我的本地计算机上成功编排它们。我想将此系统放在云中的单个VM中,并允许其他人轻松地执行同样的操作。

由于我偏爱的云提供商可以轻松访问容器OS,因此我希望将此系统安装在单个容器中,以便于分发和部署。我认为我没有做任何事情来克服困难here,所以我希望使用Docker-in-Docker设置并制作一个运行docker compose的复合图像来启动我的两个容器,就像在我的本地计算机上一样。

但是,当我尝试添加

RUN docker pull my/image1
RUN docker pull my/image2

对于扩展了the Docker image的复合Dockerfile,由于Docker守护程序未运行,因此这些命令在构建时失败。

我要在这里完成的工作是在构建时将两个子图像拖入我的合成图像中,以最小化合成图像的启动时间。有办法吗?

1 个答案:

答案 0 :(得分:0)

有一种方法可以做到这一点,但这可能不是一个好主意。

  1. 使用docker-machine创建一个docker-machine实例。
  2. 使用docker-machine env获取新创建的docker-machine实例的凭据。这些将是几个环境变量。
  3. 为上一步中创建的每个凭据添加类似ARG DOCKER_HOST="tcp://172.16.62.130:2376"的内容。将其放在第一个RUN docker ...之前的Dockerfile中。
  4. 在最后一个ARG ..之后但在第一个RUN docker ...之前,为所有凭证变量放入一些ENV DOCKER_HOST=${DOCKER_HOST}

这应该可以使docker pull正常工作,但是并不能真正解决您的问题,因为该pull发生在docker-machine上,并且没有被docker镜像捕获。

要获得理想的效果,您还需要 RUN docker save ...将提取的图像导出到图像上的tar存档文件。

然后,您必须为docker load ...导入tar存档文件添加相应的逻辑。

最重要的是您可以执行此操作,但您可能不应该这样做。我认为这不会节省您任何时间。这可能会花费您时间。