zoukankan      html  css  js  c++  java
  • Dockerfile常用指令

      利用Dockerfile构建镜像比较方便快捷,在编写Dockerfile文件中我们需要用到很多常用的指令,为了方便以后使用,具体用法及说明在此记录一下,如有错误请及时指出,谢谢!

    FROM指令:

    FROM <image>
    FROM <image>:<tag>
    View Code

     image必须是已存在的镜像

    作为将要构建的镜像的基础镜像
    必须是第一条非注释的指令
    例如:

    FROM ubuntu:latest
    View Code

    MAINTAINER指令:

    MAINTAINER<name>
    View Code

    指定镜像的作者信息,包含镜像的所有者和联系信息

    例如:

    MAINTAINER fngje "fngje0128@163.com"
    View Code

    RUN指令:(在镜像构建过程运行)

    RUN <command>    (shell模式)
        /bin/bash -c command
        RUN echo hello world
    RUN apt-get update
    RUN apt-get install -y nginx
    View Code

    每一个RUN命令都会在当前镜像的上层创建一个新的镜像来运行指定的命令。

    EXPOSE指令:

    EXPOSE <potrt>[<potrt>...]
    View Code

    指定运行该镜像的容器使用的端口,可以指定一个或多个端口,"EXPOSE 80"

    虽然在EXPOSE指令中已经暴露了80端口,但是在启动容器的时候还是要指定端口信息,容器本身不会自动暴露端口,例如:

    docker run -p 80 -d jie/nginx nginx -g "daemon off;"
    View Code


    CMD指令:(在容器运行时运行,docker run启动容器时如果指定了容器运行时的命令,那么CMD指令会被覆盖,不会执行)

    CMD [ "executable","param1","param2" ](exec模式)
    CMD command param1 param2 (shell模式)
    CMD ["param1","param2"](作为ENTERYPOINT指令的默认参数)
    View Code

    ENTERYPOINT指令:(不会被docker run启动容器时指定的指令覆盖,如果要覆盖,可以使用docker run --entrypoint覆盖)

    ENTERYPOINT ["executable","param1","param2"] (exec模式)
    ENTERYPOINT command param1 param2 (shell模式)
    View Code

    ADD指令:

    ADD <src>...<dest>
    ADD ["<src>"..."<dest>"] (适用于文件路径中有空格的情况)
    View Code

    COPY指令:

    COPY <src>...<dest>
    COPY ["<src>"..."<dest>"] (适用于文件路径中有空格的情况)
    View Code

    如下Dockerfile

    #use centos build nginx images
    FROM centos:latest
    MAINTAINER fngje "fngje0128@163.com"
    RUN yum update
    RUN yum install -y nginx
    COPY index.html /usr/share/nginx/html
    EXPOSE 80
    CMD ["/usr/sbin/nginx","-g","daemon off;"]
    View Code

    ADD与COPY指令对比:

    1. ADD包含类似tar的解压功能
    2. 如果单纯复制文件,Docker推荐使用COPY

    VOLUME指令:(用于向基于镜像创建的容器添加卷,一个卷可以存在于一个或多个容器的特定目录,这个目录可以绕过联合文件系统,并提供共享数据、数据持久化的功能)

    VOLUME ["/data"]
    View Code

    WORKDIR指令:(用来在从镜像创建新容器时,在容器内部设置工作目录,ENTERYPOINT或者CMD指令都会在这个目录下执行)

    WORKDIR /path/to/workdir
    View Code

    通常使用绝对路径,如果是相对路径,那么工作路径会一直传递下去。相对路径结果如下所示:

    WORKDIR /a
    WORKDIR b
    WORKDIR c
    RUN pwd
    #输出结果:
    "/a/b/c"
    View Code

    ENV指令:(用来设置环境变量与WORDDIR类似,在构建和运行中都生效)

    ENV <key><value>
    ENV <key>=<value>...
    View Code

    USER指令:(用来指定镜像以哪个用户去运行,基于该镜像启动的容器也会以该用户去运行)

    USER daemon
        USER nginx
    View Code

    可以使用 UID GID 用户组,默认使用root用户

    USER user            USER uid
    USER user:group        USER uid:gid
    USER user:gid                USER uid:group
    View Code

    ONBUILD指令:(为镜像添加触发器,当一个镜像被用作其他镜像的基础镜像时,这个触发器会被执行,当子镜像在构建时,会执行触发器中的指令)

    ONBUILD [INSTRUCTION]
    View Code

    可以看下面的Dockerfile文件:

    #use centos build nginx images
    FROM centos:latest
    MAINTAINER fngje "fngje0128@163.com"
    RUN yum install -y wget
    WORKDIR  /etc/yum.repos.d/
    RUN mkdir -p tmp/ && mv /etc/yum.repos.d/* tmp
    RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.c
    om/repo/epel-7.repo
    RUN yum install -y nginx
    ONBUILD index.html /usr/share/nginx/html
    EXPOSE 80
    CMD ["/usr/sbin/nginx","-g","daemon off;"]
    View Code

    构建这个镜像之后,以这个镜像为基础构建的新的nginx镜像就会执行ONBUILD指令中复制index.html文件,nginx的主页文件就会是当前Dockerfile同级目录中的index.html的内容。

  • 相关阅读:
    【leetcode】1215.Stepping Numbers
    【leetcode】1214.Two Sum BSTs
    【leetcode】1213.Intersection of Three Sorted Arrays
    【leetcode】1210. Minimum Moves to Reach Target with Rotations
    【leetcode】1209. Remove All Adjacent Duplicates in String II
    【leetcode】1208. Get Equal Substrings Within Budget
    【leetcode】1207. Unique Number of Occurrences
    【leetcode】689. Maximum Sum of 3 Non-Overlapping Subarrays
    【leetcode】LCP 3. Programmable Robot
    【leetcode】LCP 1. Guess Numbers
  • 原文地址:https://www.cnblogs.com/jie-fang/p/7206981.html
Copyright © 2011-2022 走看看