docker之bridge网络模式,数据卷的管理

容器的四种网络模式:
	bridge 桥接模式、host 模式、container 模式和 none 模式
	启动容器时可以使用 --net 参数指定,默认是桥接模式。
1.bridge模式
[root@foundation78 ~]# docker network create --driver bridge my_net1   # 创建自定义网络模式,--driver表示指定网络模式
13bdd8ce1a352b3e9337927be79566edd975bd44a77d6adb14823b56292ebcc9
[root@foundation78 ~]# docker network ls    # 查看是否添加成功

在这里插入图片描述

[root@foundation78 ~]# ip addr show     # 我们查看ip的时候发现自动分配了网络空间

在这里插入图片描述

[root@foundation78 ~]# docker inspect my_net1    # 查看详细信息

在这里插入图片描述

[root@foundation78 ~]# docker network create --driver bridge --subnet 172.21.0.1/24 --gateway 172.21.0.1 my_net2
[root@foundation78 ~]# docker network inspect my_net2

在这里插入图片描述

[root@foundation78 ~]# ip addr show

在这里插入图片描述

2.容器间互联(解决容器间通信问题)
[root@foundation78 ~]# cd  /var/www/html/images
[root@foundation78 images]# docker load -i ubuntu.tar 
[root@foundation78 images]# docker run -it --name vm1 --net my_net1 ubuntu
root@fd4eb133012e:/# ip addr

在这里插入图片描述

root@fd4eb133012e:/# ping 172.19.0.1    # 同一个容器之间可以ping通

在这里插入图片描述

root@fd4eb133012e:/# ping 172.21.0.10   # 但是不同容器的不同网桥之间不能通信

在这里插入图片描述

# 重新打开一个shell,开启另外一个容器
[root@foundation78 ~]# docker run -it --name vm2 --net my_net2 --ip 172.21.0.10 ubuntu   
root@7cabc37162ab:/# ip addr

在这里插入图片描述

root@7cabc37162ab:/# ping 172.21.0.1

在这里插入图片描述

root@7cabc37162ab:/# ping 172.19.0.2

在这里插入图片描述

[root@foundation78 ~]# docker network connect my_net1 vm2    # 为vm2添加一块my_net1的网卡


# 回到vm2上,查看ip,多了一个vm1容器的接口
root@7cabc37162ab:/# ip addr

在这里插入图片描述

root@7cabc37162ab:/# ping 172.19.0.2   # 再次通信,就可以成功通信

在这里插入图片描述

root@7cabc37162ab:/# ping vm1     # 域名也可以实现通信

在这里插入图片描述

3.外网如何访问容器

外网访问容器用到了docker-proxy和iptables DNAT
宿主机访问本机容器使用的是iptables DNAT
外部主机访问容器或容器之间的访问是docker-proxy实现

[root@foundation78 ~]# docker rm -f vm1
vm1
[root@foundation78 ~]# docker rm -f vm2
vm2
[root@foundation78 ~]# systemctl stop httpd   # 因为httpd用的端口和nginx冲突,先关闭httpd服务
[root@foundation78 ~]# docker run -d --name vm1 -p 80:80 nginx   
17e5687c4a98581d8b5c869c99379a2ab1a26fd2ec6aa7119d1730c4837b35a3
# 访问测试

在这里插入图片描述

4.容器间隔离

打开两台主机进行远程访问

[root@base2 ~]# systemctl start docker
[root@base2 ~]# ip link set eth0 promisc on   # 打开网卡混杂模式
[root@base2 ~]# ip addr show

在这里插入图片描述

[root@base2 ~]# docker network create -d macvlan --subnet 172.25.78.0/24 --gateway 172.25.78.1 -o eth0 mac_net1   # 创建macvlan网络
c5ce28127e3d44e77de160eea1902babca5fcb5721acd5c3a546d17561f5372f
[root@base2 ~]# docker network ls

在这里插入图片描述

[root@base2 ~]# ls
ubuntu.tar
[root@base2 ~]# docker load -i ubuntu.tar 
[root@base2 ~]# docker run -it --name vm1 --net mac_net1 --ip 172.25.78.10 ubuntu
root@de7811765274:/# ip addr

在这里插入图片描述

