编号 | 指令 | 作用 | 示例 | 备注 |
1 | FROM | 构建的镜像是基于哪个镜像 | FROM centos:7 | tag是可选的 |
2 | MAINTAINER | 镜像维护者姓名或邮箱地址 | MAINTAINER yang 或 | - |
3 | LABEL | 镜像的属性标签,一般放到第三行 | LABEL version=“1.0” | 为了查看,docker inspect 容器名,并没有实质性的作用 |
4 | RUN | 制作镜像过程中需要的执行命令(安装服务) | RUN yum -y install nginx 或 | RUN 指令:用于指定 docker build 过程中要运行的命令,可以写多条 |
5 | CMD | 容器启动的时候执行的初始命令,容易被替换(启动服务) | CMD [ "-c","/start.sh" ] 或 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或压缩包会自动下载 | 语法: | 支持curl格式,如果是内部网络的话,推荐使用COPY,将下载下来的tar包会自动解压,然后删除下载下来的压缩包文件,减少了占用的空间。 |
10 | COPY | 将Dockerfile当前目录下的文件拷贝到镜像中 | COPY index.html /usr/nginx/html/ | 不自动解压tar包 |
11 | ENTRYPOINT | 容器启动的时候执行的初始命令,不能被替换 | 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> | 镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户。 |
14 | WORKDIR | 为RUN、CMD、ENTRYPOINT、COPY、ADD设置工作目录 | WORKDIR /usr/local/nginx | 如果目录不存在,就会自动创建目录 |
15 | ONBULD | 当前镜像构建的时候不会执行,基于当前镜像构建的镜像才会执行 | ONBUILD RUN mkdir app | 在使用ONBUILD命令时,其后面跟着的其他命令在当前镜像构建时不会被执行,以其为基础镜像源,构建下级镜像源时才会执行 |
16 | HEALTHCHECK | 检查容器健康状态 | HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ ||exit 1 | 1.interval:间隔(s秒、m分钟、h小时),从容器运行起来开始计时interval秒(或者分钟小时)进行第一次健康检查,随后每间隔interval秒进行一次健康检查; |
17 | STOPSIGNAL | 指定当前的容器使用什么信号 | STOPSIGNAL signal | 一般很少使用指令设置将被发送到容器退出的系统调用信号。该信号可以是与内核 syscall 表中的位置匹配的有效无符号数字(例如9),也可以是 SIGNAME 格式的信号名称(例如 SIGKILL)。 |
18 | SHELL | 当前镜像中使用的是哪种shell,一般Linux默认是/bin/sh(如果想修改,可以改成/bin/bash),而在Windows上[“cmd”, “/S”, “/C”]。 | SHELL [“powershell”, “-command”] | 1.SHELL指令必须以JSON格式写入Dockerfile |
Dockerfile常用指令简介
最新推荐文章于 2025-03-13 11:55:11 发布