DockerFile(一)

目录

🍉ockerfile构建的过程

🍉镜像的缓存特性


ockerfile构建的过程

docker不建议用户通过commit方式构构建镜像的原因:

1.这是一种手工创建镜像的方式,容易出错,效率低且可重复性弱。比如要在 debian base 镜像中也加入vi,还得重复前面的所有步骤。

2.更重要的:使用者并不知道镜像是如何创建出来的,里面是否有恶意程序。也就是说无法对镜像进行审计,存在安全隐患。

用 Dockerfile(推荐方法)构建镜像,底层也 docker commit 一层一层构建新镜像的。docker commit 能够帮助我们更加深入地理解构建过程和镜像的分层结构。

[root@localhost ~]# cat Dockerfile 
FROM centos:7
RUN yum install -y vim
[root@localhost ~]# docker build -t centos .
[+] Building 22.9s (6/6) FINISHED                                                       
 => [internal] load build definition from Dockerfile                               0.0s
 => => transferring dockerfile: 134B                                               0.0s
 => [internal] load .dockerignore                                                  0.0s
 => => transferring context: 2B                                                    0.0s
 => [internal] load metadata for docker.io/library/centos:7                        0.0s
 => [1/2] FROM docker.io/library/centos:7                                          0.0s
 => [2/2] RUN yum install -y vim                                                  20.9s
 => exporting to image                                                             1.9s 
 => => exporting layers                                                            1.9s 
 => => writing image sha256:8eab98f8d2253a5b4f5557816a122ed072d93eb881837196f2b0e  0.0s 
 => => naming to docker.io/library/centos                                          0.0s 

 

FROM是基于某个镜像来构建镜像

在运行docker build命令时,-t是将镜像命名为centos,命名结尾的.指明build context为当前目录。Docker默认会从build context中查找Dockerfile文件,我们也可以通过-f参数指定Dockerfile的位置。

过程:镜像构建的过程,首先Docker将build context中的所有文件发送给Docker daemon。build context为镜像构建提供所需要的文件或目录。

然后就是执行FROM,将centos作为base镜像。

在执行RUN,安装vim。

然后它会启动一个临时的容器,在容器中通过yum安装vim。

安装成功后,将容器保存为镜像,这一步底层使用的是类似docker commit的命令。

然后在删除临时的容器。

最后镜像构建成功,可以通过docker images查看镜像信息。

镜像的缓存特性

Docker会缓存已有镜像的镜像层,构建新镜像时,如果某镜像层已经存在,就直接使用,无需重新创建。就比如我们在上面dockerfile文件的基础上添加一些内容,往镜像中在yum一个net-tools:  

[root@localhost ~]# cat Dockerfile 
FROM centos:7
RUN yum install -y vim
RUN yum install -y  net-tools
[root@localhost ~]# docker build -t centos:test .
[+] Building 3.7s (7/7) FINISHED                                                        
 => [internal] load build definition from Dockerfile                               0.0s
 => => transferring dockerfile: 164B                                               0.0s
 => [internal] load .dockerignore                                                  0.0s
 => => transferring context: 2B                                                    0.0s
 => [internal] load metadata for docker.io/library/centos:7                        0.0s
 => [1/3] FROM docker.io/library/centos:7                                          0.0s
 => CACHED [2/3] RUN yum install -y vim                                            0.0s
 => [3/3] RUN yum install -y  net-tools                                            2.5s
 => exporting to image                                                             1.1s
 => => exporting layers                                                            1.1s
 => => writing image sha256:83cedc1538f1f506e53517fbfa359f868ba54219a7bc540654230  0.0s 
 => => naming to docker.io/library/centos:test                                     0.0s

这样我们在docker build的时候缓存里有yum安装的vim所以不会在进行yum安装vim,就只需要把net-tools安装好就可以了

如果我们不想在构建镜像时使用缓存,可以在docker build命令中加上--no--cache参数。Docker中的每一个指令都会创建一个镜像层,上层是依赖于下层的,不管什么时候,只要某一层发生变化,其上面所有层的缓存都会失效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值