2.docker跨宿主机通讯
2.1.macvlan
创建网络语法格式
docker network create --driver 网络类型 --subnet 网段 --gateway 网关 -o parent=通讯网卡 网络名
参数
docker network 创建网络的关键字,必须有
create 创建一个网络
ls 列出创建的所有网络
rm 删除一个网络
connect 连接一个网络
–dirver 指定要创建的网络类型
–subnet 指定网段
– gateway 指定网关
-o parent 在哪块网卡上虚拟出多个网卡
- 默认情况下只有一个物理网卡,只有一个物理地址,macvlan可以虚拟出多个mac地址,从而去和其他宿主机的容器进行通讯
- 使用macvlan通讯时必须指定ip,都这默认从第一个ip开始分配
- 一个网卡只能创建一个网络类型
- 缺点:不能与宿主机的ip地址进行通讯
2.1.1.创建macvlan
两台docker宿主机都需要做 [root@docker01 ~]# docker network create --driver macvlan --subnet 192.168.81.0/24 --gateway 192.168.81.2 -o parent=ens33 macvlan1 cc64864688d381d0fac00aba628d704cf99eeec5571a61710701d42693118a1e [root@docker02 ~]# docker network create --driver macvlan --subnet 192.168.81.0/24 --gateway 192.168.81.2 -o parent=ens33 macvlan1 cc64864688d381d0fac00aba628d704cf99eeec5571a61710701d42693118a1e
2.1.2.配置容器的ip与其他容器互连
docker1 [root@docker01 ~]# docker run -it --network macvlan1 --ip=192.168.81.10 centos69_ssh_df:v3 /bin/bash docker2 [root@docker02 ~]# docker run -it --network macvlan1 --ip=192.168.81.20 nginx:latest /bin/bash
2.1.3.测试是否通讯
[root@ae9c8fc4562f /]# ping -c1 192.168.81.20 PING 192.168.81.20 (192.168.81.20) 56(84) bytes of data. 64 bytes from 192.168.81.20: icmp_seq=1 ttl=64 time=0.321 ms --- 192.168.81.20 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.321/0.321/0.321/0.000 ms [root@ae9c8fc4562f /]#
2.1.4.如果网络不能通讯则使用如下解决方法
[root@docker01 ~]# ip link set ens33 promisc on 设置网卡为混杂模式
2.2.overlay
- macvlan是本地类型,而overlay属于全局类型,把网络信息存储到数据库中,保证分配的ip不会冲突
2.2.1.环境规划
2.2.2.所有机器上配置live-restore参数
[root@nfs ~]# vim /etc/docker/daemon.json { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"], "live-restore":true }
2.2.3.docker-consul上安装consul数据库
[root@docker03 ~]# docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server --bootstrap 参数: -d 后台 -p 端口映射 -h 指定容器主机名 --name 容器名称 -server --bootstrap是consul的参数
2.2.4.docker01和docker02配置consul数据库地址
docker01 [root@docker01 ~]# vim /etc/docker/daemon.json { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"], "live-restore": true, "cluster-store": "consul://192.168.81.230:8500", "cluster-advertise": "192.168.81.210:2376" } [root@docker01 ~]# systemctl restart docker docker02 [root@docker01 ~]# vim /etc/docker/daemon.json { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"], "live-restore": true, "cluster-store": "consul://192.168.81.230:8500", "cluster-advertise": "192.168.81.220:2376" } [root@docker01 ~]# systemctl restart docker
2.2.5.观察页面端
2.2.6.创建overlay网络
[root@docker01 ~]# docker network create -d overlay overlay_1 b99266d65640b5e45fbf9f2f58ff91864e8d543a43402c23c4e542f9aa595367
2.2.7.运行容器使用overlay网络
docker01上 [root@docker01 ~]# docker run -it --network overlay_1 --name ssh01 centos69_ssh_df:v3 /bin/bash docker02上 [root@docker02 ~]# docker run -it --network overlay_1 --name ssh02 centos69_ssh_df:v3 /bin/bash 两边都能ping通说明成功
docker network inspect overlay_1都能看到那些容器使用了什么ip
2.3.docker远程操作其他docker宿主机
在启动文件中开启2375端口 [root@docker01 ~]# vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock 重载docker [root@docker01 ~]# systemctl daemon-reload [root@docker01 ~]# systemctl restart docker 远程操作 [root@docker01 ~]# docker -H 192.168.81.220 images REPOSITORY TAG IMAGE ID CREATED SIZE centos69_ssh_df v3 2ccb494fa7b0 8 days ago 367MB jumpserver/jms_all latest a42e2037b4a5 2 weeks ago 1.46GB nginx latest 2622e6cca7eb 3 weeks ago 132MB httpd 2.4 ccbcea8a6757 3 weeks ago 166MB
2.4.删除一个已经使用过的overlay网络
1)已经使用着的overlay删除时会报以下错误
这个报错表示有其他容器再使用overlay_1的网络
[root@docker01 ~]# docker network rm overlay_1 Error response from daemon: error while removing network: network overlay_1 id 717bde8563a1dcc6f2e713e90b4a503dce778a63789d08dcaa72b91769bc99e6 has active endpoints
2)使用docker network inspect overlay_1看他的两个参数
[root@docker01 ~]# docker network inspect overlay_1 找到参数1和参数2
3)使用docker network disconnect 后面跟着这两个参数执行即可
[root@docker01 ~]# docker network disconnect -f overlay_1 ssh_3 disconnect表示端口一个容器和某个网络的连接 [root@docker01 ~]# docker network rm overlay_1 overlay_1




