Dockerfile由一行行命令语句组成,并且支持以#开头的注释行。
基础的小linux系统。jdk;
一般而言,Dockerfile可以分为四部分
基础镜像信息 维护者信息 镜像操作指令 启动时执行指令
常见的dockerfile指定、dockerfile关键字
每条保留字指令都必须为大写字母且后面要跟随至少一个参数
FROM
基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from
使用说明
FROM [--platform=<platform>] <image> [AS <name>]
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]
MAINTAINER
镜像维护者的姓名和邮箱地址
使用说明
MAINTAINER <name>
RUN
容器构建时需要运行的命令
RUN是在 docker build时运行
使用说明
RUN <command>
RUN ["executable", "param1", "param2"]
当有多条命令无法使用一行完成时可以使用 \
在行末尾分隔便于阅读
RUN /bin/bash -c 'source $HOME/.bashrc; \
echo $HOME'
RUN是在 docker build时运行
CMD
指定容器启动后的要干的事情
使用说明
CMD ["executable","param1","param2"]
CMD command param1 param2
Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
ps: 这里的 docker run 指的是命令行的创建容器的那个命令
CMD是在docker run 时运行
ENTRYPOINT
也是用来指定一个容器启动时要运行的命令
类似于 CMD 指令,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序
使用说明
ENTRYPOINT command param1 param2
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT可以和CMD一起用,一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参
当指定了ENTRYPOINT后,CMD的含义就发生了变化,不再是直接运行其命令而是将CMD的内容作为参数传递给ENTRYPOINT指令,他两个组合会变成
ENTRYPOINT command "<CMD>"
在执行docker run的时候可以指定 ENTRYPOINT 运行所需的参数
如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
EXPOSE
当前容器对外暴露出的端口
使用说明
EXPOSE <port> [<port>/<protocol>...]
WORKDIR
指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
使用说明
WORKDIR /path/to/workdir
USER
指定该镜像以什么样的用户去执行,如果都不指定,默认是root
使用说明
USER <user>[:<group>]
USER <UID>[:<GID>]
ENV
用来在构建镜像过程中设置环境变量
使用说明
ENV <key>=<value> ...
应用列举
ENV MY_PATH /usr/mytest
这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;
也可以在其它指令中直接使用这些环境变量,
比如: WORKDIR $MY_PATH
VOLUME
容器数据卷,用于数据保存和持久化工作
使用说明
VOLUME ["/data"]
COPY
拷贝文件和目录到镜像中,将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
使用说明
COPY [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]
<dest目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
ADD
将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
使用说明
ADD [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
<dest目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
ONBUILD
当构建一个被继承的DockerFile时运行命令,父镜像在被子镜像继承后,父镜像的onbuild被触发
使用说明
ONBUILD <INSTRUCTION>
LABEL
解释说明
使用说明
LABEL <key>=<value> <key>=<value> <key>=<value> ...
可以使用多个LABEL
也可以使用 \
进行换行处理
HEALTHCHECK
用于指定某个程序或者指令来监控 docker 容器服务的运行状态
ARG
构建参数,与 ENV 作用一至。不过作用域不一样。 ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。