为什么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
答案 0 :(得分:1)
为每个行守护程序创建一个新映像,并且每个指令独立运行。 Docker Daemon使用中间映像来加速Docker构建过程。生成缓存表明了这一点。
答案 1 :(得分:1)
考虑如何在不使用现有docker映像中使用Dockerfile
的情况下创建映像。您将根据该图像创建一个容器,在该容器内做一些事情,然后commit
该容器将创建新图像。
docker build
正在这样做。它从上一层创建容器(FROM
是第一条指令的上一层),在容器中运行当前指令,并将修改后的容器作为新的图像层提交。