Dockerfile语法
Dockerfile由一系列指令和参数组成,每个指令都是大写字母开头的关键字,后面可以跟上参数。下面是Dockerfile的基本语法:
代码语言:javascript复制# Comment
INSTRUCTION arguments
其中,#后面的文本为注释内容,INSTRUCTION为指令名称,arguments为参数。每条指令都会创建一个新的中间容器,并在其上执行指定的操作。下面是一些常用的Dockerfile指令:
FROM
代码语言:javascript复制FROM image:tag
FROM指令用于指定所构建镜像的基础镜像,通常会以一个已有的镜像作为基础,然后在其上添加所需要的软件包和配置。image:tag指定了基础镜像的名称和标签,例如ubuntu:latest。
RUN
代码语言:javascript复制RUN command
RUN指令用于在中间容器中执行命令,例如安装软件包、编译代码等操作。每个RUN指令都会创建一个新的中间容器,并在其上执行指定的命令。多个RUN指令会被合并为一个中间容器,这样可以减少镜像层数。
COPY
代码语言:javascript复制COPY source destination
COPY指令用于将本地文件或目录复制到中间容器中,source为源文件或目录路径,destination为目标路径。如果destination以/结尾,那么源文件或目录将被复制到该目录下,否则会将其视为目标文件。
ADD
代码语言:javascript复制ADD source destination
ADD指令与COPY类似,用于将本地文件或目录复制到中间容器中。不同之处在于,ADD支持将URL作为source,还可以自动解压缩.tar和.zip文件。
CMD
代码语言:javascript复制CMD command
CMD指令用于设置容器启动后默认执行的命令。只能有一个CMD指令,如果有多个,则只有最后一个会生效。如果在运行容器时指定了其他命令,则会覆盖CMD指定的默认命令。
ENTRYPOINT
代码语言:javascript复制ENTRYPOINT command
ENTRYPOINT指令用于设置容器启动后默认执行的命令,与CMD指令类似。不同之处在于,ENTRYPOINT指定的命令不会被覆盖,而是作为容器的主进程运行。可以通过CMD指令传递参数给ENTRYPOINT指定的命令。
EXPOSE
代码语言:javascript复制EXPOSE port
EXPOSE指令用于声明容器将会监听的网络端口,以便让Docker用户知道容器将使用哪些端口。并不会实际将端口暴露到主机上,需要通过-p参数将其映射到主机端口。
ENV
代码语言:javascript复制ENV key value
ENV指令用于设置环境变量,key为变量名,value为变量值。在Dockerfile中设置环境变量可以方便地传递配置参数和其他信息给镜像。
ARG
代码语言:javascript复制ARG key=value
ARG指令用于设置构建时的参数,key为参数名,value为默认值。在构建镜像时可以通过--build-arg参数指定参数值,例如docker build --build-arg key=value。
WORKDIR
代码语言:javascript复制WORKDIR path
WORKDIR指令用于设置容器的工作目录。后续指令将在该目录下执行。如果WORKDIR指令在Dockerfile中不存在,则默认使用根目录作为工作目录。
USER
代码语言:javascript复制USER user[:group]
USER指令用于设置容器运行时的用户和用户组。可以通过用户ID和组ID或名称来指定用户和组,例如USER 1000:1000或USER www-data。