问题描述
在容器中,
可以创建匿名卷
在 Dockerfile
或
以下语法,volumes
具有 /build
条目
below syntax with volumes
having /build
entry
cache:
build: ../../
dockerfile: docker/dev/Dockerfile
volumes:
- /tmp/cache:/cache
- /build
entrypoint: "true"
我的理解是,在容器进入 Exited
状态后,两种方法(以上)都使 /build
卷也可用.
My understanding is, both approach(above) make volume /build
also available after container goes in Exited
state.
Volume 是匿名的,因为 /build
指向 docker 主机中某个随机的新位置(在 /var/lib/docker/volumes
目录中)
Volume is anonymous because /build
points to some random new location(in /var/lib/docker/volumes
directory) in docker host
我发现匿名卷比命名卷更安全(比如 /tmp/cache:/cache
).
I see that anonymous volumes are more safer than named volumes(like /tmp/cache:/cache
).
因为 /tmp/cache
位置容易受到攻击,因为该位置被多个 docker 容器使用的可能性更大.
Because /tmp/cache
location is vulnerable because there is more chance that this location is used by more than one docker container.
1)
为什么不鼓励使用匿名卷?
Why anonymous volume usage is discouraged?
2)
是
VOLUME/build
in Dockerfile
不一样
volumes:
- /build
在docker-compose.yml
文件中?是否存在需要同时提及两者的场景?
in docker-compose.yml
file? Is there a scenario, where we need to mention both?
推荐答案
其实匿名卷 (/build
) 的用法是鼓励 使用 bind挂载 (/tmp/cache:/cache
):
Actually, anonymous volumes (/build
) usage is encouraged over the use of bind mounts (/tmp/cache:/cache
):
与绑定安装相比,卷有几个优点:
- 与绑定安装相比,卷更容易备份或迁移.
- 您可以使用 Docker CLI 命令或 Docker API 管理卷.
- Volumes 适用于 Linux 和 Windows 容器.
- 可以更安全地在多个容器之间共享卷.
- 卷驱动程序让您可以在远程主机或云提供商上存储卷,以加密卷的内容,或添加其他功能.
- 新卷的内容可以由容器预先填充.
关于你的第二个问题,是的.您可以在 docker-compose 文件或 Dockerfile 中创建匿名卷.不需要在两个地方都指定.
Regarding your second question, yes. You can create anonymous volumes in docker-compose file or in the Dockerfile. No need to specify in both places.
这篇关于最佳实践 - 匿名卷与绑定安装的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!