dockerfile指令汇总

1.cmd
    指定一个容器启动时可用的指令或指令和参数。
    cmd ["/bin/true"]
    cmd["/bin/bash","-l"]
    注意:docker run会覆盖cmd命令;深刻理解cmd和entrypoint之间的相互作用也是十分重要的;容器里只能指定一条cmd指令,如果需要启动容器的时候运行多个进程或者命令,考虑使用supervisor服务管理工具。
2.entrypoint
    docker run执行的指令不会覆盖,且docker run命令行中的参数会被当做参数再次传递给entrypoint指令。
    ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
    CMD ["-H"]
    注意:docker run --entrypoint标志覆盖ENTRYPONIT指令
3.WORKDIR
    从镜像中创建一个容器,在容器内部设置一个工作目录,ENTRYPOINT,CMD指令会在这个目录下执行。
    WORKDIR /opt/apps/db
    RUN bundle install 
    注意:可以使用 docker run -w /workdir 覆盖工作目录
4.ENV
    用来在构建过程中设置环境变量
    ENV RVM_PATH /home/rvm/
    ENV TARGET_DIR /opt/app
    WORDIR $TARGET_DIR

    docker -e 标志可以传递环境变量,这些变量将只会在运行时有效
5.user
    指定启动容器的用户,uid,user或者和gid,group组合。
    docker run -u可以覆盖改指令
6.VOLUME
    向容器添加卷。一个卷可以存在一个或者多个容器内的特定目录中。
    卷的特点:
        卷可以在容器之间共享和重用
        一个容器可以自私地占用某个卷
        卷的修改是即时生效
        对卷的修改不会对更新镜像产生影响
        卷会一直存在直到没有容器使用它

        VOLUME ["/opt/project","/data"]

    提示:docker cp是和volume指令相关并且也是很实用的命令。该命令可以从容器中复制文件,也可以复制文件到容器上。

7.add
    add指令用来将构建环境下的文件和目录复制到镜像中。  

    ADD software.lic /opt/application/software.lib
    将构建目录下的software.lic文件复制到容器/opt/application/software.lic
    构建的源文件可以是url或者是构建上下文或环境中文名或者目录
    目的地址以"/"字符来判断文件源是目录还是文件

    ADD latest.tar.gz /var/www/wordprss/
    如果源端存在压缩文件,会自动压缩到目的端

    注意:ADD指令会使得构建缓存变得无效。

8.COPY
    COPY只关心构建上下文中复制本地文件,而不去做提取和解压工作。
    本地文件都放到与Dockerfile同一个目录下,不能放在改目录的之外的仁和目录。
    目标目录必须是绝对路径
    COPY conf.d/ /etc/apache2/
    在这个例子中源文件是以"/"结尾,所以docker会认为它是目录,并将它复制到目的目录中。,如果目的目录不存在,docker会创建所需要的目录结构。
9.LABEL
    label指令用于为docker镜像添加元数据。元数据一键值对的形式展现。
    LABEL version="1.0"
    LABEL location="Los Angeles" type="Date Center" role="Web Server"
10.STOPSIGNAL
    stopsignal指令用来设置停止容器时发送什么系统调用信号给容器。这个信号必须是内核系统调用表中合法的值。
11.ARG
    arg指令用来docker build命令运行时传递参数,我们只需要在构建时使用--build-arg标志即可。但是有个前提条件,用户在构建过程中只能使用在dockerfile定义过的参数。
    ARG build
    ARG webapp_user=nginx

    docker build --build-arg build=1234 huwho/webapp
12.ONBUILD
    onbuild指令能为镜像添加触发器。当一个镜像被用作其他镜像的基础镜像时(比如用户镜像需要从某未准备好的位置添加源代码,或者用户需要执行特定于构建镜像的环境的构建脚本),改镜像中的触发器将会被执行。
    触发器会在构建过程中添加指令。
    ONBUILD ADD . /app/src
    ONBUILD RUN cd /app/src && make