Docker (3) 数据卷管理和convoy插件

Docker数据卷管理

  • 为什么要用数据卷?
    docker 原生使用的是 联合文件系统 性能差 生命周期与容器相同
  • 数据卷的 优点
    1, 直接mount到容器中 绕开了分层文件系统
    2, 性能和主机磁盘相同,并且不会因容器删除而删除
    3, 修改方便,不用进入容器内部,对容器 侵入小
docker managed volume

在dockerfile中使用VOLUME 关键字 声明 挂载 称为 docker管理卷

VOLUME ["<路径1>", "<路径2>"...]
bind mount

在 docker run 中 加上 -v 选项 挂载 称为 bind mount

-v <host path>:<container path>

挂载nginx html

[root@server1 ~]# tree html/
html/
└── index.html

0 directories, 1 file
[root@server1 ~]# docker run -d --name web -v /root/html:/usr/share/nginx/html nginx

[root@server1 ~]# curl 172.17.0.2
hello world
部署nginx和php
  • 下载nginx和php镜像
    在这里插入图片描述
  • 创建存储卷
[root@server1 ~]# docker volume create html
[root@server1 ~]# docker volume create conf
  • 启动容器
[root@server1 ~]# docker run -d --name web -v conf:/etc/nginx/conf.d -v html:/usr/share/nginx/html -p 80:80  nginx
82559c72a99e8c28a49e70659d92d7667a0259e4e19862b9a44193f6b1fede94
[root@server1 ~]# docker run -d --name php  -v html:/usr/share/nginx/html php-fpm
52973c4cd2bd6ee725b51c6dab56126fac7f166da4293704929cc2d95c422406
  • 访问
    在这里插入图片描述

Docker卷插件

docker卷默认使用的是local类型的驱动,只能存在于宿主机,跨主机的volume就需要第三方驱动。
docker官方只提供了插件api,开发者可以根据实际需求定制插件驱动。

convoy 插件
配置nfs

在server1

[root@server1 ~]#  yum install -y nfs-utils.x86_64
[root@server1 ~]#  systemctl start rpcbind
[root@server1 ~]#  cat /etc/exports
nfsdata *(rw,sync,no_root_squash)
[root@server1 ~]#  mkdir /nfsdata
[root@server1 ~]#  systemctl start  nfs
[root@server1 ~]#  exportfs -rv

在server2

[root@server2 ~]#  yum install -y nfs-utils.x86_64
[root@server2 ~]#  systemctl start rpcbind
[root@server2 ~]# mkdir /nfsdata
[root@server2 ~]# showmount -e server1
Export list for server1:
/nfsdata *
[root@server2 ~]# mount server1:/nfsdata /nfsdata
[root@server2 ~]# df 
Filesystem            1K-blocks    Used Available Use% Mounted on
/dev/mapper/rhel-root   8374272 1942564   6431708  24% /
devtmpfs                 495252       0    495252   0% /dev
tmpfs                    507368       0    507368   0% /dev/shm
tmpfs                    507368    6944    500424   2% /run
tmpfs                    507368       0    507368   0% /sys/fs/cgroup
/dev/vda1               1038336  135272    903064  14% /boot
tmpfs                    101476       0    101476   0% /run/user/0
server1:/nfsdata        8374272 6077184   2297088  73% /nfsdata
配置convoy 插件

下载convoy 插件

[root@server1 ~]# tar xzf convoy.tar.gz 
[root@server1 ~]# cd convoy/
[root@server1 convoy]# cp convoy convoy-pdata_tools /usr/local/bin/
[root@server1 convoy]# convoy daemon --drivers vfs --driver-opts vfs.path=/nfsdata &
[1] 10734
[root@server1 convoy]# DEBU[0000] Creating config at /var/lib/rancher/convoy    pkg=daemon
DEBU[0000]                                               driver=vfs driver_opts=map[vfs.path:/nfsdata] event=init pkg=daemon reason=prepare root=/var/lib/rancher/convoy
DEBU[0000]                                               driver=vfs event=init pkg=daemon reason=complete
DEBU[0000] Registering POST, /volumes/umount             pkg=daemon
DEBU[0000] Registering POST, /snapshots/create           pkg=daemon
DEBU[0000] Registering POST, /backups/create             pkg=daemon
DEBU[0000] Registering POST, /volumes/create             pkg=daemon
DEBU[0000] Registering POST, /volumes/mount              pkg=daemon
DEBU[0000] Registering DELETE, /backups                  pkg=daemon
DEBU[0000] Registering DELETE, /volumes/                 pkg=daemon
DEBU[0000] Registering DELETE, /snapshots/               pkg=daemon
DEBU[0000] Registering GET, /volumes/                    pkg=daemon
DEBU[0000] Registering GET, /snapshots/                  pkg=daemon
DEBU[0000] Registering GET, /backups/list                pkg=daemon
DEBU[0000] Registering GET, /backups/inspect             pkg=daemon
DEBU[0000] Registering GET, /info                        pkg=daemon
DEBU[0000] Registering GET, /volumes/list                pkg=daemon
DEBU[0000] Registering plugin handler POST, /VolumeDriver.Create  pkg=daemon
DEBU[0000] Registering plugin handler POST, /VolumeDriver.Remove  pkg=daemon
DEBU[0000] Registering plugin handler POST, /VolumeDriver.Mount  pkg=daemon
DEBU[0000] Registering plugin handler POST, /VolumeDriver.Unmount  pkg=daemon
DEBU[0000] Registering plugin handler POST, /VolumeDriver.Path  pkg=daemon
DEBU[0000] Registering plugin handler POST, /VolumeDriver.Get  pkg=daemon
DEBU[0000] Registering plugin handler POST, /VolumeDriver.List  pkg=daemon
DEBU[0000] Registering plugin handler POST, /Plugin.Activate  pkg=daemon
[root@server1 convoy]# mkdir /etc/docker/plugins
[root@server1 convoy]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec
[root@server1 convoy]# ll /etc/docker/plugins/convoy.spec 
-rw-r--r-- 1 root root 35 Sep 10 18:12 /etc/docker/plugins/convoy.spec
在不同主机间共享卷

