实现多容器与宿主机之间数据共享

一、单台宿主机上的container数据共享

 

方法一:指定宿主机的文件夹挂载到容器里的路径,实现文件夹与文件夹之间的映射

1. 在宿主机创建/web文件夹,新建index.html文件

[root@docker ~]# mkdir /web
[root@docker ~]# cd /web
[root@docker web]# vim index.html
[root@docker web]# cat index.html 
hello world !!!!
[root@docker web]# 

2. 启动一个nginx容器,实现文件夹与文件夹之间映射

[root@docker web]# docker run -d -p 8802:80 --name nginx-6 -v /web:/usr/share/nginx/html nginx
2c29b7a0bb4b81b211db8c0dbba9d0aaa829ca6946d09d8d5688251c73523ffa

3. 使用curl验证

[root@docker web]# curl 192.168.222.137:8802
hello world !!!!
[root@docker web]# 

方法二:创建卷,是容器使用相同卷

新建一个nginx-web的卷

[root@docker web]# docker volume create nginx-web
nginx-web
[root@docker web]# docker volume inspect nginx-web
[
    {
        "CreatedAt": "2022-08-29T19:47:34+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/nginx-web/_data",
        "Name": "nginx-web",
        "Options": {},
        "Scope": "local"
    }
]
[root@docker web]# 

在nginx-web对应的文件夹里新建index.html文件

[root@docker nginx-web]# cd /var/lib/docker/volumes/nginx-web/_data/
[root@docker _data]# ls
[root@docker _data]# vim index.html
[root@docker _data]# cat index.html 
hello world .......
[root@docker _data]# 

创建容器使用nginx-web卷

[root@docker _data]# docker run -d -p 8003:80 --name nginx-7 -v nginx-web:/usr/share/nginx/html nginx
dd2d384fccca37518a5fe8f9389fbcb65f3db65881b8836813149f42dd4359ea 
[root@docker _data]# docker run -d -p 8003:80 --name nginx-7 -v nginx-web:/usr/share/nginx/html nginx
dd2d384fccca37518a5fe8f9389fbcb65f3db65881b8836813149f42dd4359ea
[root@docker _data]# curl 192.168.222.137:8003
hello world .......
[root@docker _data]# docker run -d -p 8004:80 --name nginx-8 -v nginx-web:/usr/share/nginx/html nginx
0235bdfef92163cde9775275291f4aa0cd326fd632002faf7ed3d657f8109fe8
[root@docker _data]# docker run -d -p 8005:80 --name nginx-9 -v nginx-web:/usr/share/nginx/html nginx
b480c5bc6fcaae5b88fd57af11e8f0cb8b6ad68ff389b6744f27f309dad42172

使用curl验证

[root@docker _data]# curl 192.168.222.137:8004
hello world .......
[root@docker _data]# curl 192.168.222.137:8005
hello world .......
[root@docker _data]# vim index.html 
[root@docker _data]# curl 192.168.222.137:8005
hello world .....
12345
2343
[root@docker _data]# curl 192.168.222.137:8004
hello world .....
12345
2343
[root@docker _data]# 

一台机器里的多个容器之间共享数据

二、多态机器之间共享数据

nfs服务:

​ network file system 网络文件系统:实现多态机器之间的文件共享

搭建nfs服务

一、安装软件包

yum install  -y nfs-utils

二、启动服务

[root@nfs-server ~]# systemctl start nfs
[root@nfs-server ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@nfs-server ~]#

三、查看rpcbind的端口和进程

[root@nfs-server ~]# ps aux|grep nfs
root       1919  0.0  0.0      0     0 ?        S<   17:24   0:00 [nfsd4_callbacks]
root       1925  0.0  0.0      0     0 ?        S    17:24   0:00 [nfsd]
root       1926  0.0  0.0      0     0 ?        S    17:24   0:00 [nfsd]
root       1927  0.0  0.0      0     0 ?        S    17:24   0:00 [nfsd]
root       1928  0.0  0.0      0     0 ?        S    17:24   0:00 [nfsd]
root       1929  0.0  0.0      0     0 ?        S    17:24   0:00 [nfsd]
root       1930  0.0  0.0      0     0 ?        S    17:24   0:00 [nfsd]
root       1931  0.0  0.0      0     0 ?        S    17:24   0:00 [nfsd]
root       1932  0.0  0.0      0     0 ?        S    17:24   0:00 [nfsd]
root       1964  0.0  0.0 112824   972 pts/0    S+   17:25   0:00 grep --color=auto nfs
[root@nfs-server ~]# ss -anplut|grep rpcbind
udp    UNCONN     0      0         *:797                   *:*                   users:(("rpcbind",pid=1894,fd=7))
udp    UNCONN     0      0         *:111                   *:*                   users:(("rpcbind",pid=1894,fd=6))
udp    UNCONN     0      0      [::]:797                [::]:*                   users:(("rpcbind",pid=1894,fd=10))
udp    UNCONN     0      0      [::]:111                [::]:*                   users:(("rpcbind",pid=1894,fd=9))
tcp    LISTEN     0      128       *:111                   *:*                   users:(("rpcbind",pid=1894,fd=8))
tcp    LISTEN     0      128    [::]:111                [::]:*                   users:(("rpcbind",pid=1894,fd=11))

