Dockers镜像分层
Dockers镜像分层
1,Dockers的最小镜像
[ ~]# docker pull hello-world //下载一个最小的镜像 [ ~]# docker images //查看镜像
[ ~]# docker run hello-world //运行一下hello-world (里面是一个文本对docker运行的简单介绍)
dockerfile的组成
1)FROM:scratch(抓、挠)
2)COPY:hello /
3)CMD:[“/hello”]
FROM
语法:FROM <image>[:<tag>] 解释:设置要制作的镜像基于哪个镜像,FROM指令必须是整个Dockerfile的第一个指令,如果指定的镜像不存在默认会自动从Docker Hub上下载。
COPY
语法:COPY <src> <dest> 解释:用法与ADD相同,不过<src>不支持使用url,所以在使用docker build – < somefile时该指令不能使用。
CMD
语法:①CMD ["executable", "param1", "param2"] #将会调用exec执行,首选方式 ②CMD ["param1", "param2"] #当使用ENTRYPOINT指令时,为该指令传递默认参数 ③CMD <command> [ <param1>|<param2> ] #将会调用/bin/sh -c执行 解释:CMD指令中指定的命令会在镜像运行时执行,在Dockerfile中只能存在一个,如果使用了多个CMD指令,则只有最后一个CMD指令有效。当出现ENTRYPOINT指令时,CMD中定义的内容会作为ENTRYPOINT指令的默认参数,也就是说可以使用CMD指令给ENTRYPOINT传递参数。 注意:RUN和CMD都是执行命令,他们的差异在于RUN中定义的命令会在执行docker build命令创建镜像时执行,而CMD中定义的命令会在执行docker run命令运行镜像时执行,另外使用第一种语法也就是调用exec执行时,命令必须为绝对路径。
2、Base镜像(基础镜像)
Centos:7镜像的dockerfile
FROM scratch ADD centos-7-x86_ _64-docker.tar.xz / LABEL org. label-schema. schema-version="1.0" \| org. label-schema. name="Centos Base Image" org. labe1-schema. vendor="centos" org. labe1-schema. 1icense="GPLV2" org. labe1-schema build-date="20190305 ‘ CMD ["/bin/bash"]
3、镜像的分层
1)dockerfile的书写格式为:Dockerfile(首字母大写,包括文件名称)
2)From:构建镜像有两种方式,一种scratch(从零构建),另一种可以基于某个镜像开始构建
3)镜像所运行的操作(用户所期望的)
[ ~]# mkdir test //创建测试目录 [ ~]# cd test //进入测试目录 [ ~]#vim Dockerfile //编写Dockerfile FROM centos:7 RUN yum -y install vim #或["yum","install","vim"] RUN yum -y install net-tools CMD ["/bin/bash"]
执行一下
[ test]# docker build -t centos7-vim-net-tools:12-11 . //使用当前目录的 Dockerfile 创建镜像,标签为 centos7-vim-net-tools:12-11 build: 使用 Dockerfile 创建镜像 -t:标签 . :当前目录
执行的层次
4.Dockerfile镜像分层总结
镜像时容器的基石,容器是镜像运行后的实例。当镜像运行为容器之后,对镜像的所有数据仅有只读权限,如果需要对镜像源文件进行修改或删除操作,此时是在容器层(可写层)进行的,用到了COW(copy on write)写时复制机制。
Docker镜像的缓存特性
1.创建一个新的Dockerfile文件
[ ~]# vim Dockerfile FROM centos:7 RUN yum -y install vim RUN yum -y install net-tools RUN yum -y install wget CMD ["/bin/bash"] [ ~]# docker build -t new-centos . //使用当前目录的 Dockerfile 创建镜像,名称为new-centos
如果在相同的层,有用到相同的镜像,可以不必再去下载,直接使用缓存。(如果第一层的不相同了,那么下面的相同也没用了,需要重新下载)
3.再次创建一个新的Dockerfile
[ ~]# mkdir test1 [ ~]# cd test [ test]# cd ../test1 [ost test1]# vim Dockerfile FROM centos:7 RUN yum -y install vim RUN yum -y install wget RUN yum -y install net-tools CMD ["/bin/bash"] [ test1]# docker build -t centos-new . //使用当前目录的 Dockerfile 创建镜像,名称为centos-new
即使镜像层里的操作一样,也必须是在同一层才可以使用dockerfile的缓存特性
如果制作镜像过程中,不想使用缓存,可以--no-cache选项
相关推荐
xysoul 2020-11-03
fearlessxjdx 2020-09-04
yss0 2020-08-19
Crystalqy 2020-08-15
TaoTaoFu 2020-08-03
vtnews 2020-07-29
小信 2020-07-28
糊一笑 2020-07-04
wzg0wzg 2020-07-04
pigsmall 2020-07-04
VFCSDN 2020-07-04
王道革 2020-11-25
魅惑青花瓷 2020-11-11
lihongtai 2020-11-09
TaoTaoFu 2020-11-06
liaochaowu 2020-11-16
ChlatZed 2020-11-11
changecan 2020-09-22
newisI 2020-09-01
链块学院 2020-09-09