Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1395183
  • 博文数量: 188
  • 博客积分: 1784
  • 博客等级: 上尉
  • 技术积分: 2772
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-05 22:20
个人简介

发上等愿,结中等缘,享下等福;择高处立,就平处坐,向宽处行。

文章分类

全部博文(188)

文章存档

2020年(12)

2019年(11)

2018年(4)

2017年(3)

2016年(11)

2015年(22)

2014年(19)

2013年(25)

2012年(32)

2011年(49)

分类: 虚拟化

2019-09-24 13:37:22

volume 是将宿主级的目录映射到容器中,以实现数据持久化。

可以用两种方式来实现:

volume 默认模式:工作节点宿主机数据同步到容器内。

volume NFS 共享存储模式:管理节点宿主同步到工作节点宿主,工作节点宿主同步到容器。

环境:

系统:Centos 7.4 x64

应用版本:Docker 18.09.0

管理节点:192.168.1.79

工作节点:192.168.1.78

工作节点:192.168.1.77

volume 默认模式

1、管理节点:创建服务并添加数据卷

docker service create \

--mount type=volume,src=test,dst=/data \

--name v-hello \

busybox ping

复制代码

# 创建服务

docker service create \

# 创建数据卷 type=volume,src=volume名称,dst=容器目录

--mount type=volume,src=test,dst=/data \

# 服务名

--name v-hello \

# 镜像

busybox

# 容器内执行指令

ping

复制代码

2、工作节点12:查看数据卷

命令:docker volume ls

DRIVER              VOLUME NAME

local               test

复制代码

命令:docker volume inspect test

[

    {

        "Driver": "local",

        "Labels": null,

         # 挂载宿主级目录

        "Mountpoint": "/var/lib/docker/volumes/test/_data",

        "Name": "test",

        "Options": {},

        "Scope": "local"

    }

]

复制代码

3、工作节点12:进入容器查看已创建数据卷

命令:docker ps

CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES

019d6e42a364        busybox:latest      "ping "   33 seconds ago      Up 31 seconds                           v-hello.1.m22z2lmpk4c27a9nsji6q0mog

# 1、进入容器

docker exec -it 019d6e42a364 sh

# 2、容器内进入数据卷节点

/ # cd /data

/data #

# 3、容器外进入数据卷目录创建文件

 cd /var/lib/docker/volumes/test/_data

touch a.txt

# 4、容器内测试data目录数据 完成测试!

/data # ls

a.txt

volume NFS共享存储模式(推荐)

一、搭建NFS服务与客户端

1、管理节点:安装nfs服务端、配置nfs主配置文件、添加权限、启动

yum install nfs-utils -y

vim /etc/exports

# 添加目录给相应网段访问并添加读写权限

/opt/docker/wwwroot 192.168.1.0/24(rw)

# 创建共享目录,添加权限

mkdir -p /opt/docker/wwwroot

chmod 777 /opt/docker/wwwroot/

配置文件说明:

/opt/docker/wwwroot 为共享目录

* 192.168.1.0/24 可以为一个网段,一个IP,也可以是域名,域名支持通配符 如: *.com

* rwread-write,可读写;

* roread-only,只读;

* sync:文件同时写入硬盘和内存;

* async:文件暂存于内存,而不是直接写入内存;

* no_root_squashNFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。

* root_squashNFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobodynfsnobody身份;

* all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;

* anonuid:匿名用户的UID

* anongid:匿名用户的GID值。备注:其中anonuid=1000,anongid=1000,为此目录用户webID,达到连接NFS用户权限一致。

* defaults 使用默认的选项。默认选项为rwsuiddevexecauto nouserasync

* atime 每次存取都更新inode的存取时间,默认设置,取消选项为noatime

* noatime 每次存取时不更新inode的存取时间。

* dev 可读文件系统上的字符或块设备,取消选项为nodev

* nodev 不读文件系统上的字符或块设备。

* exec 可执行二进制文件,取消选项为noexec

* noexec 无法执行二进制文件。

* auto 必须在/etc/fstab文件中指定此选项。执行-a参数时,会加载设置为auto的设备,取消选取为noauto

* noauto 无法使用auto加载。

* suid 启动set-user-identifier设置用户IDset-group-identifer设置组ID设置位,取消选项为nosuid

* nosuid 关闭set-user-identifier设置用户IDset-group-identifer设置组ID设置位。

