二、多个docker通过非IP方式连接方式:
有一个web容器、一个mysql容器,web服务器需要访问mysql容器,从上面的方式,可以知道使用IP来访问.
局限:
①. 每次部署或启动,相同容器的IP会发生变化
②. 需要先知道ip才能进行通信
1. link(官方已经废弃,原理可参考):
采用link来为mysql容器起个name,通过name + 端口就可以访问,IP变化了也没关系.类似添加了一个dns的记录.
# 创建容器test1
$ docker run -d --name test1 nginx
# 创建容器test2并link到test1
$ docker run -d --name test2 --link test1 nginx
# 进入test2容器,ping test1是通的
$ docker exec -it test2 /bin/sh
$ ping test1
原理:
①. test2 link到test就是修改了test2自己的host文件和设置了环境变量而已.
②. 所以test2能ping通test1,但是test1无法ping通test2.
③. --link后面是访问的容器名字.
2. 创建自定义的网桥:
①. 创建一个叫做my-bridge的网桥,使用的连接方式是bridge
$ docker network create -d bridge my-bridge
②. 查看刚刚创建的my-bridge网络
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
......
8217ca7f6526 my-bridge bridge local
$ brctl show
bridge name bridge id STP enabled interfaces
br-8217ca7f6526 8000.02420d2e2b15 no
# br-后面跟的是创建新的bridge的network id
③. 创建容器test3并添加到my-bridge网络中
$ docker run --name test3 --network my-bridge busybox /bin/sh -c "while true; do sleep 3600; done"
④. 查看宿主机的网络环境,多出一个端口:
$ ip a
7: veth9902000@if6 : <BROADCAST,MULTICAST,UP,LOWER_UP>
⑤. 查看已有网桥:
$ brctl show
bridge name bridge id STP enabled interfaces
br-8217ca7f6526 8000.02420d2e2b15 no veth9902000
⑥. 查看网络详情:
$ docker inspect 8217ca7f6526(或docker network inspect 8217ca7f6526)
"Driver": "bridge",
"Containers": {
"367c66d2abf9afa477......": {
"Name": "test3",
"IPv4Address": "172.18.0.2/16",
}
}
a. 也可以使用命令docker network inspect my-bridge(网桥名称)
b. 内网IP为172.18.0.2(之前没指定都是默认的172.17.xx.xx,即默认的docker0).
标签:test1,bridge,test2,name,方式,容器,IP,docker
From: https://blog.51cto.com/u_16255561/7762896