欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

docker网络、容器间互联互通

程序员文章站 2022-07-01 11:24:16
...

在安装docker时,默认会自动创建三个网络,bridge(默认使用)、none、host

下面分别介绍三种网络:
host:直接使用物理机的IP和端口,容器没有自己的网卡

none:关闭网络功能

bridge:为每个容器分配IP地址,并将容器网卡连接到docker0虚拟网桥上,通过iptables的nat表与主机通信

创建自定义网络 :

# 自定义网络名称为localnetwork,IP地址段为172.20.0.0/24
[aaa@qq.com ~]# docker network create --subnet 172.20.0.0/24 localnetwork
ac4f294a95f7f8787e38eef0b466ec69c35cb04157081240e1c6b37ef4b91567
[aaa@qq.com ~]# docker network ls
NETWORK ID          NAME                    DRIVER              SCOPE
e28aeaffefe5        bridge                  bridge              local
29c17110817b        host                    host                local
ac4f294a95f7        localnetwork            bridge              local
26f1293fa81e        none                    null                local

大致的原理图如下所示:
docker网络、容器间互联互通

docker有关网络的一些命令:

# 查看一个网络的信息
docker network inspect [OPTIONS] NETWORK [NETWORK...]
# 将一个容器连接到网络
docker network connect [OPTIONS] NETWORK CONTAINER
# 使容器与一个网络断开
docker network disconnect [OPTIONS] NETWORK CONTAINER
# 删除一个/多个网络
docker network rm NETWORK [NETWORK...]

在docker run命令中

–network 指定网络

–ip 在自定义网络中指定容器IP地址

两个容器如在同一个网络中,通过IP地址是可以实现互相访问的,但容器间通信还可以使用容器名互相通信,而不是使用IP地址

docker run --rm --name test1  -it centos:7 bash

创建名为test1的容器

docker run --rm -it --link test1:test1 centos:7 bash

在创建一个容器,docker run命令中加入–link参数,把test1容器做了主机映射

在容器中查看hosts文件

cat /etc/hosts
……
172.17.0.2	test1 c68109ea44eb

ping test1试试

ping test1
PING test1 (172.17.0.2) 56(84) bytes of data.
64 bytes from test1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.095 ms
64 bytes from test1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.056 ms
^C

能ping通!实现容器间通信

若实现跨主机间的容器通信,可移步到我的博客 openswtich实现跨主机通信