创建卷:

[root@server1 plugins]# convoy create vol1
DEBU[0340] Calling: POST, /volumes/create, request: POST, /v1/volumes/create  pkg=daemon
DEBU[0340]                                               event=create object=volume opts=map[VolumeType: VolumeIOPS:0 PrepareForVM:false Size:0 BackupURL: VolumeName:vol1 VolumeDriverID:] pkg=daemon reason=prepare volume=vol1
DEBU[0340] Created volume                                event=create object=volume pkg=daemon reason=complete volume=vol1
DEBU[0340] Response:  vol1                               pkg=daemon
vol1
[root@server1 plugins]# convoy list
{
        "vol1": {
                "Name": "vol1",
                "Driver": "vfs",
                "MountPoint": "",
                "CreatedTime": "Thu Sep 10 19:28:47 +0800 2020",
                "DriverInfo": {
                        "Driver": "vfs",
                        "MountPoint": "",
                        "Path": "/nfsdata/vol1",
                        "PrepareForVM": "false",
                        "Size": "0",
                        "VolumeCreatedAt": "Thu Sep 10 19:28:47 +0800 2020",
                        "VolumeName": "vol1"
                },
                "Snapshots": {}
        }
}

运行nginx

docker run -d --name web -v vol1:/usr/share/nginx/html nginx

写入测试页:

[root@server1 plugins]# echo hello world > /nfsdata/vol1/index.html 
[root@server1 plugins]# curl localhost
hello world

共享vol1

[root@server2 packages]# curl localhost
hello world

假如server1 docker宕掉 server2 数据不受影响 可以无损迁移容器

清理存储

在server2中:

convoy delete vol1  #先删除所有占用存储的容器
umount /nfsdata  # 卸载磁盘
[root@server2 packages]# convoy delete vol1
DEBU[1284] Calling: DELETE, /volumes/, request: DELETE, /v1/volumes/  pkg=daemon
DEBU[1284]                                               event=delete object=volume pkg=daemon reason=prepare volume=vol1
DEBU[1284] Cleaning up /nfsdata/vol1 for volume vol1     pkg=vfs
DEBU[1284]                                               event=delete object=volume pkg=daemon reason=complete volume=vol1

[root@server2 packages]# umount /nfsdata/
[root@server2 packages]# convoy list
{}
[root@server2 packages]# docker volume ls
DEBU[1321] Handle plugin list volume: POST /VolumeDriver.List  pkg=daemon
DEBU[1321] Successfully got volume list for docker.      pkg=daemon
DEBU[1321] Response:  {}                                 pkg=daemon
DRIVER              VOLUME NAME

在server1中:

[root@server1 plugins]# convoy list
{}
[root@server1 plugins]# docker volume ls
DEBU[1578] Handle plugin list volume: POST /VolumeDriver.List  pkg=daemon
DEBU[1578] Successfully got volume list for docker.      pkg=daemon
DEBU[1578] Response:  {}                                 pkg=daemon
DRIVER              VOLUME NAME
[root@server1 plugins]# fg
convoy daemon --drivers vfs --driver-opts vfs.path=/nfsdata     (wd: ~)
^CCaught signal interrupt: shutting down.
DEBU[1586] Cleaning up environment...                    pkg=daemon
ERRO[1586] http server erroraccept unix /var/run/convoy/convoy.sock: use of closed network connection  pkg=daemon
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值