20210323-docker_6DockerFile解析

6-1、是什么

  6-1-1、DockerFile是用来构建Docker镜像的构建文件,由一系列命令和参数构成的脚步

    docker build [-f Dcokerfile文件] -t 镜像路由/镜像名:TAG .

    注意:docker build 命令以“.”收尾(“.”是当前目录的意思)

  6-1-2、构建三步骤

    1、编写DockerFile文件

    2、docker build

    3、docker run

  6-1-3、文件什么样?

    以CentOS为例:https://hub.docker.com/_/centos/

6-2、DockerFile构建过程解析

  6-2-1、DockerFile内容基础知识

    1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数

    2、指令按照从上到下,顺序执行

    3、#表示注释

    4、每条指令都会创建一个新的镜像层,并对镜像进行提交

  6-2-2、docker执行DockerFile的大致流程

    1、docker从基础镜像(scratch)运行一个容器

    2、执行一条指令并对容器作出修改

    3、执行类似docker commit的操作提交一个新的镜像层

    4、docker在基于刚提交的镜像运行一个新容器

    5、执行DockerFile中的下一条指令直到所有指令都执行完成

  6-2-3、小总结

    从应用软件的角度来看:

      1、DockerFile是软件的原材料:面向开发

      2、Docker镜像是软件的交付品:交付标准

      3、Docker容器是软件的运行态:部署与运维

6-3、DockerFile体系结构

  6-3-1、FROM:基础镜像,当前新镜像是基于那个镜像的

  6-3-2、MAINTAINER:镜像维护者的姓名和邮箱地址

  6-3-3、RUN:构建镜像时需要运行的命令

  6-3-4、EXPOSE:当前镜像对外露出的端口

  6-3-5、WORKDIR:指定在创建容器后,终端默认登陆进来的工作目录,一个落脚点

  6-3-6、ENV:用来在构建镜像过程中配置环境变量

  6-3-7、ADD:将宿主机目录下得文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包

  6-3-8、COPY:

    类似于ADD,拷贝文件和目录到镜像中。

    将从构建上下文目录中<源路径>的文件/目录复制到新的一层镜像内的<目标路径>位置

    1、COPY src dest

    2、COPY ["src","dest"]

  6-3-9、VOLUME:容器数据卷,用于数据保存和持久化工作

  6-3-10、CMD:

    1、指定一个容器启动时要运行的命令

    2、DockerFile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后的参数替换

  6-3-11、ENTRYPOINT:

    1、指定一个容器启动时要运行的命令

    2、ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数

  6-3-12、ONBUILD:当构建一个被继承的DockerFile时运行命令,父镜像在被子继承后父镜像的ONBUILD被触发

  6-3-13、小总结

    1、BUILD类:FROM、MAINTAINER、COPY、ADD、RUN、ONBUILD .dockerignore

    2、Both类:WORKDIR、USER

    3、RUN类:CMD、ENV、EXPOSE、VOLUME、ENTRYPOINT

6-4、案例

  6-4-1、Base镜像(scratch)

    Docker Hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的

  6-4-2、自定义镜像mycentos

    1、编写

      1、Hub默认CentOS镜像什么情况

      2、准备编辑DockerFile文件

      3、myCentOS内容的DockerFile:略

    2、构建

      docker build [-f Dockerfile] -t 新镜像名字:TAG .

    3、运行

      docker run -it 新镜像名字:TAG

    4、列出镜像的变更历史

      docker history 镜像ID

  6-4-3、CMD/ENTRYPOINT镜像案例

    1、都是指定一个容器启动时要运行的命令

    2、CMD

      1、DockerFile中可以有多个CMD指定,但是只有最后一个生效,CMD会被docker run之后的指令替换

      2、Case:tomcat讲解演示

        docker run -it -p 8888:8080 tomcat ls -l

    3、ENTRYPOINT

      1、docker run之后的参数会被当做参数传递给ENTRYPOINT,之后形成新的命令组,如下Case的curl -i参数

      2、Case

        1、制作CMD版查询IP信息的容器

          FROM centos

          RUN yum install -y curl

          CMD ["curl","-s","http://ip.cn"]

        2、问题

        3、WHY

        4、制作ENTRYPOINT版查询IP信息的容器

          FROM centos

          RUN yum install -y curl

          ENTRYPOINT ["curl","-s","http://ip.cn"]

  6-4-4、自定义镜像Tomcat9

    1、mkdir -p /zzyyuse/mydockerfile/tomcat9

    2、在上述目录下touch.txt

    3、将jdk和tomcat安装压缩包拷贝进上一步目录

      1、apache-tomcat-9.0.8.tar.gz

      2、jdk-8u171-linux-x64.tar.gz

    4、在/zzyy/mydockerfile/tomcat9新建Dockerfile文件

    5、构建

      构建成功

    6、run

      备注

    7、验证

    8、结合前述的容器卷将测试的web服务test发布

      1、总体概述

      2、web.xml:略

      3、a.jsp:略

      4、测试

6-5、小总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值