Docker_dockerfile ╰+攻爆jí腚メ 2021-07-27 02:09 513阅读 0赞 ### dockerfile ### * 一.Dockerfile概述 * * * * 1.docker镜像分层 * 2.docker镜像分层 * 3.dockerfile指令组成 * 二.构建镜像指令 * * * * add和copy区别 * 三.构建Apache镜像 * * 1.创建目录并编写Dockerfile文件 * 2.编写执行脚本和首页内容 * 3.准备网页文档 * 4.生成镜像 * 5.运行容器 * 6.网页验证 * 四.挂载数据卷 * 验证: * 总结: # 一.Dockerfile概述 # 创建容器的方式,以文件的形式构建一个镜像 文件内部:需要使用的脚本,软件包,就需要和dockerfile放在目录 #### 1.docker镜像分层 #### 镜像内部会有多个小的镜像构成:例如centos、nginx、nginx依赖环境,以堆叠分层的方式构成镜像 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center] * dockerfile中的每个指令会创建一个新的镜像层 * 镜像层将被缓存和复用 * 当dockerfile指令修改,复制的文件变化,对应的镜像层缓存就会失效 * 某一层镜像缓存失效后,之后的镜像层缓存都会失效 * 镜像层不可改变,如果在某一层添加文件,下一层删除,镜像中依然存在 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 1]**container**:容器层,读写执行层 **子镜像**:add nginx image add gcc gcc-c++ image **基础镜像/系统镜像**:centos base image **内核层**:bootfs,aufs bootfs:包含了aufs和LXC **aufs**:是一种联合文件系统,使用同一个linux host的多个目录,堆叠起来,以统一的方式,提供自己的功能(**docker镜像的分层原理**) #### 2.docker镜像分层 #### 基于AUFS构建 第一层镜像的下一层成为父镜像 第一层镜像为 base image(操作系统环境镜像) 容器层(可读可写),在最顶层(writable) 容器层一下都是readonly <table> <thead> <tr> <th>bootfs</th> <th>docker底层依赖的库、内核,负责与内核交互</th> </tr> </thead> <tbody> <tr> <td>base image(底包)</td> <td>基础镜像centos</td> </tr> <tr> <td>imags(只读)</td> <td>固化了一个标准运行环境 镜像的本身功能–分装—组件功能性的文件通过统一的方式,文件格式提供出来</td> </tr> <tr> <td>container</td> <td>容器层(读写层) (读写—执行层) docker-server 端----->呈现给docker-client</td> </tr> </tbody> </table> #### 3.dockerfile指令组成 #### 1.基础镜像信息(操作系统是什么镜像和版本 2.维护者信息 3.镜像操作命令 4.容器启动时执行的命令(启动容器的时候,执行的脚本/命令参数等) ## 二.构建镜像指令 ## <table> <thead> <tr> <th>指令</th> <th>含义</th> </tr> </thead> <tbody> <tr> <td>FROM镜像</td> <td>指定镜像所基于的镜像,第一条指令必须为FROM,每创建一个镜像就需要一条FROM指令</td> </tr> <tr> <td>MAINTAINER名字</td> <td>说明镜像的维护人信息</td> </tr> <tr> <td>RUN命令</td> <td>在所基于镜像上执行命令,并提交到新的镜像中</td> </tr> <tr> <td>CMD[ "要运行的程序”,“参数1,“参数2”]</td> <td>指令启动容器要运行的命令或者脚本,dockerfile只能有一台cmd命令,如果指定多条只能最后一条被执行</td> </tr> <tr> <td>EXPOSE端口号</td> <td>指定新镜像加载到docker时要开启的端口</td> </tr> <tr> <td>ENV环境变量 变量值</td> <td>设置一个环境变量的值,会被后面的run使用</td> </tr> <tr> <td>ADD源文件/目录 目标文件/目录</td> <td>将源文件复制到目标文件,源文件要与dockerfile位于相同目录中,或者一个URL</td> </tr> <tr> <td>copy源文件/目录 目标文件/目录</td> <td>将本地主机上的文件/目录复制到目标地点,源文件/目录要与dockerfile在相同目录中</td> </tr> <tr> <td>volume[”目录“]</td> <td>在容器中创建一个挂载点</td> </tr> <tr> <td>user用户名/uid</td> <td>指定运行容器时的用户</td> </tr> <tr> <td>workerid 路径</td> <td>为后续的run、cmd、entrypoint指定工作目录</td> </tr> <tr> <td>onbuild命令</td> <td>指定所生成的镜像作为一个基础镜像时索要运行的命令</td> </tr> <tr> <td>healthcheck</td> <td>健康检查</td> </tr> </tbody> </table> ##### add和copy区别 ##### 1.copy:仅用于复制 add可解压,对文件进行操作 2.资源消耗 copy消耗的资源时小于ADD的 ### 三.构建Apache镜像 ### #### 1.创建目录并编写Dockerfile文件 #### mkdir apache cd apache vim Dockerfile #基于的基础镜像 FROM centos:7 #维护镜像的用户信息 MAINTAINER wt #原镜像操作指令——安装apache软件 RUN yum -y update RUN yum -y install httpd #开启端口 EXPOSE 80 #复制网站首页文件到指定位置 ADD index.html /var/www/html/index.html #将执行脚本复制到容器中 ADD run.sh /run.sh RUN chmod 755 /run.sh #启动容器时运行脚本 CMD ["/run.sh"] ![在这里插入图片描述][20210601192659289.png_pic_center] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 2] #### 2.编写执行脚本和首页内容 #### vim run.sh #!/bin/bash #清除缓存,安装完毕后有一些默认文件 rm -rf /run/httpd/* #启动apache,-D表示守护进程 exec /usr/sbin/apachectl -D FOREGROUND ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 3] #### 3.准备网页文档 #### echo "hello world" > index.html ![在这里插入图片描述][20210601193727382.png_pic_center] #### 4.生成镜像 #### docker build -t httpd:centos . ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 4] #### 5.运行容器 #### docker run -d -p 1234:80 httpd:centos docker ps -a -P使用随机端口,也可以-p使用指定端口 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 5] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 6] #### 6.网页验证 #### http://192.168.133.10:1122 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 7] #### 四.挂载数据卷 #### * 通过挂载数据卷的方法,可以在不进入容器的情况下编辑网页文档 #宿主机目录/root/apache挂载到容器中的/var/www/html docker run --name web -d -p 8080:80 -v /root/apache:/var/www/html httpd:centos #拖入图片并,编辑网页文档 <Img src="c.jpg"/> </body> </html> ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 8] ### 验证: ### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 9] ## 总结: ## **dockerfile**:以文件形式,构建镜像 **add和copy区别** 1.copy:仅用于复制 add可解压,对文件进行操作 2.资源消耗 copy消耗的资源时小于ADD的 **dockerfile操作命令** **FROM**:指定新镜像 **MAINTAINER**:镜像维护人员信息 **RUN**:镜像执行命令,提交到新镜像中 **EXPOSE**:指定新镜像加载到docker时要开启的端口 **ADD**:复制文件,必须是相同目录中,可解压 **COPY**:复制文件,源文件/目录要与dockerfile相同目录中 **CMD**:启动容器要运行的脚本/命令,只能有一条CMD命令 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center]: /images/20210726/a58f3148e1ab4253b041f8e5d726c519.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 1]: /images/20210726/8ae99bb4eb9a48c6b11afc3f99413a65.png [20210601192659289.png_pic_center]: /images/20210726/bf1ee08d6492415d8a737e6ffb25e2f8.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 2]: /images/20210726/5e2d99e2d12a4d6a8854ad47251b7426.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 3]: /images/20210726/f95db4763b124db0a7cab6d965650ee8.png [20210601193727382.png_pic_center]: /images/20210726/3836310a65324f9994bdc506a779ff80.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 4]: /images/20210726/1137cdfa39424e58901f3fb56ef0eb64.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 5]: /images/20210726/ececf7dcaccf47d3b4b0ab67d20899bb.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 6]: /images/20210726/ae6431d722e94af9a632baa7a25c7906.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 7]: /images/20210726/332997b29af3480cb8af9fbf3e7195de.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 8]: /images/20210726/2c2a5cb2925a4cf6b20b713e56688381.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1dzeHlp_size_16_color_FFFFFF_t_70_pic_center 9]: /images/20210726/20c861b6f22e407187ec4eb67c0488d2.png
还没有评论,来说两句吧...