记录在使用docker过程中产生的一些思考和问题。
其他资料:
在原理里已经提到过镜像是一层层只读层构成的,上层由下层构建,并指向下层。这点在使用Dockerfile的build过程中也可以看出,每一层都有其ID。也可以透过history
命令看出。其中最上层就作为库有着自己的名字和tag,当然镜像ID也是有的,这可以通过docker images
查看。
由于Docker的镜像是分层(Diff层)构建的,因此每一层都有缓存下来,以ID作为该层的标识符。这些分层的镜像是能够在其上构建出其他镜像的,或者说是可被视作cache来利用的,下面可以简单的验证一下,写一个Dockerfile,然后构建:
FROM python:latestENV PYTHONUNBUFFERED 0
构建过程:
kimono@kimono:~/dockerTest$ docker build -t casual .
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM python:latest---> 2c31ca135cf9
Step 2/2 : ENV PYTHONUNBUFFERED 0---> Running in 266e3b4554f3
Removing intermediate container 266e3b4554f3---> 20fdcb77c85c
Successfully built 20fdcb77c85c
Successfully tagged casual:latest
当然之前就已经pull了python:latest,因此这里的第一步是直接引用相应镜像的,第二步会根据这个镜像创建一个容器执行相应的操作,然后再将这个中间容器提交成为更上一层的镜像,并将中间容器移除,这与「原理」一致,即docker build
本质上是docker run
和docker commit
的交叉动作。
接下来将Dockerfile更进一步试试:
FROM python:latestENV PYTHONUNBUFFERED 0
RUN mkdir -p /home/coredumped
构建过程:
kimono@kimono:~/dockerTest$ docker build -t casual1 .
Sending build context to Docker daemon 3.072kB
Step 1/3 : FROM python:latest---> 2c31ca135cf9
Step 2/3 : ENV PYTHONUNBUFFERED 0---> Using cache---> 20fdcb77c85c
Step 3/3 : RUN mkdir -p /home/coredumped---> Running in 0c3c5a0905cb
Removing intermediate container 0c3c5a0905cb---> 80420152d333
Successfully built 80420152d333
Successfully tagged casual1:latest
可以看出第二步的构建是引用的上层镜像,相当于前两步都“跳过”了。继续构建一个casual2:
kimono@kimono:~/dockerTest$ docker build -t casual2 .
Sending build context to Docker daemon 3.072kB
Step 1/3 : FROM python:latest---> 2c31ca135cf9
Step 2/3 : ENV PYTHONUNBUFFERED 0---> Using cache---> 20fdcb77c85c
Step 3/3 : RU
本文发布于:2024-01-27 12:09:05,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063285471320.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |