版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xianglingchuan/article/details/82800479
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