zoukankan      html  css  js  c++  java
  • DockerFile 解析及案例

    首先我们大体回顾一下使用dockerfile来创建容器数据卷的过程:
        1.手动编写一个dockerfile文件,当然,必须要符合file的规范
        2.有这个文件后,直接docker  build命令执行,获得一个自定义的新镜像
        3.run
    总体为三大步:编写,构建,执行
     
    是什么?
        DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本
        构建三步骤
            编写Dockerfile文件
            docker  build
            docker  run
        文件是什么样的???
            以我们熟悉的Ubuntu为例:
            可以直接去 https://hub.docker.com 官网搜索 ubuntu 查看其dockerfile
    DockerFile构建过程解析
        Docker内容基础知识
            1.每条保留字指令必须为大写字母且后面要跟随至少一个参数
            2.指令按照从上到下,顺序执行;
            3.#-->表示注释;
            4.每条指令都会创建一个新的镜像层,并对镜像层进行提交;
        Docker执行DockerFile的大致流程
            1.docker从基础镜像(base image -- scratch)运行一个容器;
            2.执行一条指令并对容器做出修改;
            3.执行类似docker  commit 的操作提交一个新的镜像层;
            4.docker再基于刚提交的镜像像运行一个新容器;
            5.执行dockerfile中的下一条指令直到所有指令都执行完成;
        总结
            图例:
        
        图例二:
      
    DockerFile体系结构
        FROM
            基础镜像,当前新镜像是基于哪个镜像的;
        MAINTAINER
            镜像维护者(作者)的姓名和邮箱地址;
        RUN
            容器构建时需要运行的命令;
        EXPOSE
            当前容器对外暴露出的端口;
        WORKDIR
            指定在创建容器后,终端默认登录进来的工作目录,一个落脚点;
        ENV
            用来在构建镜像过程中设置环境变量;
            图例解释:
                
        ADD
            将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包;
        COPY
            类似ADD,拷贝文件和目录到镜像中;
            将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标目录>位置
                写法分两种:
                    1.shell脚本类型:COPY  src  dest
                    2.json串的方式:COPY  ["src", "dest"]
        VOLUME
            容器数据卷,用于数据保存和持久化工作;
        CMD
            指定一个容器启动时要运行的命令;
            Dockerfile中可以有多个CMD指令,但只有最后一个生效CMD会被docker run 之后的参数替换
            图例解释:
                
        ENTRPOINT
            指定一个容器启动时要运行的命令;
            ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数,不会被docker run 的参数覆盖而是追加
        ONBUILD
            当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发;
        总结
            图例:
                
    案例
        Base镜像(scratch)
            Docker  Hub 中99%的镜像都是通过在 base镜像中安装和配置需要的软件构建出来的;
        自定义镜像myubuntu:(想让其支持:1.登陆后指定自己定义的路径; 2.vim编辑器;3.查看网络配置ifconfig支持;)
            1.编写
                Hub默认Ubuntu镜像基本之后内核,不支持vim/ifconfig
                准备编写DockerFile文件(cd  /mydocker)
                myUbuntu内容DockerFile
                图例展示:
                   
            2.构建
                命令:docker build  -t  新镜像名字:TAG  .
                示例:sudo docker build -f /mydocker/Dockerfile2 -t myubuntu:1.3 . 
                构建成功图例展示:
        
            3.运行
                图例展示:
        
            4.列出镜像的变更历史
                命令:docker history  镜像名/ID
                示例:sudo docker history  myubuntu:1.3  (顺着加载倒着执行)
                图例展示:
        CMD/ENTRPOINT 镜像案例
            都是指定一个容器启动时要运行的命令
            CMD
                1.Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker  run 之后的参数替换掉
                2.Case:
                    tomcat 的讲解演示  ---> docker run -it  -p 7777:8080  tomcat  ls -l   (这样导致容器没有启动因为覆盖了 最后的命令
            ENTRYPOINT
                1.docker  run  之后的参数会被当做参数传递给ENTRYPOINT,之后形成新的命令组合;
                2.Case:
                    制作CMD版可以查询IP信息的容器
                        
                    补充curl命令: 
          
                    问题
                        如果我们希望显示HTTP头信息,就需要加上 -i  参数
                    WHY
                        为什么加了-i 参数出现报错了?
          
                    制作ENTRYPOINT版查询IP信息的容器
                        
        自定义镜像Tomcat9:(主要用来学习 ADD + COPY 保留关键字指令;继承的话我们一般会用到ONBUILD
            1.sudo mkdir -p  /gs/mydockerfile/tomcat9
            2.在上述目录下 touch  c.txt
            3.将jdk 和 tomcat 安装的压缩包拷贝进上一步目录
                下载地址:
                    https://tomcat.apache.org/download-90.cgi
            4.在 /gs/mydocker/tomcat9目录下新建Dockerfile 文件
                sudo vim  Dockerfile 
                内容为:
                    
            5.构建:
            6.run:
            7.验证:
            8.结合前述的容器卷将测试的web服务test发布:
    总结
        图例:
          
  • 相关阅读:
    Angular(一)
    多变的形状
    二叉树
    快速排序
    冒泡排序
    插入排序
    大话程序猿眼里的高并发架构
    整屏滚动
    增加删除一行标签
    无缝滚动
  • 原文地址:https://www.cnblogs.com/guo-s/p/14831827.html
Copyright © 2011-2022 走看看