Dockerfile的常用指令

Dockerfile命令格式:

#nginx:test(镜像名称:镜像标签)
docker build -t nginx:test .

1.CMD

功能:CMD指令用于指定一个容器启动时要运行的命令。
例:这里我们将-l标志传递给了/bin/bash命令。

CMD ["/bin/bash","-l"]

Docker推荐一直使用以数组语法来设置要执行的命令。
注:使用docker run命令可以覆盖CMD指令。

2.ENTRYPOINT

功能:ENTRYPOINT与CMD指令类似,ENTRYPOINT指令提供的命令不容易在启动容器时被覆盖。实际上,docker run命令行中指定的任何参数都会被当作参数再次传递给ENTRYPOINT指令中指定的命令。
例:

#为ENTRYPOINT指令指定参数
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
#用新的ENTRYPOINT指令重新构建static_web镜像
sudo docker build -t="test/static_web" .
#使用docker run 命令启动包含ENTRYPOINT指令的容器
sudo docker run -t -i test/static_web -g "daemon off;"

重新并构建了一个新的镜像,并且启动了一个交互的容器。我们指定了-g ”daemon off;"参数,这个参数会传递给用ENTRYPOINT指定的命令,在这里该命令为/usr/sbin/nginx -g "daemon off;"。该命令会议前台运行的方式启动Nginx守护进程,此时这个容器就会作为一台Web服务器来运行。

#同时使用ENTRYPOINT和CMD指令
ENTRYPOINT ["/usr/sbin/nginx"]
CMD ["-h"]

此时当我们启动一个容器时,任何在命令行中指定的参数都会被传递给Nginx守护进程。比如,我们可以指定-g "daemon off;"参数让Nginx守护进程以前台方式运行。如果再启动容器时不指定任何参数,则在CMD指令中指定的-h参数会被传递给Nginx守护进程,即Nginx服务器会以/usr/sbin/nginx -h的方式启动,该命令用来显示Nginx的帮助信息。

3.WORKDIR

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

#使用WORKDIR指令
WORKDIR /opt/webapp/db
Run bundle install
WORKDIR /opt/webapp
ENTRYPOINT ["rackup"]

我们将工作目录切换为/opt/webapp/db后运行了bundle install命令,之后又将工作目录设置为/opt/webapp,最后设置了ENTRYPOINT指令来启动rackup命令。
-w标志在运行时覆盖工作目录

sudo docker run -ti -w /var/log ubuntu pwd /var/log

该命令会将容器内的工作目录设置为/var/log

4.ENV

功能:ENV指令用来在镜像内构建过程中设置环境变量。
例:

ENV RVM_PATH /home/rvm

这个新的环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面制定了环境变量前缀一样

RUN gem install unicorn

该指令会以如下方式执行:

RVM_PATH=/home/rvm/ gem install unicorn

也可以是用docker run命令行的-e标志来传递环境变量。这些变量将只会在运行时有效

5.USER

功能:USER指令用来指定该镜像会以什么样的用户去运行。
例:

USER nginx

基于该镜像启动的容器会以nginx用户的身份来运行,如果不通过USER指令指定用户,默认用户为root。

6.VOLUME

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

  • 卷可以在容器间共享和重用。
  • 一个容器可以不是必须和其他容器共享卷。
  • 对卷的修改时立时生效的。
  • 对卷的修改不会对更新镜像产生影响。
  • 卷会一直存在直到没有任何容器再使用它。
    卷功能让我们可以将数据(如源代码)、数据库或者其他内容添加到镜像中而不是将这些内容提交到镜像中,并且允许我们再多个容器件共享这些内容。
    例:
#指定一个挂载点
VOLUME ["/opt/project"]
##数组方式指定多个挂载点
VOLUME ["/opt/project","/data"]

这条指令将会为基于此镜像创建的任何容器创建一个名为/opt/project的挂载点。

7.ADD

功能:ADD指令用来将构建环境下的文件和目录复制到镜像中。如果将一个归档文件(合法的归档文件包括gzip、bzip2、xz)指定为源文件,Docker会自动将归档文件解开(unpack)。
例:

ADD latest.tar.gz /var/www/wordpress

指向源文件的位置参数可以是一个URL,或者构建上下文或环境中文件名或者目录。不能对构建目录或者上下文职位的文件进行ADD操作。
如果目的位置的目录下已经存在了 和归档文件同名的文件或者目录,那么目的位置中的文件或者目录不会被覆盖。

8.COPY

功能:与ADD指令类似,它们的根本不同时COPY只关心在构建上下文中复制本地文件,而不会去做文件提取和解压的工作。
例:

COPY test.txt/ /etc/apache2/

这条指令将会把本地test.txt目录中的文件复制到/etc/apache2/的目录中。
如果目的位置不存在,Docker将会自动创建所有需要的目录结构,就像mkdir -p命令。

9.LABEL

功能:LABEL指令用于为Docker镜像添加元数据。元数据以键值对的形式展现。
例:

LABEL location="New York" type="Data Center" version="1.0"

LABEL 指令以label="value"的形式出现。可以在每一条指令中指定一个或多个元数据,不同元数据用空格分隔。

10.STOPSIGNAL

功能:STOPSIGNAL指令用来设置停止容器时发送什么系统调用信号给容器。这个信号必须时内核系统调用表中合法的数。

11.ARG

功能:ARG指令用来定义可以在docker build命令运行时传递给构建运行时的变量,我们只需咋构建时使用--build-arg标志即可。用户只能在构建时指定在Dockerfile文件中定义过的参数。
例:

ARG build
ARG webapp_user=user

上面例子中第二条ARG指令设置了一个默认值,如果构建是没有为该参数指定值,就会使用这个默认值。

docker build --build-arg build=1234 -t test/webapp .

这里构建test/webapp竟像是,build变量将会设置为1234,而webapp——user变量则会继承设置的默认值user。

12.ONBUILD

功能:ONBUILD指令能为镜像台南佳触发器(trigger),当一个镜像被用作其他镜像的基础镜像时,该镜像中的触发器将会被执行。
ONBUILD触发器会按照在父镜像中指定的顺序执行,并且只能被继承一次(也就是说只能在子镜像中执行,而不会在孙子镜像中执行)

13.EXPOSE

功能:声明端口
帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
在运行时使用随机端口映射 docker run -P 时,会自动随机映射 EXPOSE 的端口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值