转载
来源:简书
作者:Anoyi
地址:https://www.jianshu.com/p/b6d1a53f04dd
为了获得最佳的性能和可移植性,应该避免将重要数据直接写入容器的可写层,而应使用数据卷或绑定挂载。这个原则也适用于服务。
可以为集群中的服务创建两种类型的挂载,数据卷挂载(volume mounts)或绑定挂载(bind mounts)。无论使用哪种类型的挂载,在创建服务时使用 --mount 标志进行配置,或者在更新服务时使用 --mount-add 或 --mount-rm 标志。如果不指定一个类型,默认类型是数据卷挂载。
tmpfs mount 仅可用于独立容器,不能在 Docker Swarm Service 中使用,故此处不介绍。
数据卷是在主机上的持久化存储,即使容器删除,也不会影响数据卷。数据卷的相关操作见文末《附录 1 Docker 数据卷常用操作》
挂载已存在的数据卷
docker service create \
--mount src=,dst= \
--name myservice \
在即将启动容器之前自动创建数据卷
docker service create \
--mount type=volume,src=,dst=,volume-driver=,volume-opt==,volume-opt==
--name myservice \
注意:如果 volume-opt 参数中包含逗号, 则需要用双引号修饰此参数,并用单引号修饰整个 --mount 配置,示例:
docker service create \
--mount type=volume,src=,dst=,volume-driver=,volume-opt==,volume-opt==
--name myservice \
绑定挂载是调度程序为该任务部署容器时主机的文件系统路径,Docker 将路径挂载到容器中。在 Swarm 为任务初始化容器之前,该文件系统路径必须存在。
允许文件读写
docker service create \
--mount type=bind,src=,dst= \
--name myservice \
如:–mount type=bind,src=/opt/www_80,dst=/opt/www_80
文件只读
docker service create \
--mount type=bind,src=,dst=,readonly \
--name myservice \
重要:虽然绑定挂载能用,但是也有可能导致一些问题:
docker volume create
注意:创建数据卷 路径在 /mnt/sda1/var/lib/docker/volumes/
docker@ManagerX:~$ docker volume create data_mongo
data_mongo
docker volume ls
docker@ManagerX:~$ docker volume ls
DRIVER VOLUME NAME
local data_mongo
docker volume inspect
docker@ManagerX:~$ docker volume inspect data_mongo
[
{
"CreatedAt": "2018-01-11T10:50:30Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/mnt/sda1/var/lib/docker/volumes/data_mongo/_data",
"Name": "data_mongo",
"Options": {},
"Scope": "local"
}
]
docker volume rm
docker@ManagerX:~$ docker volume rm data_mongo
data_mongo
docker volume prune
官方文档
https://docs.docker.com/engine/reference/commandline/volume_create/