Docker学习笔记4.2-Dockerfile指令详述

Dockerfile文件中可以包含大量的指令,例如:CMD、ENTRYPOINT、ADD、COPY、VOLUME、WORKDIR、USER、ONBUILD、ENV等。可以在
https://docs.docker.com/engine/reference/builder/查看所有Dockerfile可用的全部指令。

CMD

CMD 指定容器启动时要运行的命令,类似于RUN,但是RUN指定的是容器创建时要运行的命令。
例:
在Dockerfile文件中添加

CMD["/BIN/BASH","-L"]

容器启动时就会运行/bin/bash -l 命令。

  • CMD指令可以被RUN指令覆盖
  • 一个Dockerfile文件只能有一跳CMD指令,若有多条CMD指令出现的话,只有最后一条会被使用

ENTRYPOINT

docker run 命令行中指定的参数会被默认传递给ENTRYPOINT指令指定的指令作为其参数使用。

例:
在Dockerfile文件中添加:

ENTRYPOINT ["/usr/sbin/nginx"]

当我们执行docker run -it zhangyang/static_web -g "daemon off;"时,指定的-g “daemon off;”会被当作参数传递给 /usr/sbin/nginx

当CMD 和ENTRYPOINT指令结合起来使用时会很巧妙。

例:
在Dockerfile文件中添加:

ENTRYPOINT ["/usr/sbin/nginx"]
CMD ["-h"]

然后运行docker run -it zhangyang/static_web -g "daemon off;"参数会让nginx守护进程以前台方式运行。若启动时不指定任何参数,则会把CMD指定的参数传递给ENTRYPOINT,即把-h传递给nginx,显示nginx的帮助信息

WORKDIR

该指令会指定镜像创建时指定指令的工作目录。

例:
在Dockerfile文件中添加如下代码:

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

意思是我们在/opt/webapp/db目录下运行了bundle install命令,然后切换到/opt/webapp设置了ENTRYPOINT 指令来启动rackup指令

我们也可以在启动容器时使用-w选项来覆盖WORKDIR的设置:

docker run -it -w /var/log ubuntu pwd

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

ENV

ENV指令用来设置环境变量

ENV RVM_PATH /home/rvm/

USER

USER指定该镜像以哪个用户去运行。

可以使用一下几种方式指定:

USER user:group
USER uid:gid
USER user :gid
USER uid:group

如果不用USER指定,默认使用root用户

VOLUME

VOLUME用于向新创建的容器添加卷。
卷功能允许我们在多个容器之间共享卷以及卷中的代码、数据库等内容,而且对卷的修改时及时生效的。
卷会一直存在直到没有容器在使用它。

代码示例:

VOLUME ["/opt/hello"]

该代码会在基于此镜像创建的任何容器创建一个名为/opt/hello的挂载点

ADD

ADD指令将构建环境下的文件和目录复制到镜像中。
例:
在Dockerfile文件中添加下述代码:

ADD software.lic /opt/app/software.lic

该指令会将构建目录下的文件复制到容器的/opt/app/software.lic

ADD指令也可以使用URL的格式指定源文件

  • ADD的源文件如果是一个归档文件的话,复制到容器中时会自动解压缩。例:ADD hello.gz /var/hello/
  • 新创建的文件和目录的模式为0755,GID和UID都是0

ADD指令会使构建缓存变得无效。也就是说如果ADD了一个新文件或目录到镜像中,那么该指令后面的所有指令都无法使用构建缓存。

COPY

类似于ADD,唯一的区别是不会自动解压缩归档文件

ONBUILD

ONBUILD被称为触发器指令,触发器会指定一个特定指令,该指令会紧跟在FROM指令之后执行。
例:
在Dockerfile文件中添加下述代码:

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

这里写图片描述
然后依据此Dockerfile文件创建容器时,显示如下:

docker build -t="zhangyang/apache2" .

这里写图片描述

需要注意的是,ONBUILD触发器会按照在父镜像指定的顺序执行,并且只能被继承一次,即只会在子镜像中执行,不会被孙镜像中执行。

docker命令结构图:
这里写图片描述
docker子命令分类:
docker环境信息: info、version
容器生命周期管理:create、exec、kill、pause、restart、rm、run、start、stop、unpause
镜像管理:build、images、import、load、rmi、save、tag、commit
容器运维操作:attach、export、inspect、port、ps、rename、stats、top、wait、cp、diff
系统日志信息:events、history、logs

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值