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

    1,CMD

    CMD指令用于指定一个容器启动时要运行的命令。如下例子将-1标志传递给/bin/true命令。在Dockerfile中只能指定一条CMD指令 。如果想在启动容器时运行多个进程或者多条命令,可以考虑使用类似Supervisor服务管理工具。

    CMD ["/bin/true","-1"]
    

    2,ENTRYPOINT

    ENTRYPOINT指令与CMD指令非常类似,也很容易和CMD指令弄混。这两个指令区别,我们可以在docker run命令行中覆盖CMD指令,ENTRYPOINT指令不能覆盖。docker run命令行中指定的任何参数都会被当做参数再次传递给ENTRYPOINT指令中指定的命令。docker run --entrypoint覆盖ENTRYPOINT指令。通过以数组方式指定ENTRYPOINT在想运行的命令前加入/bin/sh -c来避免各种问题。

    ENTRYPOINT ["/usr/sbin/nginx"]
    ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]

    3,WORKDIR

    WORKDIR指令用来在从镜像创建一个新容器时,在容器内部设置一个工作目录,ENTRYPOINT和/或CMD指定的程序会在这个目录下执行。

    WORKDIR /opt/webapp/db
    RUN bundle install
    WORKDIR /opt/webapp
    ENTRYPOINT ["rackup"]
    

    4,ENV

    ENV指令用来在镜像构建过程中设置环境变量

    ENV RVM_PATH /home/rvm

    5,USER

    USER指令用来指定该镜像会以什么样的用户去运行。默认用户为root。docker run -u覆盖指令的值

    USER user:group
    USER uid:gid

    6,VOLUME

    VOLUME指令用来向基于镜像创建的容器添加卷。一个卷是可以存在于一个或者多个容器内的特定的目录,这个目录可以绕过联合文件系统,并提供如下共享数据或者对数据进行持久化的功能。

    •  卷可以在容器间共享和重用
    • 一个容器可以不是必须和其他容器共享卷
    • 对卷的修改是立时生效的
    • 对卷的修改不会对更新镜像产生影响
    • 卷会一直存在直到没有任何容器再使用它
    VOLUME ["/opt/project","/data"]

    docker cp是和VOLUME指令相关并且也是很实用的命令。该命令允许从容器复制文件和复制文件到容器上

    7,ADD

    ADD指令用来将构建环境下的文件和目录复制到镜像中。ADD会自动将归档文件解开。

    ADD software.lic /opt/application/software.lic
    ADD latest.tar.gz /var/www/wordpress

    8,COPY

    COPY指令非常类似于ADD,它们根本的不同是COPY只关心在构建上下文中复制本地文件,而不会去做文件提取(extraction)和解压(decompression)的工作。

    COPY conf.d/ /etc/apache2/

    9,LABEL

    LABEL指令用于为Docker镜像添加元数据。元数据以键值对的形式展现。LABEL指令在Docker1.6版本中引入。

    LABEL version="1.0"
    LABEL location="New York" type="Data Center" role="Web Server"

    使用docker inspect命令查看容器标签

    docker inspect jamtur01/apache2

    10,STOPSIGNAL

    STOPSIGNAL指令用来设置停止容器时发送什么系统调用信号给容器。这个信号必须是内核系统调用表中合法的数,如9,或者SIGNAME格式中的信号名称,如SIGKILL。

    STOPSIGNAL指令是在Docker1.9版本中引入的。

    11,ARG

    ARG指令用来定义可以在docker build命令运行时传递给构建运行时的变量,我们只需要在构建时使用--build-arg标志即可。用户只能在构建时指定在Dockerfile文件中定义过的参数。ARG指令在Docker1.9版本中引入。

    ARG build
    ARG webapp_user=user

    预定义ARG变量

    HTTP_PROXY
    http_proxy
    HTTPS_PROXY
    https_proxy
    FTP_PROXY
    ftp_rpoxy
    NO_PROXY
    no_proxy

    12,ONBUILD

    ONBUILD指令能为镜像添加触发器。当一个镜像被用做其他镜像的基础镜像时,该镜像中的触发器将会被执行。

    ONBUILD ADD ./app/src
    ONBUILD RUN cd /app/src && make

    13,FROM

    FROM指令指定一个已经存在的镜像,后续指令都将基于该镜像进行,这个镜像被称为基础镜像(base image)。在运行一个容器时,必须要指明是基于哪个基础镜像在进行构建。

    FROM ubuntu:14.04

    14,MAINTAINER

    MAINTAINER指令会告诉Docker该镜像的作者是谁,以及作者的电子邮件地址。

    MAINTAINER James Turnbull “james@example.com”

    15,RUN

    RUN指令会在构建当前镜像中运行指定的命令。每条RUN指令都会创建一个新的镜像层,如果该指令执行成功,就会将此镜像层提交,之后继续执行Dockerfile中的下一条指令。默认情况下,RUN指令会在shell里使用命令包装器/bin/sh -c来执行。如果是在一个不支付shell的平台上运行或者不希望在shell中运行(比如避免shell字符串慕改),也可以使用exec格式的RUN命令。

    RUN ["apt-get","install","-y","nginx"]
    RUN apt-get update && apt-get install -y nginx

    16,EXPOSE

    EXPOSE指令告诉Docker该容器内的应用程序将会使用容器的指定端口。这并不意味着可以自动访问任意容器运行中服务的端口。出于安全的原因,Docker并不会自动打开该端口,而是需要用户在使用docker run运行容器时来指定需要打开哪些端口。可以指定多个EXPOSE指令来向外部公开多个端口。

  • 相关阅读:
    25、Base64
    24、AES RSA加密处理记录
    23、获取app所占据的内存
    22、DDMS(转载)
    21、HierarchyViewer使用记录
    kubernetes 操作 serviceaccounts
    删除dashboard
    数据库建库指定UTF-8和jdbc连接字符串
    apt 被卸载
    EasyReport报表工具部署
  • 原文地址:https://www.cnblogs.com/birdstudio/p/8397670.html
Copyright © 2011-2022 走看看