中小网站 架构,成都网站平面设计,在线设计培训,wordpress页面设置教程一、Docker网络基础 1.docker安装后会自动创建3中网络#xff0c;分别为bridge host none docker network ls 2.docker原生bridge网络#xff1a; docker安装时会创建一个名为docker0的linux bridge,新建的容器会自动桥接到这个接口 bridge模式下没有公有ip,只有宿主机可以…一、Docker网络基础 1.docker安装后会自动创建3中网络分别为bridge host none docker network ls 2.docker原生bridge网络 docker安装时会创建一个名为docker0的linux bridge,新建的容器会自动桥接到这个接口 bridge模式下没有公有ip,只有宿主机可以直接访问外部主机不可见容器通过宿主机的nat规则后可以访问外网 3.docker原生网络host: host网络模式需要在创建容器时指定--networkhost host模式可以让容器共享宿主机的网络栈这样的好处时外部主机与容器直接通信但是容器的网络缺少隔离性。 如果共用一个网络则所有的网络资源都是公用的比如启动nginx容器则真实主机的80端口也会被占用在启动第二个nginx容器就会失败 4.docker原生网络none: none模式是禁用网络功能只有lo接口在容器创建时指定--networknone 5.docker的自定义网络 三种自定义网络驱动bridge overlay macvlan bridge驱动类似默认的bridge模式overlay和macvlan是用于创建跨主机网络 6.自定义桥接网络 在建立自定义网络时默认使用桥接模式 docker network create my_net1 docker network ls 桥接支持自定义子网和网关: docker network create my_net2 --subnet 192.168.0.0/24 --gateway 192.168.0.100 7.为什么要自定义桥接 docker引擎在分配ip时根据容器启动顺序分配谁先启动谁用多容器互访使用ip很显然不靠谱多容器访问一般使用容器名字访问会更加稳定docker原生网络不支持dns解析自定义网络中内嵌了dns。
[rootdocker ~]# docker run -d --network my_net1 --name web nginx
d9ed01850f7aae35eb1ca3e2c73ff2f83d13c255d4f68416a39949ebb8ec699f
[rootdocker ~]# docker run -it --network my_net1 --name test busybox
/ # ping web
PING web (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: seq0 ttl64 time0.197 ms
64 bytes from 172.18.0.2: seq1 ttl64 time0.096 ms
64 bytes from 172.18.0.2: seq2 ttl64 time0.087 ms 注不同的自定义网络是不能通讯 8.如何使不同的自定义网络进行互通 [rootdocker ~]# docker run -d --name web1 --network my_net1 nginx
[rootdocker ~]# docker run -it --name test --network my_net2 busybox
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:C0:A8:00:01
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:36 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5244 (5.1 KiB) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ # ping 172.18.0.2
PING 172.18.0.2 (172.18.0.2): 56 data bytes 执行docker network connect my_net1 test,这段命令的作用使将test容器加入网络eth1 9.joined容器网络 joined容器是一种特别的网络模式在容器创建时使用--networkcontainer:vm1指定vm指定的是运行的容器名。 这种模式下docker容器会共享同一个网络栈这两个容器之间可以localhost快速通信 利用容器部署phpadmin管理mysql:
#运行phpmysqladmin
docker run -d --name mysqladmin --network my_net1 -e PMA-ARBITRARY1 -p 80:80 phpadmin:latest#运行数据库
docker run -d --name mysql -e MYSQL_ROOT_PASSWORDtest --network container:mysqladmin mysql:5.7
#表示把数据库容器添加到phpadmin容器中 10.容器内外网的访问 通过docker-proxy对数据包进行内转docker run -d --name webserver -p 80:80 nginx 11.docker跨主机网络 在生产环境容器不可能都在同一个系统中需要容器具有跨主机通信的能力 跨主机网络的解决方案 docker 原生的overlay和macvlan 第三方的flannel weave calico 12.macvlan网络方式实现跨主机通信 macvlan网络方式 容器的接口直接和主机网卡连接无需nat和端口映射 macvlan独占主机网卡但可以使用vlan子接口实现实现多mavlan网络 vlan可以将物理二层网络划分为多个逻辑网络彼此隔离vlanid取值为1-4094 macvlan网络间的隔离和连通 macvaln网络在二层上时隔离的不同macvlan网络的容器是无法通信 可以在三层上通过网关将macvlan网络连通 实现方式 eth1需要在vmware中设定为仅主机模式 添加macvlan网络 测试