如何在Dockerfile中提取Docker图像?

如何在Dockerfile中提取Docker图像?,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我有一个由两个容器组成的非常简单的系统,我可以使用docker compose在本地机器上成功地编排它们。我想把这个系统放在云中的一个VM中,并允许其他人轻松地做同样的事情 因为我首选的云提供商提供了对容器操作系统的轻松访问,所以我希望将此系统安装在单个容器中,以便于分发和部署。我不认为我做了任何违反困难的事情,所以我希望在Docker设置中使用Docker,并制作一个运行Docker compose的合成图像,以显示我的两个容器,就像在本地机器上一样 但是,当我尝试添加 RUN docker

我有一个由两个容器组成的非常简单的系统,我可以使用docker compose在本地机器上成功地编排它们。我想把这个系统放在云中的一个VM中,并允许其他人轻松地做同样的事情

因为我首选的云提供商提供了对容器操作系统的轻松访问,所以我希望将此系统安装在单个容器中,以便于分发和部署。我不认为我做了任何违反困难的事情,所以我希望在Docker设置中使用Docker,并制作一个运行Docker compose的合成图像,以显示我的两个容器,就像在本地机器上一样

但是,当我尝试添加

RUN docker pull my/image1
RUN docker pull my/image2
对于扩展的复合Dockerfile,这些命令在生成时失败,因为Docker守护进程未运行


我在这里试图完成的是在构建时将两个子映像拉入我的合成映像中,以最小化合成映像的启动时间。有办法做到这一点吗?

有办法做到这一点,但这可能是个坏主意

  • 使用docker machine创建docker machine实例
  • 使用docker machine env获取新创建的docker machine实例的凭据。这些将是几个环境变量
  • 添加类似于
    ARG DOCKER\u HOST=”的内容tcp://172.16.62.130:2376“
    用于在上一步中创建的每个凭据。在第一次运行docker…之前,将其放入docker文件中
  • 在最后一个
    ARG..
    之后,但在第一个
    运行docker…
    之前,为所有凭证变量输入一些
    ENV docker\u HOST=${docker\u HOST}
  • 这应该使docker pull能够工作,但它并不能真正解决您的问题,因为pull发生在docker机器上,并且不会在docker映像中捕获

    为了达到你想要的效果,你需要额外的
    运行docker save…
    将拉取的图像导出到图像上的tar存档文件

    然后您必须将相应的逻辑添加到
    docker load…
    导入tar归档文件


    底线是你可以这样做,但你可能不应该这样做。我认为这不会节省你任何时间。这可能会花费你时间。

    我不确定我是否理解你的答案。例如,我应该在哪里向“docker load”添加相应的逻辑?它不可能出现在Dockerimage中,因为这回避了最初的问题。也许你会把它放在入口点。这将保证所有必要的图像在本地可用——即使互联网被切断。