为什么docker在构建映像时会创建容器?

时间:2020-01-17 12:37:36

标签: docker dockerfile

为什么Docker为Dockerfile中的每个命令启动一个容器? 我了解每个命令都会创建一个新层。

Step 1/3 : FROM nginx:latest
latest: Pulling from library/nginx
8ec398bc0356: Pull complete 
dfb2a46f8c2c: Pull complete 
b65031b6a2a5: Pull complete 
Digest: sha256:8aa7f6a9585d908a63e5e418dc5d14ae7467d2e36e1ab4f0d8f9d059a3d071ce
Status: Downloaded newer image for nginx:latest
 ---> c7460dfcab50
Step 2/3 : WORKDIR /usr/share/nginx/html
 ---> Running in f8adb5dc5a47
Removing intermediate container f8adb5dc5a47
 ---> a59fb35a43c2
Step 3/3 : COPY . .
 ---> 7911d9a451d9
Successfully built 7911d9a451d9
Successfully tagged mynginx:latest

无论如何要删除该容器,创建一个新容器并在其中设置WORKDIR有什么意义?

通知此行Removing intermediate container f8adb5dc5a47

2 个答案:

答案 0 :(得分:1)

为每个行守护程序创建一个新映像,并且每个指令独立运行。 Docker Daemon使用中间映像来加速Docker构建过程。生成缓存表明了这一点。

答案 1 :(得分:1)

考虑如何在不使用现有docker映像中使用Dockerfile的情况下创建映像。您将根据该图像创建一个容器,在该容器内做一些事情,然后commit该容器将创建新图像。

docker build正在这样做。它从上一层创建容器(FROM是第一条指令的上一层),在容器中运行当前指令,并将修改后的容器作为新的图像层提交。