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指令来向外部公开多个端口。

posted on 2018-02-01 10:16  力奋  阅读(312)  评论(0编辑  收藏  举报