Docker使用笔记-Dockerfile编写

时间:2024-03-07 09:25:47

Dockerfile简介

Dockerfile的文件名应为“dockerfile”或“Dockerfile”,无任何后缀名。其他文件名docker无法识别为标准的Dockerfile。

Dockerfile一般由多条指令构成,下面将按指令的编写顺序(当然也是执行顺序)进行介绍。

另外,Dockerfile与Python一样,将“#”开头语句视为注释信息

FROM

用于指明要构造的镜像是否基于某个已有镜像:

FROM 镜像名:版本号

这个基础镜像可以是本地已有的,也可以是仓库中已有的。Docker在构造镜像时,若依赖的基础镜像不在本地,会自动pull过来。

如果不依赖任何已有镜像构造,则:

FROM scratch

MAINTAINER

用来声明镜像作者及其联系方式,可省略。

MAINTAINER 作者名 联系方式

WORKDIR

在容器内设置一个工作目录,之后Dockerfile中的镜像操作指令均会在该目录下执行:

WORKDIR path

COPY

在使用docker build指令时会指令非Dockerfile文件的位置,COPY指令用于将这些文件复制到指定目录中(一般是复制到WORKDIR指定的工作目录里)。

COPY 文件名 path

ADD

COPY指令类似,但在复制tar等压缩包时还会顺手帮你解压。该指令还可对链接进行操作,先下载链接对应的文件再进行复制。

ADD 文件名 path

ENV

为基于该镜像的容器设置环境变量,容器内任何程序均可调用。

ENV key value
ENV key1=value1, key2=value2

RUN

镜像构建过程中执行的命令,一般用此类命令为容器内的容器安装依赖项。

RUN 命令

RUN的指令格式有两种,一种为Shell格式(与Linux命令一致),另一种为Exec格式,后面的CMDENTRYPOINT也都支持这两种格式的命令。

Shell格式举例:

RUN apt-get install python3

CMD echo "Hello world"

Exec格式:

RUN ["executable", "param1", "param2", ...]

# 举例:
RUN ["apt-get", "install", "python3"]

CMD ["/bin/echo", "Hello world"]

CMD

CMD指令并不会在构建镜像时执行,该指令仅在基于该镜像的容器启动时执行。

Dockerfile中可编写多条CMD指令,但只有最后一条实际生效。另外,若使用docker run启动容器时指定了命令,则CMD指令会被忽略。

ENTRYPOINT

与CMD功能一样,Dockerfile中多条ENTRYPOINT存在的话只会执行最后一条。与CMD不同的是,ENTRYPOINT命令不会被docker run顶替。