Docker Swarm service 存储管理 mount volume bind

转载
来源:简书
作者:Anoyi
地址:https://www.jianshu.com/p/b6d1a53f04dd


前言介绍

为了获得最佳的性能和可移植性,应该避免将重要数据直接写入容器的可写层,而应使用数据卷或绑定挂载。这个原则也适用于服务。

可以为集群中的服务创建两种类型的挂载,数据卷挂载(volume mounts)或绑定挂载(bind mounts)。无论使用哪种类型的挂载,在创建服务时使用 --mount 标志进行配置,或者在更新服务时使用 --mount-add 或 --mount-rm 标志。如果不指定一个类型,默认类型是数据卷挂载。
在这里插入图片描述

tmpfs mount 仅可用于独立容器,不能在 Docker Swarm Service 中使用,故此处不介绍。

数据卷挂载 (DATA VOLUMES)

数据卷是在主机上的持久化存储,即使容器删除,也不会影响数据卷。数据卷的相关操作见文末《附录 1 Docker 数据卷常用操作》

挂载已存在的数据卷

docker service create \
  --mount src=<VOLUME-NAME>,dst=<CONTAINER-PATH> \
  --name myservice \
  <IMAGE>

在即将启动容器之前自动创建数据卷

docker service create \
  --mount type=volume,src=<VOLUME-NAME>,dst=<CONTAINER-PATH>,volume-driver=<DRIVER>,volume-opt=<KEY0>=<VALUE0>,volume-opt=<KEY1>=<VALUE1>
  --name myservice \
  <IMAGE>

注意:如果 volume-opt 参数中包含逗号, 则需要用双引号修饰此参数,并用单引号修饰整个 --mount 配置,示例:

docker service create \
 --mount type=volume,src=<VOLUME-NAME>,dst=<CONTAINER-PATH>,volume-driver=<DRIVER>,volume-opt=<KEY0>=<VALUE0>,volume-opt=<KEY1>=<VALUE1>
 --name myservice \
 <IMAGE>

绑定挂载 (BIND MOUNTS)

绑定挂载是调度程序为该任务部署容器时主机的文件系统路径,Docker 将路径挂载到容器中。在 Swarm 为任务初始化容器之前,该文件系统路径必须存在。

允许文件读写

docker service create \
  --mount type=bind,src=<HOST-PATH>,dst=<CONTAINER-PATH> \
  --name myservice \
  <IMAGE>

如:–mount type=bind,src=/opt/www_80,dst=/opt/www_80

文件只读

docker service create \
  --mount type=bind,src=<HOST-PATH>,dst=<CONTAINER-PATH>,readonly \
  --name myservice \
  <IMAGE>

重要:虽然绑定挂载能用,但是也有可能导致一些问题:

  • 如果你挂载了一个主机路径到你的服务容器中,那么这个路径必须存在于 Swarm 集群中的每一个节点。Docker Swarm 调度器会把容器调度到任何满足资源可用性和满足你特定约束、位置偏好的节点上。
  • 如果运行中的容器变得不健康或者不可用,那么 Docker Swarm 调度器可能会随时重新安排它。
  • 主机绑定挂载是完全不可移植的。当你使用绑定挂载时,不能保证你的应用在开发中的运行方式与在生产中的运行方式相同。

Docker 数据卷常用操作

创建数据卷

docker volume create <VOLUME_NAME>
注意:创建数据卷 路径在 /mnt/sda1/var/lib/docker/volumes/<VOLUME_NAME>/_data/ 下,可以通过docker inspect 数据卷 查看路径信息,下面有介绍

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 <VOLUME_NAME>

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 <VOLUME_NAME>

docker@ManagerX:~$ docker volume rm data_mongo
data_mongo
批量删除无用数据卷

docker volume prune

最后

官方文档
https://docs.docker.com/engine/reference/commandline/volume_create/

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值