* user 普通用户可以执行加载操作。

* nouser 普通用户无法执行加载操作,默认设置。

* remount 重新加载设备。通常用于改变设备的设置状态。

* rsize 读取数据缓冲大小,默认设置1024影响性能

* wsize 写入数据缓冲大小,默认设置1024

* fg 以前台形式执行挂载操作,默认设置。在挂载失败时会影响正常操作响应。

* bg 以后台形式执行挂载操作。

* hard 硬式挂载,默认设置。如果与服务器通讯失败,让试图访问它的操作被阻塞,直到服务器恢复为止。

* soft 软式挂载。服务器通讯失败,让试图访问它的操作失败,返回一条出错消息。这项功能对于避免进程挂在无关紧要的安装操作上来说非常有用。

* retrans=n 指定在以软方式安装的文件系统上,在返回一条出错消息之前重复发出请求的次数。

* nointr 不允许用户中断,默认设置。

* intr 允许用户中断被阻塞的操作并且让它们返回一条出错消息。

* timeo=n 设置请求的超时时间以十分之一秒为单位。

* tcp 传输默认使用udp,可能出现不稳定,使用proto=tcp更改传输协议。客户端参考mountproto=netid

# 开启rpc服务

systemctl start rpcbind

# 启动服务并设置开机自启

systemctl start nfs

2、工作节点:安装nfs客户端、启动服务

yum install nfs-utils -y

# 开启rpc服务

systemctl start rpcbind

# 启动服务并设置开机自启

systemctl start nfs

确认NFS服务器启动成功

[root@master opt]# rpcinfo -p

   program vers proto   port  service

    100024    1   udp  50813  status

    100024    1   tcp   6021  status

    100005    1   udp  20048  mountd

    100005    1   tcp  20048  mountd

    100005    2   udp  20048  mountd

    100005    2   tcp  20048  mountd

    100005    3   udp  20048  mountd

    100005    3   tcp  20048  mountd

    100003    3   tcp   2049  nfs

    100003    4   tcp   2049  nfs

    100227    3   tcp   2049  nfs_acl

    100003    3   udp   2049  nfs

    100003    4   udp   2049  nfs

    100227    3   udp   2049  nfs_acl

    100021    1   udp  35715  nlockmgr

    100021    3   udp  35715  nlockmgr

    100021    4   udp  35715  nlockmgr

    100021    1   tcp   5350  nlockmgr

    100021    3   tcp   5350  nlockmgr

    100021    4   tcp   5350  nlockmgr

[root@master opt]# cat /var/lib/nfs/etab

/root/share 172.16.10.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=1000,anongid=1000,sec=sys,rw,secure,root_squash,all_squash)

二、NFS创建共享数据卷

1、管理节点:使用NFS共享存储创建服务及数据卷

docker service create --mount 'type=volume,src=nfs-test,dst=/usr/share/nginx/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=192.168.1.79:/opt/docker/wwwroot,"volume-opt=o=addr=192.168.1.79,vers=4,soft,timeo=180,bg,tcp,rw"' -p 8888:80 --name nginx nginx:1.12

复制代码

# 存储类型

type=volume,

# volume名称,

src=,

# 目标路径

dst=,

# 官方配置

volume-driver=local,

# 服务类型

volumeopt=type=nfs,

# 官方配置参数

volume-opt=device=:,

"volume-opt=o=addr=,vers=4,soft,timeo=180,bg,tcp,rw"‘ \

复制代码

2、工作节点12:查看创建volumes

docker volume inspect nfs-test

复制代码

[

    {

        "CreatedAt": "2018-11-08T15:16:35+08:00",

        "Driver": "local",

        "Labels": {},

        # 工作节点宿主级:数据存放位置

        "Mountpoint": "/var/lib/docker/volumes/nfs-test/_data",

        "Name": "nfs-test",

        "Options": {

             # 管理几点共享存储位置,与工作节点共享

            "device": "192.168.1.79:/opt/docker/wwwroot",

            "o": "addr=192.168.1.79,vers=4,soft,timeo=180,bg,tcp,rw",

            "type": "nfs"

        },

        "Scope": "local"

    }

]

复制代码

3、工作节点12:测试数据卷同步

复制代码

# 管理节点:/opt/docker/wwwroot 目录下创建test文件

