ADD
复制文件
从src⽬录复制⽂件到容器的dest。其中src可以是Dockerfile所在⽬录的相对路径,也可以是⼀个URL,还可以是⼀个压缩包
示例:
ADD SpringBoot-Demo.jar app.jar
ARG
设置构建参数
类似于ENV,ARG设置的是构建时的环境变量,在容器运行时是不存在这些变量的。而用户可以在构建期间使用docker build
命令和参数--build-arg=
对这个变量复制。如果你再Dockerfile中使用ARG定义了变量但未给出初始值,在docker build
的时候未赋值会报错。
- 建议敏感数据不使用ARG。
- 不像ARG指令,ENV指令的值会始终存在于镜像中。
示例
ARG user=root //指定默认值
# or
ARG user //先声明
docker build --build-arg user=root //再赋值
ENV
在镜像构建过程中设置环境变量
示例
ENV JAVA_HONE /java
COPY
复制文件
与ADD类似,COPY不支持URL和压缩包
示例
COPY a.sh /testdir/
CMD
为执行容器提供默认值
每个Dockerfile只有一个CMD命令,如果指定了多条,那么只有最后一条会被执行,如果用户在docker run
指定参数,则会覆盖掉CMD指定的默认参数。
注意:不要把RUN和CMD搞混了。RUN实际上是在构建镜像时执行命令并提交执行结果到镜像;而CMD在构建期间不会执行任何命令,只是为镜像预先设置容器运行时的命令或参数。
示例
CMD ["echo","just for test"]
ENTRYPOINT
入口点
表示镜像在初始化时需要执行的命令,不可被重写覆盖,而CMD是可以被重写覆盖的。
ENTRYPOINT/CMD都只能在文件中存在一次,并且最后一个生效,多个存在,只有最后一个生效,其它无效。
需要初始化运行多个命令,彼此之间可以使用 && 隔开,但最后一个须要为无限运行的命令。
示例
ENTRYPOINT sh /testdir/a.sh
RUN
执行命令
示例
RUN chown -R root:root /testdir/ && \
chmod 550 /testdir/ && \
echo "just for test"
EXPOSE
声明在运⾏时容器提供服务的端⼝
EXPOSE 8080
FROM
指定基础镜像
FROM centos
LABEL
为镜像添加元数据
示例
LABEL version=1.0.0
MAINTAINER(已过时)
指定维护者信息
示例
MAINTAINER zt<111@qq.com>
USER
设置用户
写在该指令后的RUN、CMD以及ENTRYPOINT指令都将
使⽤该⽤户执⾏命令
示例
USER root
WORKDIR
指定工作目录
写在该指令后的 RUN , CMD 以及 ENTRYPOINT 指令都将该⽬录作为当前⽬录,并执⾏相应的命令
示例
WORKDIR /workdir
VOLUME
指定挂载点
该指令使容器中的⼀个⽬录具有持久化存储的功能,该⽬录可被容器本身使⽤,也可共享给其他容器。当容器中的应⽤有持久化数据的需求时可以在Dockerfile中使⽤该指令。
示例
VOLUME /tmp