Dockerfile常用指令介绍

Dockerfile常用指令简介

编号

指令

作用

示例

备注

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

2

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

MAINTAINER yang 或
MAINTAINER yang@163.com

 -
3 LABEL 镜像的属性标签,一般放到第三行 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)。
 18 SHELL   当前镜像中使用的是哪种shell,一般Linux默认是/bin/sh(如果想修改,可以改成/bin/bash),而在Windows上[“cmd”, “/S”, “/C”]。  

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

 

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

 

 

 以上,如有需要补充了,大家请指出~~~~~~

 

posted @ 2021-01-04 17:15  西瓜君~  阅读(785)  评论(1编辑  收藏  举报