Docker Networking
- Docker Networking 允许用户创建自己的网络,容器可以通过这个网络互相连接
- 使用 Docker Networking 可完成容器的跨主机通信
相关命令
# 创建docker网络:创建一个新的桥接网络,命名为app,这个命令会返回新创建的网络的网络ID
sudo docker network create app
# 查看新创建的网络
sudo docker network inspect app
# 列出当前系统中的所有网络
sudo docker network ls
# 删除网络
sudo docker network rm app
应用
# 0.创建网络
sudo docker network create app1
# 1.拉取redis镜像
sudo docker pull redis
# 2.基于redis镜像启动两个容器,--net选项表示新容器将会在哪个网络下运行
docker run -d --net=app1 --name redis1 redis
docker run -d --net=app1 --name redis2 redis
# 3.查看app1网络下运行的容器
sudo docker network inspect app1
# 4.进入redis1
docker exec -it redis1 /bin/bash
# 5.在app1网络下的容器都是可以ping通的,主机名与IP的映射由docker自行维护
ping redis2 # 可以ping通
ping redis2.app1 # 可以ping通
# 6.安全退出redis1,进入redis2
docker exec -it redis2 /bin/bash
# 7.在redis2中ping redis1也没问题
ping redis1 # 可以ping通
ping redis1.app1 # 可以ping通
# 由于容器名与IP的映射关系由docker自行维护,因而在应用程序中可使用容器名代替容器IP
# 即使容器重启了,docker会自动更新容器名对应的IP,不会影响应用程序的正确运行
将已有容器连接到Docker网络
# 启动一个容器
sudo docker run -d --name redis3 redis
# 一个容器可以同时隶属于多个Docker网络,可以将redis3加入到app1网络
sudo docker network connect app1 redis3
# 查看app1网络下运行的容器,发现redis3已经加入进来了
sudo docker network inspect app1
# 断开redis3与app1的连接
sudo docker network disconnect app1 redis3
# 查看app1网络下运行的容器,发现redis3已经没了
sudo docker network inspect app1