自定义网络
网络模式
- bridge:桥接 docker(默认,自己创建也适用bridge模式)
- none:不配置网络
- host:和宿主机共享网络
- container:容器网络连通!(用的少!局限性很大)
bridge
docker0默认就是bridge
host
none
自定义的网络
只能按ip ping通,不能按服务名ping通
测试
# 自定一个网络!
#--driver bridge 桥接网络
#--subnet 192.168.0.0/16 192.168.0.2--192.168.255.255 子网 16为是65535 24位是255
#--gateway 192.168.0.1 网关,相当于路由器
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynetdfd122edf36bceaf27bf1c8fb0c2701638228f04ca5e0842d4fa6a248da90642
docker network ls
NETWORK ID NAME DRIVER SCOPE
a3d682b6c914 bridge bridge local
667cea2f4d50 host host local
dfd122edf36b mynet bridge local
eb37be31f571 none null local
我们自己的网络就创建好了!
测试
docker run -d -P --name tomcat-net-01 --net mynet tomcat
docker run -d -P --name tomcat-net-02 --net mynet tomcat
fb429fd685a2cb0e094a6f6a956ad5df989f0178a8512c3b1f113335dae5dff2
docker network inspect mynet
[
{
"Name": "mynet",
"Id": "dfd122edf36bceaf27bf1c8fb0c2701638228f04ca5e0842d4fa6a248da90642",
"Created": "2022-09-01T21:50:12.676872348+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"b34a586ecedf361bbfd67db560f19f6767a79f11a43e02b612a2e961acd1d799": {
"Name": "tomcat-net-01",
"EndpointID": "a529fdc75f02d8c3522ce960f61bc3c95ccc075718f2db5b16267c779c72ebf9",
"MacAddress": "02:42:c0:a8:00:02",
"IPv4Address": "192.168.0.2/16",
"IPv6Address": ""
},
"fb429fd685a2cb0e094a6f6a956ad5df989f0178a8512c3b1f113335dae5dff2": {
"Name": "tomcat-net-02",
"EndpointID": "99a7c118a97e78b3c5ebcbbd03189d24951ac8fe7d542433511d2f2477a0ea3a",
"MacAddress": "02:42:c0:a8:00:03",
"IPv4Address": "192.168.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
#### 现在不使用--link,也可以ping + 名字
docker exec -it tomcat-net-01 ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.031 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.037 ms
64 bytes from 192.168.0.3: icmp_seq=3 ttl=64 time=0.041 ms
64 bytes from 192.168.0.3: icmp_seq=4 ttl=64 time=0.042 ms
docker exec -it tomcat-net-01 ping tomcat-net-02
PING tomcat-net-02 (192.168.0.2) 56(84) bytes of data.
64 bytes from tomcat-net-02.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.090 ms
64 bytes from tomcat-net-02.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.045 ms
我们自定义的网络 dockeri都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络!
好处
- redis-不同的集群使用不同的网络,保证集群是安全和健康的
- mysql-不同的集群使用不同的网络,保证集群是安全和健康的
保证了不同的集群之间的隔离,但是这种隔离状态也是可以打通的
整体说明
从其架构和运行流程来看,Docker 是一个 C/S 模式的架构,后端是一个松耦合架构,众多模块各司其职。
Docker 运行的基本流程为:
1 用户是使用 Docker Client 与 Docker Daemon 建立通信,并发送请求给后者。
2 Docker Daemon 作为 Docker 架构中的主体部分,首先提供 Docker Server 的功能使其可以接受 Docker Client 的请求。
3 Docker Engine 执行 Docker 内部的一系列工作,每一项工作都是以一个 Job 的形式的存在。
4 Job 的运行过程中,当需要容器镜像时,则从 Docker Registry 中下载镜像,并通过镜像管理驱动 Graph driver将下载镜像以Graph的形式存储。
5 当需要为 Docker 创建网络环境时,通过网络管理驱动 Network driver 创建并配置 Docker 容器网络环境。
6 当需要限制 Docker 容器运行资源或执行用户指令等操作时,则通过 Execdriver 来完成。
7 Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。