• 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的内容。

  • 相关阅读:
    wordwrap:breakword与wordbreak:breakall的区别所在
    python的dir()和help()
    我理解的正则表达式
    使用 OpenPyXL 批量取消「合并单元格」并自动填充值
    清除 Python 项目生成的 __pycache__ 或 pyc 缓存文件
    ElementUI + VUE学习之rules详解
    常用css样式
    tsnode报错
    自定义一个多选框样式
    eldatepicker在type为daterange时限定,日期的结束时间必须大于起始时间
  • 原文地址:https://www.cnblogs.com/jie-fang/p/7206981.html
Copyright © 2020-2023  润新知