自定义网络格式
[toc]
docker link
这个是一个过时的东西了
before
docker run -d -p 8081:8080 --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --name tomcat82 billygoo/tomcat8-jdk8
上述成功启动并用docker exec进入各自容器实例内部
在tomcat82中ping tomcat81
root@ubuntu:/home/smile# docker exec -it tomcat82 bash
root@518bce78283a:/usr/local/tomcat# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
26: eth0@if27: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:06 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.6/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
root@518bce78283a:/usr/local/tomcat# ping 172.17.0.5
PING 172.17.0.5 (172.17.0.5) 56(84) bytes of data.
64 bytes from 172.17.0.5: icmp_seq=1 ttl=64 time=2.56 ms
64 bytes from 172.17.0.5: icmp_seq=2 ttl=64 time=0.110 ms
64 bytes from 172.17.0.5: icmp_seq=3 ttl=64 time=0.106 ms
^C
--- 172.17.0.5 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2018ms
rtt min/avg/max/mdev = 0.106/0.927/2.565/1.158 ms
能ping通
同样反也能通
问题
在docker中ip是变化的,所以我们选择用容器名称去ping通
root@98ec1a7378a7:/usr/local/tomcat# ping tomcat82
ping: tomcat82: Name or service not known
root@98ec1a7378a7:/usr/local/tomcat# ping tomcat81
ping: tomcat81: Name or service not known
或者可以选择添加hosts映射,但是注意,映射的时候ip也是写死的,所以我们必须要按照服务名去ping
after自定义网络引入
自定义桥接网络,自定义网络默认使用的是桥接网络bridge
新建自定义网络
docker network create xiongxinwei@mail_network
查看网络:
root@ubuntu:/text# docker network ls
NETWORK ID NAME DRIVER SCOPE
ec8278ac6963 bridge bridge local
c68651290784 host host local
5e7ee4274242 none null local
6c8b594b19ad xiongxinwei@mail_network bridge local
我们需要把tomcat81和tomcat81统统加入到自定义网络来保证服务名互相通信
新建容器加入自定义网络
docker run -d -p 8081:8080 --network xiongxinwei@mail_network --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --network xiongxinwei@mail_network --name tomcat82 billygoo/tomcat8-jdk8
已经存在的容器修改为自定义网络
创建容器时不指定网络时默认是桥接网络,后续更改容器的网络有两种方式:
第一种:停止并删掉容器,重新创建容器指定网络连接(不建议)
第二种:直接修改容器的网络
- 创建自定义网络
docker network create 网络名称
- 解除容器所绑定的现有网络
docker network disconnect 网络名称 容器名称
- 容器重新指定网络连接
docker network connect 网络名称 容器名称
- 重启容器
docker restart 容器名称
- 查看容器详细信息
docker inspect 容器名称
docker 下创建自定义网络,并在运行容器时绑定网络和ip
Docker安装后,默认会创建三种网络类型,bridge、host和none,可通过如下命令查看
docker network ls
bridge:网络桥接
默认情况下启动、创建容器都是用该模式,所以每次Docker容器重启时会按照顺序获取对应ip地址,这就导致容器每次重启,ip都发生变化
none:无指定网络
启动容器时,可以通过–network=none
,Docker容器不会分配局域网ip
host:主机网络
Docker容器的网络会附属在主机上,两者是互通的。
创建自定义网络和固定ip
创建自定义网络类型,并且指定网段
docker network create --driver=bridge --gateway=192.168.0.1 --subnet=192.168.0.0/16 mynetwork
--driver
:驱动程序类型--subnet
:代表网段的CIDR格式的子网--gateway
:主子网的IPV4和IPV6的网关mynetwork
:是自定义网络名称
通过docker network ls可以查看到网络类型中多了一个mynetwork
docker network ls
docker network inspect mynetwork
使用docker network inspect mynetwork 查看网络信息
使用新的网络类型创建并启动容器
docker run -d --name=consul -p 8500:8500 \
--net=mynetwork --ip=192.168.0.2 \
-e CONSUL_BIND_INTERFACE=eth0 \
--restart=always consul agent \
--server=true --bootstrap-expect=1 --client=0.0.0.0 -ui
自定义网络命令和介绍
自定义网络命令 | 说明 |
---|---|
docker network create | 创建自定义网络 |
docker network inspect | 查看自定义网络详情 |
docker network ls | 查看网络列表 |
docker network connect | 不同的自定义网络互相连接 |
docker network rm | 删除自定义网络 |
我们尝试查看一下自定义网络详情
查看tomcat81的ip
root@ubuntu:/text# docker exec -it tomcat81 bash
root@83cabf17ff0b:/usr/local/tomcat# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
33: eth0@if34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
valid_lft forever preferred_lft forever
登陆tomcat82并ping tomcat81
root@ubuntu:/home/smile# docker exec -it tomcat82 bash
root@394fa3fe7ecc:/usr/local/tomcat# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
35: eth0@if36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.18.0.3/16 brd 172.18.255.255 scope global eth0
valid_lft forever preferred_lft forever
root@394fa3fe7ecc:/usr/local/tomcat# ping tomcat81
PING tomcat81 (172.18.0.2) 56(84) bytes of data.
64 bytes from 172.18.0.2 (172.18.0.2): icmp_seq=1 ttl=64 time=1.21 ms
64 bytes from 172.18.0.2 (172.18.0.2): icmp_seq=2 ttl=64 time=0.110 ms
^C
--- tomcat81 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.110/0.660/1.211/0.551 ms
可以ping通了
所以我们做多个容器的规划,一定要走容器名
结论
自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)
自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)
自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)
自定义网络可以在容器之间提供自动的DNS解析