一、单台宿主机上的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]#
[root@docker web]# docker run -d -p 8802:80 --name nginx-6 -v /web:/usr/share/nginx/html nginx
2c29b7a0bb4b81b211db8c0dbba9d0aaa829ca6946d09d8d5688251c73523ffa
[root@docker web]# curl 192.168.222.137:8802
hello world !!!!
[root@docker 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]#
[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
[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 网络文件系统:实现多态机器之间的文件共享
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 ~]#
[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进程
[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]#
[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
[root@sc-docker _data]# yum install nfs-utils -y
[root@sc-docker2 /]#yum install nfs-utils -y
[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]#
docker run -d -p 8818:80 -v nfs-web-6:/usr/share/nginx/html --name qiantao-nginx-8 ngin