dockerfile基本语法讲解
1、FROM
基础镜像,必须是可以下载的
2、MAINTAINER
指定镜像的作者信息
3、RUN
指定当前镜像在构建过程中需要运行的命令
示例:
指定nginx在容器启动时自动启动服务
RUN ["/usr/sbin/nginx","-g","daemon off;"]
4、EXPOSE
声明端口使用
- 声明镜像的守护端口,方便容器的服务映射,也可以指定多个端口
5、CMD
类似于RUN,两者的运行时间点有所不同
- CMD在docker run时运行
- RUN是在docker build构建镜像的时候运行的
- CMD可以在docker run指定要运行的程序所覆盖
6、ENTERPOINT
类似于CMD,但其不会被docker run的命令参数所覆盖,如果在运行容器时使用了--enterpoint选项,会覆盖ENTERPOINT所指定的程序
优点:在执行docker run 的时候可以指定ENTRYPOINT运行所需要的参数
缺点:如果Dockerfile中存在多个ENTERPOINT指令,仅最后一个生效
7、COPY
复制,从宿主机复制文件或者目录到容器中指定的路径
[--chown=<user>:<group>]:可选参数,可以改变复制到容器内文件的拥有者和数组
8、ADD
ADD和COPY的使用格式一致
官方推荐使用COPY
不同:
ADD在执行源文件为压缩文件的时候会自动复制并解压到容器内
在不解压的情况下,ADD无法复制压缩文件,会使得镜像构建失效,从而导致镜像构建缓慢,可以根据需要来决定
如果单纯复制文件的话还是来使用COPY
9、VOLUME
数据卷,在启动的时候如果忘了挂载数据卷,会自动挂在u到匿名卷
优点:
- 避免重要数据在容器重启的时候丢失
- 避免容器的不断扩大
10、WORKDIR
指定工作目录,会在构建镜像的每一层中都会存在,WORKDIR指定的目录,必须是提前创建好的
11、ENV
设置环境变量
12、USER
指定执行后续命令的用户和用户组
13、ONBUILD
用于延迟构建命令执行
为镜像添加触发器
当一个镜像被其他镜像作为基础镜像时需要写上OBNBUILD
会在构建时出入触发器指令
14、LABEL
给镜像添加一些元数据,以键值对的形式
15、HEALTHCHECK
用来指定某个程序或者指令来监控docker容器服务的运行状态
16、ARG
构建参数与ENV作用一致,作用域不一样,ARG设置的环境变量仅仅对Dockerfile内有效,也就是在只有docker build的过程中有效,构建好的镜像内不存在此环境变量。