Dockers镜像分层
Dockers镜像分层
1,Dockers的最小镜像
创新互联建站自2013年创立以来,先为三山等服务建站,三山等地企业,进行企业商务咨询服务。为三山企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
[root@localhost ~]# docker pull hello-world
//下载一个最小的镜像
[root@localhost ~]# docker images
//查看镜像
[root@localhost ~]# docker run hello-world
//运行一下hello-world (里面是一个文本对docker运行的简单介绍)
dockerfile的组成
1)FROM:scratch(抓、挠)
2)COPY:hello /
3)CMD:[“/hello”]
FROM
语法:FROM [:]
解释:设置要制作的镜像基于哪个镜像,FROM指令必须是整个Dockerfile的第一个指令,如果指定的镜像不存在默认会自动从Docker Hub上下载。
COPY
语法:COPY
解释:用法与ADD相同,不过不支持使用url,所以在使用docker build – < somefile时该指令不能使用。
CMD
语法:①CMD ["executable", "param1", "param2"] #将会调用exec执行,首选方式
②CMD ["param1", "param2"] #当使用ENTRYPOINT指令时,为该指令传递默认参数
③CMD [ | ] #将会调用/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)镜像所运行的操作(用户所期望的)
[root@localhost ~]# mkdir test
//创建测试目录
[root@localhost ~]# cd test
//进入测试目录
[root@localhost ~]#vim Dockerfile
//编写Dockerfile
FROM centos:7
RUN yum -y install vim #或["yum","install","vim"]
RUN yum -y install net-tools
CMD ["/bin/bash"]
执行一下
[root@localhost 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文件
[root@localhost ~]# vim Dockerfile
FROM centos:7
RUN yum -y install vim
RUN yum -y install net-tools
RUN yum -y install wget
CMD ["/bin/bash"]
[root@localhost ~]# docker build -t new-centos .
//使用当前目录的 Dockerfile 创建镜像,名称为new-centos
如果在相同的层,有用到相同的镜像,可以不必再去下载,直接使用缓存。(如果第一层的不相同了,那么下面的相同也没用了,需要重新下载)
3.再次创建一个新的Dockerfile
[root@localhost ~]# mkdir test1
[root@localhost ~]# cd test
[root@localhost test]# cd ../test1
[root@localhost 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"]
[root@localhost test1]# docker build -t centos-new .
//使用当前目录的 Dockerfile 创建镜像,名称为centos-new
即使镜像层里的操作一样,也必须是在同一层才可以使用dockerfile的缓存特性
如果制作镜像过程中,不想使用缓存,可以--no-cache选项
当前文章:Dockers镜像分层
标题来源:http://scyanting.com/article/jesihg.html