Dockerfile常用指令简介

编号

指令

作用

示例

备注

1FROM构建的镜像是基于哪个镜像FROM centos:7tag是可选的

2

MAINTAINER镜像维护者姓名或邮箱地址

MAINTAINER yang 或
MAINTAINER yang@163.com

 -
3LABEL镜像的属性标签,一般放到第三行LABEL version=“1.0”为了查看,docker inspect 容器名,并没有实质性的作用
 4 RUN 制作镜像过程中需要的执行命令(安装服务) 

RUN yum -y install nginx 或
RUN [ "yum","install","nginx" ]

 RUN 指令:用于指定 docker build 过程中要运行的命令,可以写多条
 5 CMD容器启动的时候执行的初始命令,容易被替换(启动服务) CMD [ "-c","/start.sh" ] 或

CMD [ "/usr/sbin/sshd","-D" ] 或
CMD /usr/sbin/sshd -D

 1.CMD和ENTRYPOINT在运行容器时运行,只能写一条,如果是写多条,最后一条生效

2.CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。

 6 EXPOSE 镜像内部暴漏的服务端口 EXPOSE 80 443 可以指定多个端口,默认tcp协议
 7 ARG

 和ENV类似

构建镜像时传参

 ARG A=19

1.和ENV类似,但是在build,启动容器的时候就会失效,除非在build的时候特意指定,如:docker build -t nginx --build-arg A=19 .   (--build-arg A=19会临时修Dockerfile中配置的ARG参数)

2.ARG是一个构建参数,只有在构建(docker build -t )的时候才会生效,真正运行的时候就无效了

 8 ENV 设置容器内环境变量 ENV MYSQL_PASSWORD 123456

1. 如果ARG和ENV同时使用,操作如下:ARG A=19 \  ENV B $A  ,这样在build出来的镜像,会通过ENV打印出ARG的参数信息

2.ENV从构建时到运行时,会一直有效的环境变量,永远不会失效

 9 ADD 将Dockerfile当前目录下的文件或目录拷贝到镜像中,如果是url或压缩包会自动下载 

语法:
ADD <源目录或文件>…<目标目录或文件>
ADD [ "<src>",… "<dest>" ]
ADD hom* /mydir/
ADD https://xxx.com/html.tar.gz /var/www/html
ADD html.tar.gz /var/www/html

 支持curl格式,如果是内部网络的话,推荐使用COPY,将下载下来的tar包会自动解压,然后删除下载下来的压缩包文件,减少了占用的空间
 10 COPY 将Dockerfile当前目录下的文件拷贝到镜像中 COPY index.html /usr/nginx/html/ 不自动解压tar包
 11 ENTRYPOINT  容器启动的时候执行的初始命令,不能被替换 

ENTRYPOINT [ "/bin/bash","-c","/start.sh" ]
ENTRYPOINT /bin/bash -c '/start.sh'

 1.ENTRYPOINT类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,如果运行 docker run 时使用了 --entrypoint 选项,

此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序;

2. 容器启动的时候执行的初始命令,不能被替换,如果同时使用CMD和ENTRYPOINT,cmd命令将作为ENTRYPOINT参数,就是拼接到一起使用 

 12 VOLUME 指定容器挂载点到宿主机自动生成的目录或其他容器 VOLUME [ "/var/lib/mysql" ]

1.该指令使容器中的一个目录具有持久化存储功能,该目录可被容器本身使用,也可以共享给其它容器

2.当容器中的应用有持久化数据的需求时可以在 Dockerfile 中使用该指令

 13 USER 为RUN、CMD、ENTRYPOINT执行命令指定运行用户 

USER <user>:<group> 或 <UID>:<GID>
USER yang

 镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户。
 14 WORKDIR 为RUN、CMD、ENTRYPOINT、COPY、ADD设置工作目录 WORKDIR /usr/local/nginx 如果目录不存在,就会自动创建目录
 15 ONBULD 当前镜像构建的时候不会执行,基于当前镜像构建的镜像才会执行 

ONBUILD RUN mkdir app
示例:
Dockerfile1
FROM ubuntu
ONBUILD RUN mkdir app
docker build -t image1 .
docker run --name ct1 -it image1 /bin/bash
创建容器后发现未生成文件夹app
Dockerfile2
FROM image1
docker build -t image2 .
docker run --name ct2 -it image2 /bin/bash
创建容器ct2的时候,RUN mkdir app执行,文件夹app生成

 在使用ONBUILD命令时,其后面跟着的其他命令在当前镜像构建时不会被执行,以其为基础镜像源,构建下级镜像源时才会执行
 16 HEALTHCHECK 检查容器健康状态 HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ ||exit 1 

1.interval:间隔(s秒、m分钟、h小时),从容器运行起来开始计时interval秒(或者分钟小时)进行第一次健康检查,随后每间隔interval秒进行一次健康检查;
2.timeout:执行command需要时间,比如curl 一个地址,如果超过timeout秒则认为超时是错误的状态,此时每次健康检查的时间是timeout+interval秒。
3.注意:在Dockerfile中只能有一个HEALTHCHECK指令。如果您列出多个,则只有最后一个HEALTHCHECK将生效。

 17 STOPSIGNAL 指定当前的容器使用什么信号 STOPSIGNAL signal 一般很少使用指令设置将被发送到容器退出的系统调用信号。该信号可以是与内核 syscall 表中的位置匹配的有效无符号数字(例如9),也可以是 SIGNAME 格式的信号名称(例如 SIGKILL)。
 18SHELL  当前镜像中使用的是哪种shell,一般Linux默认是/bin/sh(如果想修改,可以改成/bin/bash),而在Windows上[“cmd”, “/S”, “/C”]。 

SHELL [“powershell”, “-command”]
SHELL /bin/sh

 

1.SHELL指令必须以JSON格式写入Dockerfile
2.SHELL指令可以多次出现。每条SHELL指令都会覆盖所有先前的       SHELL指令,并影响所有后续指令

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值