【问题标题】:Can I use/build custom created docker image to create another image?我可以使用/构建自定义创建的 docker 镜像来创建另一个镜像吗?
【发布时间】:2019-01-09 11:47:57
【问题描述】:

我想在一个实例/服务器中创建图像 A,但在那个实例中没有互联网连接。

那么我可以创建一个包含所有安装在我机器上的包的镜像 B,然后推送到 x.x.x.x 并在镜像 A 中使用它作为 FROM 标记吗?

它看起来像:

FROM x.x.x.x/B:latest
RUN ***
ENTRYPOINT

请为这个问题提出一个正确的解决方案。

【问题讨论】:

  • 是的。你能行的。您可以将图像保存在本地或将其推送到 docker hub。
  • 如果您想要一些可扩展的东西,您可以尝试选择一台机器并将其设置为 docker 注册表(存储并允许您分发 Docker 映像的服务器端应用程序)::$ docker run -d -p 5000:5000 --restart=always --name registry registry:2
  • 我正在从 YAML 文件运行。

标签: docker yaml docker-machine docker-image docker-stack


【解决方案1】:

是的,你可以。

首先,您说图像 A 位于没有互联网连接的服务器上。如果这是真的,那么您将无法访问已推送到 x.x.x.x 的构建映像 B,除非您引用的 x.x.x.x 是 localhost。

假设没有互联网完全回答这个问题:

Dockerfile B 包含您在基础镜像中想要的所有内容。建立那个。然后将图像移动到您正在构建图像 A 的无互联网服务器。 (要移动图像,请查看 docker export 或 docker save 命令和/或谷歌“将 docker 图像从一个主机移动到另一个主机”。我最初的搜索将我带到这里:https://blog.giantswarm.io/moving-docker-container-images-around/

(注意:对于任何想要这样做并且您有互联网连接的人,您可以将图像 B 推送到一个存储库,然后从 Dockerfile A 中直接从那里拉取图像,这将跳过从主机到主机的移动部分。 )

那么,就像你已经写的那样,镜像 A 的 Dockerfile 应该有:

FROM imageB:latest

从您的第一张图片中提取。这一切都很容易。长话短说,是的,您可以构建自己的图像,然后基于该图像构建其他图像。

【讨论】:

    【解决方案2】:

    简短的回答 - 当然,你可以。您可以使用任何图像(包括您自己的图像)来构建新图像。

    长答案 - 考虑使用 Docker multistage build。这可以减少镜像数量和 docker 注册表占用的空间。

    您可以在https://docs.docker.com/develop/develop-images/multistage-build/阅读更多内容

    简而言之 - 您创建一个单个 Dockerfile,您可以在其中定义多个基于彼此的图像。如果您不需要派生之外的基本图像,这就是您的情况。下面的例子将说明:

    Dockerfile

    # First create base image
    FROM foo:latest as mybase # note we tag it 'mybase' 
    RUN blahblah
    
    FROM mybase  # here we derive new image, note Dockerfile is same!
    RUN blahblahblah
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 2017-11-04
      • 1970-01-01
      相关资源
      最近更新 更多