docker容器如何构建?

问题描述 投票:2回答:1

当我注意到一些有趣的输出时,我正在将一些图像推送到云集群:

$ docker push serviceD 
37794ab1f6ab: Mounted from serviceA 
a481fcabd5ce: Pushed 
6386b9576417: Pushed 
7b130cab9651: Pushed 
21981e3c578d: Pushed 
9d19b6b6a1f0: Mounted from serviceB
3e590131f755: Mounted from serviceB 
fd77fd1b66f8: Mounted from serviceB 
522caa449807: Mounted from serviceB 
8dfad2055603: Mounted from serviceA

这让我想知道,当输出说Mounted from serviceX时它意味着什么?顺便提一下,这些是我已推出的服务。我最初认为可能是因为某些服务(如serviceD)与其他服务交谈,因此事情是共享的。但是,由于我正在构建一个单独的微服务,当我构建这个容器时,其他微服务并没有进入这个方程式。

那么......我想我的问题是构建的具体步骤是什么?这些码头工人(哈希,我假设)来自何处,为什么几个哈希值可能相同?说实话,我不确定这个输出是什么意思。这些哈希代表什么?

docker
1个回答
1
投票

要了解构建过程,您必须熟悉Docker图像层。每个图像都是建立在彼此之上的多个层。假设我们的docker镜像是从Dockerfile构建的,我们在构建图像时会执行一组命令。 Dockerfile中的一些命令(如ADD,RUN等)创建了所谓的层。最终得到的图像是所有图层组合在一起的。如果您是基于另一个图像构建图像,那么您的图像将是基本图像层与Dockerfile中指定的图层相结合。

输出的每一行都记录特定图层的状态。哈希是那些图层的ID。看起来您的图像构建在serviceA或serviceB之上,它们也是相关的。在这种情况下,您的图像将是由您定义的图层与基本图像(serviceA和ServiceB)中的图层的组合。当您将新构建的映像推送到已具有serviceA和serviceB的远程Docker注册表时,Docker将仅复制您的层。其他图层已存在于注册表中,它们将重新使用(装入)以用于新图像。

© www.soinside.com 2019 - 2024. All rights reserved.