• Dockerfile常用命令和制作镜像


    一、Dockerfile常用命令

    FROM

    指定基础镜像,Dockerfiel的第一条命令

    格式:
      FROM <images>
      FROM <images>:<tag>
    
    若使用第一种格式,则基础镜像的tag为latest

     MAINTAINER

    镜像维护者信息

    格式:
        MAINTAINER <name>

     RUN

    构建镜像时在镜像中运行的shell命令

    格式:
        RUN <command>   
        RUN ["executable", "param1", "param2"]
    
    第一种格式(shell形式)默认使用/bin/sh -c 执行命令,推荐使用第一种格式
    第二种格式(exec形式)使用exec执行命令
    
    若想使用其他shell类型执行命令,请使用第二种格式即 RUN ["/bin/bash","-c","command"]
    
    多条RUN命令可以合并,如:
    RUN command1 
    && command2 
    && command3

    ENV

    设置镜像的环境变量

    格式:
        ENV <key> <value>  
        ENV <key>=<value> ...  
    
    第一种格式一次只能设置一个环境变量
    第二种可以设置多个环境变量,若需换行使用反斜杠() 

    EXPOSE

    设置启动镜像时要暴露的端口,用于与外界交互

    格式:
        EXPOSE <port> [<port1>...]
     

    VOLUME

    申明容器挂载点

    格式:
       VOLUME ["/path1/to/dir1""/path2/to/dir2"]

    USER

    指定启动镜像时运行用户

    格式:
      USER <user>[:<usergroup>]
      USER <uid>[:<gid>]
    
    使用用户之前请确保镜像中有该用户,创建用户可以 RUN groupadd
    -r 用户 && useradd -u uid -r -g 用户组 用户 使用USER指定用户后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户
     WORKDIR 

    设置进入容器的默认目录

    格式:
        WORKDIR </path/to/workdir>

     ADD 

    拷贝本地文件或目录到镜像中

    格式:
        ADD <src> <dest>
      ADD ["<src>", "<dest>"]   用于支持包含空格的路径
    
    src是Dockerfile文件所在的同一级目录或者同级目录的子目录路径 tar类型的文件会自动解压到dest目录下 注意:
    1.src是个文件,且dest以 / 结尾, 则docker会把dest当作目录,会把src文件拷贝到dest目录下。 如果dest不存在,则会自动创建 2.src是个文件,且dest不以 / 结尾,则docker会把dest当作文件,会把dest文件替换为src文件。 如果dest不存在,则创建名为src的文件 3.src是个目录,且dest不存在,则docker会自动以dest创建一个目录,把src目录下的文件拷贝进来。 如果dest是个已经存在的目录,则docker会把src目录下的文件拷贝到dest下

    COPY

    拷贝本地文件或目录到镜像中

    格式:
      COPY <src> <dest> 与ADD功能相似,但是不能解压tar类型的文件

    CMD

    启动容器时执行的shell命令

    格式:
        CMD ["executable","param1","param2"] (exec形式执行可执行文件,优先)
        CMD command param1 param2 (shell形式执行命令)
    
    Dockerfile中只能有一条CMD命令,如果指定多条,只有最后一条生效,推荐使用第一种格式
    第二种格式默认使用/bin/sh -c 执行命令
    若要改变shell类型,请使用第一种格式即 CMD ["/bin/bash","-c","command","param1","param2"]
    CMD会被docker run命令行指定的参数所覆盖 

    ENTRYPOINT 

    启动容器时执行的shell命令

    格式:
        ENTRYPOINT ["executable","param1","param2"] (exec形式执行可执行文件,优先)
        ENTRYPOINT command param1 param2 (shell形式执行命令)
    
    第二种格式默认使用/bin/sh -c 执行命令
    Dockerfile文件中也可以存在多个ENTRYPOINT指令,但仅有最后一个会生效
    同CMD类似,但是不会被docker run命令行指定的参数所覆盖,可以被docker run --entrypoint 覆盖
    若Dockerfile中既有CMD(通常位置会在ENTRYPOINT之后)又有ENTRYPOINT,则CMD会被当做参数传递给ENTRYPOINT
     

    ARG

    构建镜像时,指定变量 

    格式:
      ARG <name> 
      ARG <name>=<default value>
    
    第一种格式:变量值可以在docker build --build-arg name=value时指定  

    二、制作镜像 

    命令:
      Dockerfile在当前目录下:
      docker build -t 镜像名:tag .
    
      Dockerfile不在当前目录下(-f 指定Dockerfile文件路径,xxx/为构建docker镜像时的上下文路径,即该目录下的文件可以在Dockerfile中COPY/ADD):
      docker build -t 镜像名:tag -f xx/Dockerfile xxx/
     

    基于centos:7的tomcat8.5.53镜像制作

    Dockerfile文件内容

    #指定基础镜像
    FROM centos:7
    
    #指定运行的用户
    USER root
    
    #拷贝包到镜像指定目录
    ADD jdk-8u241-linux-x64.tar.gz /usr/local/
    ADD apache-tomcat-8.5.53.tar.gz /app
    
    #设置工作目录
    WORKDIR /app/apache-tomcat-8.5.53
    
    #设置环境变量
    ENV JAVA_HOME=/usr/local/jdk1.8.0_241 
        JRE_HOME=/usr/local/jdk1.8.0_241/jre 
        CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
    ENV PATH=${JAVA_HOME}/bin:${PATH}
    
    #申明挂载点
    VOLUME ["/app/apache-tomcat-8.5.53/log","/app/apache-tomcat-8.5.53/conf","/app/apache-tomcat-8.5.53/webapps"]
    
    #暴露容器端口
    EXPOSE 8080
    
    #进入容器时启动tomcat
    ENTRYPOINT ["bin/catalina.sh","run"]#指定基础镜像
    FROM centos:7
    
    #指定运行的用户
    USER root
    
    #拷贝包到镜像指定目录
    ADD jdk-8u241-linux-x64.tar.gz /usr/local/
    ADD apache-tomcat-8.5.53.tar.gz /app
    
    #设置工作目录
    WORKDIR /app/apache-tomcat-8.5.53
    
    #设置环境变量
    ENV JAVA_HOME=/usr/local/jdk1.8.0_241 
        JRE_HOME=/usr/local/jdk1.8.0_241/jre 
        CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
    ENV PATH=${JAVA_HOME}/bin:${PATH}
    
    #申明挂载点
    VOLUME ["/app/apache-tomcat-8.5.53/log","/app/apache-tomcat-8.5.53/conf","/app/apache-tomcat-8.5.53/webapps"]
    
    #暴露容器端口
    EXPOSE 8080
    
    #进入容器时启动tomcat
    ENTRYPOINT ["bin/catalina.sh","run"]

      

    Dockerfile文件所在目录下的内容

    制作镜像

  • 相关阅读:
    linux下聊天工具的安装
    Linux上OpenLDAP集群
    Linux下python基础调试
    曾仕强主讲:易经的奥秘(全文讲义)
    Linux单网卡多个IP(或者多个网卡多个IP)设置
    单播、广播、组播的区别和特点
    谷歌招聘 变态15题你会做几道?
    Gartner再评RSA为网络欺诈检测领导者 狼人:
    云安全 安全领域的最大热点之一 狼人:
    金山毒霸专业版高调上线 宣称杀毒速度增3倍 狼人:
  • 原文地址:https://www.cnblogs.com/gudanaimei/p/12218994.html
Copyright © 2020-2023  润新知