Dockerfile指令详解

此文章已同步更新至我的个人博客https://simonting.gitee.io


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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值