Docker 镜像分层及dockerfile 编写技巧

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

docker镜像分层

分层介绍

Dockerfile中的每个指令都会创建一个新的镜像层

镜像层将被缓存和复用

当Dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效

某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效

镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件

Docker镜像原理

Docker镜像是由特殊的文件系统叠加而成·最底端是bootfs,并使用宿主机的bootfs·第二层是root文件系统rootfs,称为base image·然后再往上可以叠加其他的镜像文件·统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了 一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。·一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像。·当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器。

1.base image:基础镜像

2.image:固化了一个标准运行环境,镜像本身的功能-封装一组功能性的文件,通过统一的方式,文件格式提供出来(只读)

3.container:容器层(读写)

4.docker-server 端

5.呈现给docker-client (视图)

Docker 镜像分层及dockerfile 编写技巧插图

镜像分层模型 

Docker 镜像分层及dockerfile 编写技巧插图1

 dockerfile 编写

dockerfile操作指令

序号指令含义1FROM 镜像指定新镜像所基于的镜像,第 条指必须为from指令,每创建一个镜像就需要一条from指令2MAINTAINER 名字说明新镜像的维护人信息3RUN 命令在所基于的镜像上执行命令,并提交到新的镜像中;docker内每执行一条命令都是run开头4CMD[“要运行的程序”,”参数1″,”参数2″]指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令, 如果指定多条则只能最后一条被执行5EXPOSE 端口号指定新镜像加载到Docker时要开启的端口6ENV 环境变量 变量值设置一个环境变量的值,会被后面的run使用7ADD 源文件、目录 目标文件/目录具体识别压缩格式并且自动解压,将源文件复制到目标文件,源文件要与dockerfile位于相同目录中,或者一个URL8COPY 源文件/目录 目标文件/目录将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中9VOLUME [“目录”]在容器中创建一个挂载点10USER 用户名/UID指定运行容器时的用户11WORKDIR 路径为后续的RUN、CMD、ENTRYPOINT指定工作目录12ONBUILD 命令指定所生成的镜像作为一个基础镜像时所要运行的命令13HEALTHCHECK健康检查

ADD和copy区别

              ①Dockerfile中的COPY指令和ADD指令都可以将主机上的资源复制或加入到容器镜像中,都是在构建镜像的过程中完成的

②copy只能用于复制(节省资源)

              ③ADD复制的同时,如果复制的对象时压缩包,ADD还可以解压(消耗资源)

④COPY指令和ADD指令的唯一区别在于是否支持从远程URL获取资源。COPY指令只能从执行docker build所在的主机上读取资源并复制到镜像中。而ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中

              ⑤满足同等功能的情况下,推荐使用COPY指令。ADD指令更擅长读取本地tar文件并解压缩

CMD和entrypoint区别

一般还是会用entrypoint的中括号形式作为docker 容器启动以后的默认执行命令,里面放的是不变的部分,可变部分比如命令参数可以使用cmd的形式提供默认版本,也就是run里面没有任何参数时使用的默认参数。如果我们想用默认参数,就直接run,否则想用其他参数,就run 里面加参数。

尝试编写dockerfile文件 部署nginx

mkdir nginx cd nginx/ vim Dockerfile FROM centos:7 #基于基础镜像 MAINTAINER nginx #用户信息 RUN yum -y update #安装依赖关系 RUN yum install -y pcre-devel zlib-devel gcc gcc-c++ make RUN useradd -M -s /sbin/nologin nginx #创建用户 ADD nginx-1.12.0.tar.gz /usr/local/src #将源文件复制到目标文件,源文件要与 Dockerfile位于相同目录中,或者是 一个URL VOLUME [“/usr/local/nginx/html”] #在容器中创建一个挂载点 WORKDIR /usr/local/src #指定工作目录 WORKDIR nginx-1.12.0 RUN ./configure –prefix=/usr/local/nginx –user=nginx –group=nginx –with-http_stub_status_module && make && make install ENV PATH /usr/local/nginx/sbin:$PATH EXPOSE 80 #暴露端口 RUN echo “demon off;” >>/usr/local/nginx/conf/nginx.conf CMD nginx

docker运行nginx为什么要使用 daemon off

docker运行nginx为什么要使用 daemon off

免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容