Docker容器互联
简介
1. 概述
- Docker 中存在多个容器时,容器与容器之间经常需要进行通讯,例如nacos访问mysql,redis集群中各个节点之间的通讯。
2. 解决方案
- Docker 中容器与容器之间进行通讯的解决方案一般有两种:
- 第一种:两个容器通过宿主机进行通讯(容器中的端口会映射到宿主机上)
- 第二种:两个容器之间直接通过虚拟网络进行连接,但是需要我们在docker中创建网络。
初始化网络
3. 架构设计
4. 新建网络
- 例如:创建名字为t-net的网络
docker network create -d bridge t-net #t-net为自己起的网络名称 或者 docker network create t-net
- 其中,-d driver,网络类型,默认 bridge。
- 说明,创建好这个网络以后,在网络上添加容器,容器就可以通讯了
5. 查看网络信息
- 列出所有网络
docker network ls
[root@localhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 696ff894799c bridge bridge local d5417c45032f host host local 4a2af720edee none null local 52e138939d16 t-net bridge local
- 查看网络信息
docker inspect 52e #52e 为创建的网络id
[root@localhost ~]# docker inspect 52e [ { "Name": "t-net", "Id": "52e138939d16330d81094c265e10fea1d85eaf534966ef07658d2e1f76154402", "Created": "2021-10-08T10:09:47.436461004+08:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": {} } ]
实现容器互联
6. 创建容器
- 打开终端,基于centos:7这个镜像启动容器,并加入到t-net这个网络
docker run -it --name app1 --network t-net centos:7
- 新开终端执行,基于centos:7这个镜像再启动容器,同时也加入到t-net网络
docker run -it --name app2 --network t-net centos:7
7. 测试网络互通
-
在两个终端中分别执行:
ping app1
ping app2