• DockerFile解析


    一、简介

      Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本

      构建三步: DockerFile文件 ==> docker build ==> docker run

      Dockerfile可参考官方Dockerfile文件

     

    二、构建过程解析

    1,Dockerfile内容基础知识:

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

      b>指令按照从上到下,顺序执行

      c>#表示注释

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

    2,Docker执行Dockerfile的大致流程:

      a>docker从基础镜像运行一个容器

      b>执行一条指令并对容器作出修改

      c>执行类似docker commit的操作提交一个新的镜像

      d>docker再基于刚提交的镜像运行一个新容器

      e>执行dockerfile中的下一条指令直到所有指令都执行完成

     

    三、Dockerfile保留字指令:

    FROM:基础镜像,当前镜像是基于那个镜像的。
    
    MAINTAINER:作者  邮箱。
    
    RUN:容器构建时需要运行的命令。
    
    EXPOSE:暴露端口号 启动容器的时候还需使用 –p 指定端口。
    
    WORKDIR:指定在创建容器后,终端默认登录后进来的工作目录,一个落脚点,默认根目录,通常绝对路径,CMD ENTRYPOINT 都会在这个目录下执行。
    
    ENV:构建镜像的过程中设置环境变量, 构建和运行时都有效可以使用$引用。
    
    ADD:将宿主机目录下的文件拷贝到镜像且会自动处理URL和 解压tar 压缩包。
    
    COPY:拷贝文件和目录到镜像中,将从构建上下文目录中<源路径>的文件/复制到新的一层镜像内<目标路径>的位置。语法:COPY src dest  COPY [“src”, “desc”]。
    
    VOLUME:容器数据卷, 数据保存和持久化。
    
    USER:指定该镜像由什么用户运行  不指定由root 运行。
    
    CMD:指定容器启动时要运行默认的命令,Dockerfile中可以有多个cmd , 但只有最后一个生效。
    
    ENTERPOINT:指定容器启动时要运行的命令。在docker run 后面追加参数
    ONBUILD:触发器, 当构建一个被继承的dockerfile时运行命令, 父镜像在被子继承后的父镜像的onbuild 被触发。

          

    四、Dockerfile的案例总结

    1,自定义mycentos镜像(需要安装有vim和ifconfig命令)

      a>定义Dockerfile文件

    FROM centos
    #定义作者用邮箱
    MAINTAINER xc<xxyy@163.com>
    ENV DEFAULTDIR /usr/local
    #落脚点
    WORKDIR $DEFAULTDIR
    #安装vim和net-tools
    RUN yum -y install  vim
    RUN yum -y install  net-tools
    #容器暴露端口
    EXPOSE 80
    CMD /bin/bash

      b>构建build

    #如果为当前路径下的Dockerfile文件可以省略-f
    docker build -f /mydocker/Dockerfile -t mycentos:1.0 .
    #查看构建历史
    docker history mycentos:1.0

      c>运行

    docker run -it -d mycentos:1.0

    2,CMD与ENTRYPOINT区别

      a>Dockerfile

    FROM centos
    RUN yum install -y curl
    #CMD
    [ "curl", "-s", "http://ip.cn" ]
    ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]

      b>构建docker build  -t myip .

      c>运行:docker run myip -i (CMD命令构建报错,-i命令会覆盖curl -s命令;ENTRYPOINT命令会打出头信息)

    3,自定义tomcat

      a>当前目录下文件

      b>Dockerfile

    FROM centos
    ENV MY_PATH /usr/local
    WORKDIR $MY_PATH
    
    COPY 1.txt $MY_PATH/contain.txt #添加jdk和tomcat ADD apache
    -tomcat-7.0.75.tar.gz $MY_PATH ADD jdk-8u121-linux-x64.tar.gz $MY_PATH RUN yum -y install vim ENV JAVA_HOME $MY_PATH/jdk1.8.0_121 ENV TOMCAT_HOME $MY_PATH/apache-tomcat-7.0.75 ENV PATH $PATH:$JAVA_HOME/bin:$TOMCAT_HOME/:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 CMD $TOMCAT_HOME/bin/startup.sh && tail -F $TOMCAT_HOME/logs/catalina.out

      c>构建:

    docker build -t mytomcat .

      d>启动:

    docker run -d -p 8090:8080 --name myt -v /mydocker/mytomcat/test:/usr/local/apache-tomcat-7.0.75/webapps/test 
    -v /mydocker/mytomcat/logs/:/usr/local/apache-tomcat-7.0.75/logs --privileged=true mytomcat

      则可以在宿主机上之间获取访问容器内日志同时test目录下的项目也可对应容器内项目的class文件

  • 相关阅读:
    css
    10个顶级的CSS和Javascript动画框架推荐
    js格式化时间(自己修改并注释)
    分享一篇获取键盘数值的js(限制在IE浏览器)
    Myeclipse一个设置小技巧,加速编码提示。
    悲剧的代码工
    Log4j与commonlogging
    没有人的了
    不想被淘汰,就别做这八种人!
    MVN 资料一
  • 原文地址:https://www.cnblogs.com/bbgs-xc/p/12961204.html
Copyright © 2020-2023  润新知