Docker网络
理解Docker
清空所有环境
docker是如何处理容器网络访问的?
#查看容器的内部网络地址 ip addr
docker exec -it tomcat01 ip addr
原理
1、我们每启动一个docker容器,docker就会给docker容器分配一个ip。我们只要安装了docker,就会有一个网卡docker0,桥接模式,使用的技术是evth-pair技术
#容器带来的网卡,都是一对一对的
#evth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一端连接协议,一端彼此相连
#正因为有这个特性,evth-pair充当一个桥梁,连接各种虚拟网络设备
#容器之间也是可以互相ping通的
--link
我们编写了一个微服务,database URL = ip,项目不重启,数据库ip换掉了,我们希望可以处理这个问题,可以使用名字来访问这个容器。
#docker exec -it tomcat02 ping tomcat01 ping不通
#通过--link 可以解决网络联通问题
#docker run -d -P --name tomcat03 --link tomcat02 tomcat
#docker exec -it tomcat03 ping tomcat02 可以ping通
自定义网络
#查看所有的docker网络
docker network ls
网络模式
bridge:桥接docker
测试
#我们直接启动命令 --net bridge,而这个就是我们的docker0
docker run -d -P --name tomcat01 tomcat
docker run -d —P --name tomcat01 --net bridge tomcat
#docker特点,默认域名不能访问,--link可以打通连接
#我们可以自定义一个网络!
#--driver bridge
#--subnet 192.168.0.0/16
#--gateway 192.168.0.1
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
#oot@ji-VirtualBox:~# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
39613d7e1aa93c20b52759d0f1cfe3277ca1de10cda41825430f78362d433eaa
root@ji-VirtualBox:~# docker network inspect mynet
[
{
"Name": "mynet",
"Id": "39613d7e1aa93c20b52759d0f1cfe3277ca1de10cda41825430f78362d433eaa",
"Created": "2023-08-30T16:48:49.435201961+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.0.0/16",
"Gateway": "192.168.0.1"
}
]
},
#在自定义网络下创建容器
docker run -d -P --name tomcat-net-01 --net mynet tomcat #在tomcat镜像和自定义的网络下创建tomcat-net-01容器
网络连通
#测试 打通 可以将一个容器的网络直接放入mynet我网络之下
docker network connect mynet tomcat01
#一个容器两个ip地址