Dockerfile常用指令介绍
Dockerfile常用指令简介
编号 |
指令 |
作用 |
示例 |
备注 |
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 |
以上,如有需要补充了,大家请指出~~~~~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?