[root@base3 ~]# systemctl start docker
[root@base3 ~]#  ip link set eth0 promisc on
[root@base3 ~]# docker network create -d macvlan --subnet 172.25.78.0/24 --gateway 172.25.78.1 -o parent=eth0 mac_net1
20313aa15185b47f19a77c585ee8355f8d61ddf90710e223bab07f9c3c6d8e4c
[root@base3 ~]# docker network ls

在这里插入图片描述

[root@base3 ~]# docker load -i ubuntu.tar
[root@base3 ~]# docker run -it --name vm1 --net mac_net1 --ip 172.25.78.11 ubuntu
root@1e3cf6b8215b:/# ip addr

在这里插入图片描述

root@c79f389fcf00:/# ping 172.25.78.10

在这里插入图片描述

# 在两台docker主机上各添加eth1网卡
[root@base2 ~]# ip link set eth1 promisc on
[root@base2 ~]# ip addr show eth1

在这里插入图片描述

[root@base2 ~]# docker network create -d macvlan --subnet 172.25.79.0/24 --gateway 172.25.79.1 -o parent=eth1 mac_net2
8e1faed2a14e9b958ecd818a2f975bc70320bee5c21cf61841c9f4e1fab113bc
[root@base2 ~]# docker run -it --name vm2 --net mac_net2 --ip 172.25.79.10 ubuntu
root@f3c38df676bd:/# ip addr

[root@base3 ~]#  ip link set eth1 promisc on
[root@base3 ~]#  ip addr show eth1

在这里插入图片描述

[root@base3 ~]# docker network create -d macvlan --subnet 172.25.79.0/24 --gateway 172.25.79.1 -o parent=eth1 mac_net2
1eb5e971e08be3f585a808fdece98a9d687351c96eeb6a3c41e02e2aa9e6f22d
[root@base3 ~]# docker run -it --name vm2 --net mac_net2 --ip 172.25.79.11 ubuntu
root@ed94b0ac714d:/# ping 172.25.78.10       # 不能和eth0上的网卡进行通信

在这里插入图片描述

root@ed94b0ac714d:/# ping 172.25.78.11    # 也不能和本机的eth0接口进行通信

在这里插入图片描述

# macvlan网络在二层上是隔离的,所以不同macvlan网络的容器是不能通信的,可以在三层上通过网关将macvlan网络连通起来。
root@f3c38df676bd:/# [root@base2 ~]#                           # 用ctrl+p+q退出来
[root@base2 ~]# docker network create -d macvlan --subnet 172.25.80.0/24 --gateway 172.25.80.1 -o parent=eth1.1 mac_net3
627f49f2e98b1d01584051aafd5ee9fa53623dd99e12c880e7d129aef5888277
[root@base2 ~]# docker run -it --name vm3 --net mac_net3 --ip 172.25.80.10 ubuntu
root@9a862aeaa2be:/# 

root@ed94b0ac714d:/# [root@base3 ~]#                       # 用ctrl+p+q退出来
[root@base3 ~]#  docker network create -d macvlan --subnet 172.25.80.0/24 --gateway 172.25.80.1 -o parent=eth1.1 mac_net3
8bf8fa396fa717697b93d59ee23e113617c96989b43432aaafbca75242ab3d8d
[root@base3 ~]# docker run -it --name vm3 --net mac_net3 --ip 172.25.80.11 ubuntu
root@5ba136ae782d:/#  ping 172.25.80.10                 # 成功通信

在这里插入图片描述

5.数据卷的管理
# 先实现共享功能
# 在base2上

[root@base2 ~]# docker rm -f vm1
vm1
[root@base2 ~]# docker rm -f vm2
vm2
[root@base2 ~]# docker rm -f vm3
vm3
[root@base2 ~]# docker rm -f `docker ps -aq`
a6d5ce292b44
14426ab52fc1
aea9e390c112
eefc53ced73d
975686815e78
899e0b3ea751
df6738342252
a84b5581dc17
[root@base2 ~]# yum install -y nfs-utils
[root@base2 ~]# systemctl status rpcbind

在这里插入图片描述

