语法
这里--mount挂载的类型一共有五种:
bind(default) |
用于挂载一个上下文目录 |
cache |
主要用于挂载一个临时目录来缓存编译器和包管理器的目录。 |
tmpfs |
主要用于挂载一个tmpfs |
secret |
允许构建容器访问诸如私钥之类的安全文件,并且此类文件不会出现在构建好的镜像中,避免密钥外泄。 |
ssh |
允许构建容器通过SSH代理访问SSH密钥,并支持密码短语 |
本篇介绍第一种挂载方式 --mount=type=bind
在官方文档中,对bind类型挂载的释义是 "这种挂载类型允许将上下文或镜像中的目录(只读)绑定到正在构建容器" 。这里有三个需要注意的点:
- 由于RUN指令是容器构建阶段生效运行,所以挂载的目录也仅仅在构建阶段可以访问。
- 由于不同的RUN指令会创建新的层,所以只有同一个RUN指令中,才可以访问挂载的目录。
- 仅支持挂载上下文或者引用的镜像中存在的目录,不能挂载宿主机上的目录,或者上下文以及镜像中不存在的目录(就算挂载上也没有任何意义)。
举个栗子:
- 先创建一个基础镜像basebind,并在/base下新建一个baseinfo.txt文档
basebind:dockerfile
- 我们在创建另一个镜像baseref的时候,将basebind镜像中的/base目录挂载到当前镜像的/ref目录
baseref:dockerfile
- 我们运行bindref镜像后,可以看到在我们成功的将挂载过来的文件复制到了容器根目录中
在容器运行阶段,我们将无法访问目录的挂载!
我们同样无法在一个RUN指令中获取到另一个RUN指令挂载的目录,比如我们将baseref镜像的dockerfile改成如下情况:
baseref:dockerfile
则会报错:No such file or directory
同样我们也无法直接通过bind类型挂载宿主机的目录 ,比如我们将baseref镜像的dockerfile改成如下情况:
baseref:dockerfile
则会报错:not found