我可以使用/构建自定义创建的Docker映像来创建另一个映像吗?

时间:2019-01-09 11:47:57

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

我有情景。我想在一个实例/服务器中创建一个映像,但是在那种情况下没有互联网连接。

  

那么我可以在计算机上安装了所有软件包的情况下创建B映像,然后推送到x.x.x.x并将其用作FROM标记在A映像中使用吗?

它看起来像:

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

请针对此问题提出正确的解决方案。

2 个答案:

答案 0 :(得分:2)

是的,可以。

不过,首先,您说图像A在没有互联网连接的服务器上。如果是这样,那么除非您引用的x.x.x.x是本地主机,否则您将无法访问已推送到x.x.x.x的构建映像B。

要在没有互联网的情况下完全回答问题:

Dockerfile B包含基本映像中所需的所有内容。建立那个。然后将图像移至要在其上构建图像A的无互联网服务器。 (要移动映像,请查看docker export或docker save命令和/或google'将docker映像从一台主机移动到另一台主机。我的最初搜索将我引到这里:https://blog.giantswarm.io/moving-docker-container-images-around/

(注意:对于任何想要执行此操作并且您具有Internet连接的人,您都可以将映像B推送到存储库,然后直接从Dockerfile A中将映像从那里拉出,这将跳过从主机到主机部分的移动。 )

然后,就像您已经写过的一样,映像A的Dockerfile应该具有:

FROM imageB:latest

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

答案 1 :(得分:0)

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

长答案-考虑使用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