五.Dockerfile文件编写的常用指令记录解释

1.0 Dockerfile的常用指令

Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。Dockerfile 的内容分为四个部分:
基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令

指令的一般格式为 指令名称 参数

1.1.0 FROM

⽀持三种格式:

  1. FROM <image>
  2. FROM <image>:<tag>
  3. FROM <image>@<digest>

FROM指令必须指定且需要在Dockerfile其他指令的前⾯,指定的基础image 可以是官⽅远程仓库中的,也可以位于本地仓库。后续的指令都依赖于该指 令指定的image。当在同⼀个Dockerfile中建⽴多个镜像时,可以使⽤多个 FROM指令。
比如:

# 基于哪个镜像
FROM java:8

1.2.0 MAINTAINER

格式:

  • MAINTAINER
    指定维护者

1.3.0 LABEL

为镜像添加元数据标签,一个 LABEL 就是一个键值对。
LABEL maintainer="qaz" version="1.0"

新添加的 LABEL 和已有的 LABEL 同名,则新值会覆盖掉旧值。

1.30 ENV

指令格式

ENV <key> <value> 
ENV <key1>=<value1> <key2>=<value2> 

指定环境变量,会被后续RUN指令使⽤,并在容器启动后,可以通 过 docker inspect 查看这个环境变量,也可以通过 docker run --env = 来修改环境变量
例子:

ENV JAR_PATH '/home/soft/workspace/demo-study-1.0.0-SNAPSHOT.jar'

1.4.0 RUN

⽀持两种格式:

  1. shell指令格式:
RUN <command>
# 打印目录
RUN pwd && ll    
  1. exec 格式
# 使用exec执行    
RUN ["executable", "param1", "param2"]    

也可指定其它终端。例如: RUN ["/bin/bash", "-c", "echo hello"] ,该⽅式必须使⽤["]⽽不能使⽤['], 因为该⽅式会被转换成⼀个JSON 数组;所以将多个命令通过&&合并到同一个 RUN指令上,避免镜像新建层,过大

1.5.0 CMD

格式有三种:

  1. shell : CMD <shell command>

  2. exec 命令格式:
    CMD ["executable","param1","param2"]

  3. 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
    CMD ["<param1>","<param2>",...]

    作用:为启动的容器指定要运行的命令,类似于 RUN 指令,但 CMD 运行程序的时间是在 docker run 时执行的,命令运行结束,容器也就结束。

CMD ["/bin/bash", "-c", "echo 'hello cmd!'"]

CMD指令的主要⽬的是为执⾏容器提供默认值。每个Dockerfile只有⼀个 CMD命令,如果指定了多个CMD命令,那么只有⼀条会被执⾏,如果启动容 器的时候指定了运⾏的命令,则会覆盖掉CMD指定的命令。

1.6.0 EXPOSE

为Docker容器暴露对外的端⼝号

EXPOSE <port1> [<port2> ...]

1.7.0 ADD

格式:

  1. ADD <src> <dest>
  2. ADD ["",... ""]
    从src⽬录复制⽂件到容器的dest。其中src可以是Dockerfile所在⽬录的相对 路径,也可以是⼀个URL,还可以是⼀个压缩包

注意:

  1. src必须在构建的上下⽂内,不能使⽤例如: ADD …/somethine /something ,因为 docker build 命令⾸先会将上下⽂路径和其⼦⽬ 录发送到docker daemon
  2. 如果src是⼀个URL,同时dest不以斜杠结尾,dest将会被视为⽂件,src 对应内容⽂件将会被下载到dest
  3. 如果src是⼀个URL,同时dest以斜杠结尾,dest将被视为⽬录,src对应 内容将会被下载到dest⽬录
  4. src是⼀个⽬录,那么整个⽬录其下的内容将会被拷⻉,包括⽂件系 统元数据
  5. ⽂件是可识别的压缩包格式,则docker会⾃动解压

1.8.0 COPY

COPY 指令非常简单,仅用于将文件拷贝到镜像中,而 ADD 相对来讲复杂一些,可以用于下载远程文件以及解压压缩包。所以除非要解压缩包,否则建议使用 COPY;
复制本地端的src到容器的dest。和ADD指令类似,COPY不⽀持URL和压缩包。

1.9.0 VOLUME

格式为VOLUME ["/data"]
使容器中的⼀个⽬录具有持久化存储数据的功能,该⽬录可以被容器本身使 ⽤,也可以共享给其他容器。当容器中的应⽤有持久化数据的需求时可以在 Dockerfile中使⽤该指令。
作用

  • 避免重要的数据,因容器重启而丢失
  • 避免容器不断变大

1.10.0 WORKDIR

WORKDIR 指令可以设置默认目录,也就是运行 RUN / CMD / ENTRYPOINT 指令的地方。
格式为WORKDIR /path/to/workdir

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值