docker network的基本命令
Commands:
connect Connect a container to a network
create Create a network
disconnect Disconnect a container from a network
inspect Display detailed information on one or more networks
ls List networks
prune Remove all unused networks
rm Remove one or more networks
創建網絡
不指定網絡驅動時默認創建的bridge網絡
docker network create simple-network
查看網絡內部信息
docker network inspect simple-network
應用到容器時,可進入容器內部使用ifconfig查看容器的網絡詳情
root$ docker network create simple-network
9c8411766392c869cec05deb701150d8d600d3e4132dacf99394938b3d881ff9
root$ docker network inspect simple-network
[
{
"Name": "simple-network",
"Id": "9c8411766392c869cec05deb701150d8d600d3e4132dacf99394938b3d881ff9",
"Created": "2018-09-17T07:13:06.577577Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.20.0.0/16",
"Gateway": "172.20.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
鏈接容器
創建三個容器,分別前兩個使用默認網絡啓動容器,第三個使用自定義bridge網絡啓動。
然後再將第二個容器添加到自定義網絡。這三個容器的網絡情況如下
第一個容器:只有默認的bridge
第二個容器:屬於兩個網絡——bridge、自定義網絡(mynet)
第三個容器:只屬於自定義網絡
# 創建三個容器 container1,container2,container3
docker run -itd --name=container1 centos
docker run -itd --name=container2 centos
# 創建網絡mynet
docker network create -d bridge --subnet 172.25.0.0/16 mynet
# 將容器containerr2連接到新建網絡mynet
docker network connect mynet container2
# 使用mynet網絡來容器container3
docker run --net=mynet --ip=172.25.3.3 -itd --name=container3 centos
# 查看這三個容器的網絡情況
docker inspect container1 # bridge
docker inspect container2 # bridge, mynet
docker inspect container3 # mynet
各容器IP訪問地址如下:
container1IP地址(172.17.0.4)
container2IP地址(172.25.0.2)
container3====IP地址(172.25.3.3)
# 進入container2
root$ docker attach container2
#訪問container3正常
[root@b4737767449c /]# ping -w 4 container3
PING container3 (172.25.3.3) 56(84) bytes of data.
64 bytes from container3.mynet (172.25.3.3): icmp_seq=1 ttl=64 time=0.128 ms
64 bytes from container3.mynet (172.25.3.3): icmp_seq=2 ttl=64 time=0.095 ms
64 bytes from container3.mynet (172.25.3.3): icmp_seq=3 ttl=64 time=0.091 ms
64 bytes from container3.mynet (172.25.3.3): icmp_seq=4 ttl=64 time=0.097 ms
#訪問container1失敗
[root@b4737767449c /]# ping -w 4 container1
ping: container1: Name or service not known
#訪問container1的IP地址正常
[root@b4737767449c /]# ping -w 4 172.17.0.4
PING 172.17.0.4 (172.17.0.4) 56(84) bytes of data.
64 bytes from 172.17.0.4: icmp_seq=1 ttl=64 time=0.209 ms
斷開網絡與移除網絡
斷開網絡
container3斷開網絡後將無法與container3通信
root$ docker network disconnect mynet container3
#進入container2
root$ docker attach container2
#未斷開網絡mynet前ping正常
[root@b4737767449c /]# ping container3
PING container3 (172.25.3.3) 56(84) bytes of data.
64 bytes from container3.mynet (172.25.3.3): icmp_seq=1 ttl=64 time=0.111 ms
64 bytes from container3.mynet (172.25.3.3): icmp_seq=2 ttl=64 time=0.098 ms
#斷開網絡mynet後ping操作失敗
[root@b4737767449c /]# ping container3
ping: container3: Name or service not known
移出網絡
移除網絡要求網絡中所有的容器關閉或斷開與此網絡的連接時,才能夠使用移除命令:
#斷開最後一個連接到mynet網絡的容器
root$ docker network disconnect mynet container2
# 移除網絡
root$ docker network rm mynet
mynet
創建mysqlA及mysqlB容器時指定network參數
docker run -p 1306:3306 --name mysqlA --network my_net --network-alias mysqlA -v $PWD/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.22
docker run -p 2306:3306 --name mysqlB --network my_net --network-alias mysqlB -v $PWD/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.22