nfsd进程将监听端口的活外包给了rpcbind进程

四、创建nfs共享目录

[root@nfs-server ~]# mkdir /web
[root@nfs-server ~]# cd /web
[root@nfs-server web]# echo "welcome to sanchuang changsha nongda" >index.html
[root@nfs-server web]# ls
index.html
[root@nfs-server web]#

5、编辑/etc/exports文件 **修改配置文件需要重新加载配置文件( exportfs -arv)

/web  192.168.1.0/24(rw,sync,all_squash)

/web 共享的目录的路径
192.168.1.0/24 允许能访问的机器的网段
(rw,sync,all_squash) 拥有的权限  rw 可以读写  sync 在host上修改了数据,里面同步到nfs服务器

all_squash 任何机器上的任何用户连接过来都看成一个普通的用户nobody对待
[root@nfs-server web]# exportfs -av  让共享目录生效
exporting 192.168.1.0/24:/web
[root@nfs-server web]#

6.设置共享目录的权限

[root@nfs-server web]# chown  nobody:nobody /web
[root@nfs-server web]# ll -d /web
drwxr-xr-x 2 nobody nobody 24 8月  26 17:28 /web
[root@nfs-server web]#

共享权限
linux系统里的权限

[root@nfs-server web]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@nfs-server web]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
[root@nfs-server web]# getenforce
Disabled

所有的客户端

1.安装软件

[root@sc-docker _data]# yum install nfs-utils -y
[root@sc-docker2 /]#yum install nfs-utils -y

2.新建挂载目录,然后挂载

[root@sc-docker ~]# mkdir /nfs-web
[root@sc-docker2 ~]# mkdir /nfs-web

[root@sc-docker2 ~]# mount 192.168.1.133:/web /nfs-web/
[root@sc-docker ~]# df -Th|grep nfs
192.168.1.133:/web      nfs4       17G  1.5G   16G    9% /nfs-web
[root@sc-docker ~]#
[root@sc-docker ~]# cd /nfs-web/
[root@sc-docker nfs-web]# ls
index.html
[root@sc-docker nfs-web]# cat index.html
welcome to sanchuang changsha nongda
[root@sc-docker nfs-web]#
[root@sc-docker2 ~]# cd /nfs-web/
[root@sc-docker2 nfs-web]# ls
index.html
[root@sc-docker2 nfs-web]# cat index.html
welcome to sanchuang changsha nongda
[root@sc-docker2 nfs-web]#


[root@sc-docker2 nfs-web]# mount|grep nfs
192.168.1.133:/web on /nfs-web type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.124,local_lock=none,addr=192.168.1.133)
[root@sc-docker2 nfs-web]#

在客户机上直接创建一个服务,帮忙启动容器,并且创建卷

docker service create -d \
    --name nfs-service \
    --mount 'type=volume,source=nfsvolume,target=/usr/share/nginx/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/web,"volume-opt=o=addr=192.168.1.133,rw,nfsvers=4,sync"' \
    nginx:latest
docker volume create --driver local \
--opt type=nfs \
--opt o=addr=<NFS服务器地址>,nolock,soft,rw,sync \
--opt device=:<共享目录全路径> \
<卷名>

创建一个卷底层挂载到nfs服务器192.168.1.133上的共享目录/web里

[root@sc-docker nfs-web]# docker volume create --driver local --opt type=nfs --opt  o=addr=192.168.1.133,nolock,soft,rw,sync  --opt  device=:/web nfs-web-6
nfs-web-6
[root@sc-docker nfs-web]# docker volume ls
DRIVER    VOLUME NAME
local     2f1f1ac5ccdde7a9d80e277a974eeb3c2b6ff98b7126349f52caaef0042bbf9f
local     5103a4c07fe6745fba25c88320cc42a385c1e44b9cd461ed6b7be894e77bf357
local     b9eeeb4fc5d95a184919ad9dbdb6a329771950a85a98e3729ad911107eb681d4
local     nfs-web
local     nfs-web-2
local     nfs-web-6
local     nginx-web
[root@sc-docker nfs-web]# docker volume inspect nfs-web-6
[
    {
        "CreatedAt": "2022-08-26T18:24:33+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/nfs-web-6/_data",
        "Name": "nfs-web-6",
        "Options": {
            "device": ":/web",
            "o": "addr=192.168.1.133,nolock,soft,rw,sync",
            "type": "nfs"
        },
        "Scope": "local"
    }
]
[root@sc-docker nfs-web]#

创建一个容器使用nfs-web-6卷

docker run -d -p 8818:80 -v nfs-web-6:/usr/share/nginx/html --name qiantao-nginx-8 ngin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值