小知识:Docker 镜像分层及dockerfile 编写技巧

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操作指令

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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

到此这篇关于Docker 镜像分层及dockerfile 编写的文章就介绍到这了,更多相关Docker 镜像分层内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/Liangheng32/article/details/122526942

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:Docker redmine项目管理工具的使用

2023-3-10 11:25:28

建站知识

小知识:Docker搭建RabbitMQ集群的方法步骤

2023-3-10 11:40:15

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索