zoukankan      html  css  js  c++  java
  • Docker Swarm(四)Volume 数据(挂载)持久化

    前言

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

    可以为集群中的服务创建两种类型的挂载,数据卷挂载(volume mounts)或绑定挂载(bind mounts)。

    无论使用哪种类型的挂载,在创建服务时使用 --mount 标志进行配置,或者在更新服务时使用 --mount-add 或 --mount-rm 标志。如果不指定一个类型,默认类型是数据卷挂载。

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

    一、数据卷挂载

    数据卷是在主机上的持久化存储,即使容器删除,也不会影响数据卷。

    使用 docker volume create 命令创建一个volume:

    docker volume create --name cwxvolume

    使用 docker volume ls 命令查看volume列表:

    docker volume ls

    创建服务时使用创建好的volume挂载目录:

    docker service create --name masl -e TZ="Asia/Shanghai" --network mrp_net --mount type=volume,src=cwxvolume,dst=/home/mppay/logs/masl --replicas 2 -p 8081:8080 172.16.99.2:40305/masl:dev-yc-34

    参数src写成source也可以;dst表示容器内的路径,也可以写成destination

    使用 docker service ps 命令查看服务情况:

    docker service ps masl

    发现分别在 manager-node 和 node1 节点上都创建了 masl 任务。

    登陆 manager-node 服务器,使用 docker ps -a 命令查看容器运行情况:

    docker ps -a

    再使用 docker exec 进入容器:

    docker exec -ti f820be6cf958 /bin/bash

    发现,在容器内部的 /home/mppay/logs/masl 目录下有一个 masl.log文件,然后输入exit命令退出容器。

    使用 docker volume inspect 命令查看挂载详细信息

    docker volume inspect cwxvolume

     进入上面指定的目录:

    cd /var/lib/docker/volumes/cwxvolume/_data
    ls

     发现宿主机上也有这个文件。

    二、绑定挂载

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

    使用以下命令创建服务:

    docker service create --name masl -e TZ="Asia/Shanghai" --network mrp_net --mount type=bind,source=/usr/local/tomcal_masl/logs,destination=/home/mppay/logs/masl --replicas 2 -p 8081:8080 172.16.99.2:40305/masl:dev-yc-34

    其中,参数destination表示容器里面的路径,source表示本地硬盘路径

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

    1) 如果你挂载了一个主机路径到你的服务容器中,那么这个路径必须存在于 Swarm 集群中的每一个节点。Docker Swarm 调度器会把容器调度到任何满足资源可用性和满足你特定约束、位置偏好的节点上。

    2) 如果运行中的容器变得不健康或者不可用,那么 Docker Swarm 调度器可能会随时重新安排它。

    3) 主机绑定挂载是完全不可移植的。当你使用绑定挂载时,不能保证你的应用在开发中的运行方式与在生产中的运行方式相同。

    总结

    1) 挂载volume后,宿主机和容器之间就可以通过volume进行双向实时同步.
     
    2) 如果replicas是多份,则每个节点宿主机上都会有一个volume路径,即每个节点宿主机的/var/lib/docker/volumes/cwxvolume/_data和分布到它上面的容器里的/home/mppay/logs/masl进行实时同步.
     
    3)在容器里的同步目录下没有写权限,更新内容时只要放到宿主机的挂在目录下即可。
     
     
  • 相关阅读:
    iBatis系列一
    iBatis入手案例
    需求分析7字诀
    自我意识为王
    物联网关键技术之一
    物联网之二:传感器无线网络
    物联网之二:传感器无线网络
    物联网时代之一
    项目经理的心法
    项目管理规划
  • 原文地址:https://www.cnblogs.com/caoweixiong/p/12381838.html
Copyright © 2011-2022 走看看