ove*_*nge 5 docker dockerfile docker-compose
在一个容器中,
可以创建匿名卷
使用语法( VOLUME /build)Dockerfile
或者
下面的语法volumes有/build条目
cache:
build: ../../
dockerfile: docker/dev/Dockerfile
volumes:
- /tmp/cache:/cache
- /build
entrypoint: "true"
Run Code Online (Sandbox Code Playgroud)
我的理解是,两种方法(以上)都/build可以在容器进入Exited状态后使卷可用。
卷是匿名的,因为/build指向/var/lib/docker/volumesdocker 主机中的一些随机新位置(在目录中)
我看到匿名卷比命名卷更安全(如/tmp/cache:/cache)。
因为/tmp/cache位置很容易受到攻击,因为这个位置被多个 docker 容器使用的可能性更大。
1)
为什么不鼓励使用匿名卷?
2)
是
VOLUME /build 在 Dockerfile
不一样
volumes:
- /build
Run Code Online (Sandbox Code Playgroud)
在docker-compose.yml文件中?是否有一种情况,我们需要同时提及两者?
您缺少一个关键的第三个选项,名为 volumes。如果您声明:
version: '3'
volumes:
build: {}
services:
cache:
image: ...
volumes:
- build:/build
Run Code Online (Sandbox Code Playgroud)
Docker Compose 会为你创建一个命名卷;docker volume ls例如,您可以使用 来查看它。您可以明确管理命名卷的生命周期,并在它们上设置几个偶尔有用的附加选项。Docker 文档有一个页面详细描述了命名卷。
我建议命名卷严格优于匿名卷,因为能够明确地看到它们何时被创建和销毁,并且能够为它们设置额外的选项。您还可以将相同命名的卷安装到多个容器中。(在您一直在问的这一系列问题中,我通常鼓励您使用命名卷并将其安装到多个容器中并替换volumes_from:.)
命名卷与绑定安装在两个方向上都有优点和缺点。绑定挂载易于备份和管理,对于需要直接检查的日志文件等内容要容易得多;在 MacOS 系统上,它们非常慢。命名卷可以独立于任何主机系统目录布局运行,并且可以很好地转换为 Kubernetes 等集群环境,但检查或备份它们要困难得多。
你几乎从不需要VOLUME指令。无论是否声明为卷,您都可以将卷或主机目录挂载到容器中。它的技术效果是在那个位置挂载一个新的匿名卷,如果那里没有挂载其他任何东西;它的实际效果是防止以后的 Dockerfile 步骤修改该目录。如果您有VOLUME一行,您几乎可以随时删除它而不会影响任何内容。
| 归档时间: |
|
| 查看次数: |
989 次 |
| 最近记录: |