touch test

# 工作节点:查看宿主节点宿主是否同步

ls /var/lib/docker/volumes/nfs-test/_data

test

# 工作节点:进入容器节点查看容器是否同步

docker exec -it 7429f79519eb sh

ls /usr/share/nginx/html

test


二、使用 编排的方式发布service

docker compose文档

version: '3.3'

services:

  nginx-test5:

    image: nginx:latest

    deploy:

      mode: replicated

      replicas: 1

      restart_policy:

        condition: on-failure

    ports:

      - "88:80"

    networks:

      my-overlay-network:

        aliases:

          - nginx-test5

    volumes:

      - "foo_new:/app/share"

volumes:

  foo_new:

    driver: local

    driver_opts:

      type: "nfs"

      o: "addr=172.16.10.172,rw"

      device: ":/root/share"

networks:

  my-overlay-network:

    driver: overlay

使用docker compose编排不需要分别在每一个主机上手动创建docker volume

发布服务

[root@master opt]# docker stack deploy -c docker-compose.yml app

Creating network app_my-overlay-network

Creating service app_nginx-test5

[root@master opt]# docker stack ls

NAME                SERVICES            ORCHESTRATOR

app                 1                   Swarm

rabbit              3                   Swarm

[root@master opt]# docker stack services app

ID                  NAME                MODE                REPLICAS            IMAGE               PORTS

ighafroycq0c        app_nginx-test5     replicated          3/3                 nginx:latest        *:88->80/tcp

[root@master opt]# docker service ps app_nginx-test5

ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS

54gdcmfxh218        app_nginx-test5.1   nginx:latest        master              Running             Running 13 seconds ago

jt2v0mlgqwup        app_nginx-test5.2   nginx:latest        node2               Running             Running 15 seconds ago

z039pxqu4sbl        app_nginx-test5.3   nginx:latest        node1               Running             Running 14 seconds ago

[root@master opt]#

查看docker volume

[root@master opt]# docker volume ls

DRIVER              VOLUME NAME

省略......

local               app_foo_new

local               foo33

local               myvol2

local               test-vol

[root@master opt]# docker volume inspect app_foo_new

[

    {

        "CreatedAt": "2019-01-15T11:13:45+08:00",

        "Driver": "local",

        "Labels": {

            "com.docker.stack.namespace": "app"

        },

        "Mountpoint": "/var/lib/docker/volumes/app_foo_new/_data",

        "Name": "app_foo_new",

        "Options": {

            "device": ":/root/share",

            "o": "addr=172.16.10.172,rw",

            "type": "nfs"

        },

        "Scope": "local"

    }

]

[root@master opt]#

抽查一个看看node2

查看本机挂载:

[root@node2 ~]# docker volume ls

DRIVER              VOLUME NAME

省略......

local               app_foo_new

local               foo2

local               foo33

local               myvol2

local               test-vol

[root@node2 ~]# docker volume inspect app_foo_new

[

    {

        "CreatedAt": "2019-01-15T11:13:45+08:00",

        "Driver": "local",

        "Labels": {

            "com.docker.stack.namespace": "app"

        },

        "Mountpoint": "/var/lib/docker/volumes/app_foo_new/_data",

        "Name": "app_foo_new",

        "Options": {

            "device": ":/root/share",

            "o": "addr=172.16.10.172,rw",

            "type": "nfs"

        },

        "Scope": "local"

    }

]

[root@node2 ~]# cd /var/lib/docker/volumes/app_foo_new/_data

[root@node2 _data]# ls

index.html

[root@node2 ~]#

查看容器:

[root@node2 _data]# docker ps

CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                                                 NAMES

7e333092c3cf        nginx:latest            "nginx -g 'daemon of…"   5 minutes ago       Up 5 minutes        80/tcp                                                app_nginx-test5.2.jt2v0mlgqwupvv5lag7epriwo

91d318ee2b04        rabbitmq:3-management   "docker-entrypoint.s…"   7 weeks ago         Up 7 weeks          4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp   rabbit_rabbit2.1.ykbawm133w4c9rzsrmlm9mkhp

[root@node2 _data]# docker exec -it 7e333092c3cf bash

root@7e333092c3cf:/# cd app/share/

root@7e333092c3cf:/app/share# ls

index.html

root@7e333092c3cf:/app/share#


阅读(3300) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~