问题描述
我已经在 docker-compose.yml
文件中看到了Docker卷定义,如下所示:
I've seen Docker volume definitions in docker-compose.yml
files like so:
-v /path/on/host/modules:/var/www/html/modules
我注意到 Drupal的官方形象,即他们的 docker-compose.yml
文件正在使用匿名卷.
I noticed that Drupal's official image, their docker-compose.yml
file is using anonymous volumes.
注意评论:
volumes:
- /var/www/html/modules
- /var/www/html/profiles
- /var/www/html/themes
# this takes advantage of the feature in Docker that a new anonymous
# volume (which is what we're creating here) will be initialized with the
# existing content of the image at the same location
- /var/www/html/sites
容器运行后,是否可以将匿名卷与主机上的路径相关联?如果没有,拥有匿名卷的意义何在?
完整的docker-compose.yml示例:
Full docker-compose.yml example:
version: '3.1'
services:
drupal:
image: drupal:8.2-apache
ports:
- 8080:80
volumes:
- /var/www/html/modules
- /var/www/html/profiles
- /var/www/html/themes
# this takes advantage of the feature in Docker that a new anonymous
# volume (which is what we're creating here) will be initialized with the
# existing content of the image at the same location
- /var/www/html/sites
restart: always
postgres:
image: postgres:9.6
environment:
POSTGRES_PASSWORD: example
restart: always
推荐答案
添加更多信息,以回应@JeffRSon的后续问题/评论,询问匿名卷如何增加灵活性,并从操作:
Adding a bit more info in response to a follow-up question/comment from @JeffRSon asking how anonymous volumes add flexibility, and also to answer this question from the OP:
TL; DR :您可以通过数据容器"将特定的匿名卷与正在运行的容器相关联,但是这提供了覆盖使用案例的灵活性,现在该使用案例可以更好地满足使用需求的命名卷.
TL;DR: You can associate a specific anonymous volume with a running container via a 'data container', but that provides flexibility to cover a use case that is now much better served by the use of named volumes.
在Docker 1.9中添加卷管理之前,匿名卷非常有用.在此之前,您无法选择命名卷.在1.9版中,卷变成了具有各自生命周期的离散且可管理的对象.
Anonymous volumes were helpful before the addition of volume management in Docker 1.9. Prior to that, you didn't have the option of naming a volume. With the 1.9 release, volumes became discrete, manageable objects with their own lifecycle.
在1.9之前,由于无法命名卷,您必须先创建一个数据容器来引用它
Before 1.9, without the ability to name a volume, you had to reference it by first creating a data container
docker create -v /data --name datacontainer mysql
然后将数据容器的匿名卷装入需要访问该卷的容器中
and then mounting the data container's anonymous volume into the container that needed access to the volume
docker run -d --volumes-from datacontainer --name dbinstance mysql
这几天,最好使用命名卷,因为它们更易于管理且更明确.
These days, it's better to use named volumes since they are much easier to manage and much more explicit.
这篇关于Docker匿名卷的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!