[root@base2 ~]# vim /etc/exports
/mnt/nfs   *(rw,no_root_squash)
[root@base2 ~]# systemctl start nfs
[root@base2 ~]# showmount -e 172.25.78.12
Export list for 172.25.78.12:
/mnt/nfs *

# 在base3上

[root@base3 ~]# docker rm -f vm1
vm1
[root@base3 ~]#  docker rm -f vm2
vm2
[root@base3 ~]#  docker rm -f vm3
vm3
[root@base3 ~]#  docker rm -f `docker ps -aq`
5a6c5fb7dda7
cbbfe1e7420b
[root@base3 ~]# mkdir /mnt/nfs
[root@base3 ~]# mount 172.25.78.12:/mnt/nfs /mnt/nfs
[root@base3 ~]# df

在这里插入图片描述

[root@base3 ~]# cd /mnt/nfs/
[root@base3 nfs]# ls
[root@base3 nfs]# touch file
[root@base3 nfs]# ll
total 0
-rw-r--r-- 1 root root 0 Mar 17 15:55 file

# 在服务端可以查看到建立的文件
[root@base2 ~]# ls /mnt/nfs/
file
# 实现用docker共享数据卷
# 在base2上

[root@base2 ~]# tar zxf convoy.tar.gz 
[root@base2 ~]# cd convoy/
[root@base2 convoy]# ls
convoy  convoy-pdata_tools  SHA1SUMS
[root@base2 convoy]# cp convoy* /usr/local/bin/
[root@base2 convoy]# cd /usr/local/bin/
[root@base2 bin]# ls
convoy  convoy-pdata_tools
[root@base2 bin]# cd /etc/docker/
[root@base2 docker]# mkdir plugins
[root@base2 docker]# convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs &> /dev/null &
[1] 17930
[root@base2 docker]# cd /mnt/nfs/
[root@base2 nfs]# ls
config  file
[root@base2 nfs]# rm -fr file
[root@base2 nfs]# cd /etc/docker/plugins/
[root@base2 plugins]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec  
[root@base2 plugins]# cat convoy.spec 
unix:///var/run/convoy/convoy.sock

# 在base3上

[root@base3 ~]# tar zxf convoy.tar.gz 
[root@base3 ~]# cd convoy
[root@base3 convoy]# cp convoy* /usr/local/bin/
[root@base3 convoy]# mkdir /etc/docker/plugins
[root@base3 convoy]# convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs &> /dev/null &
[1] 5780
[root@base3 convoy]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec  
[root@base3 convoy]# cd /etc/docker/plugins/
[root@base3 plugins]# ls
convoy.spec
[root@base3 plugins]# cat convoy.spec 
unix:///var/run/convoy/convoy.sock
[root@base3 plugins]# ll /var/run/convoy/convoy.sock 
srwxr-xr-x 1 root root 0 Mar 17 16:08 /var/run/convoy/convoy.sock

# 在base2上

[root@base2 plugins]# cd
[root@base2 ~]# convoy list
{}
[root@base2 ~]# convoy create vol1
vol1
[root@base2 ~]# convoy list

在这里插入图片描述

[root@base2 plugins]# cd /mnt/nfs/
[root@base2 nfs]# ls
config  vol1
[root@base2 nfs]# docker run -it --name vm1 -v vol1:/data ubuntu
root@380a3c5d650e:/# cd data/
root@380a3c5d650e:/data# touch file{1..5}
root@380a3c5d650e:/data# ls
file1  file2  file3  file4  file5

[root@base3 ~]# convoy list

在这里插入图片描述

[root@base3 ~]# cd /mnt/nfs/vol1/
[root@base3 vol1]# ls
file1  file2  file3  file4  file5
[root@base3 vol1]#  docker run -it --name vm1 -v vol1:/data ubuntu
root@47beb7e54a3d:/# cd data/
root@47beb7e54a3d:/data# ls
file1  file2  file3  file4  file5
# 清理环境
root@47beb7e54a3d:/data# rm -fr *
root@47beb7e54a3d:/data# ls
root@47beb7e54a3d:/data# exit
exit
[root@base3 vol1]# cd
[root@base3 ~]# docker rm vm1
vm1
[root@base3 ~]# convoy delete vol1
[root@base3 ~]# convoy list
{}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值