六、Docker容器的网络连接

一、Docker 容器的网络基础

1.docker0(Lunix的虚拟网桥)

1).查看

ifconfig

在这里插入图片描述

在这里插入图片描述

2).定义

(1).前言

通过ifconfig查看docker0的网络设备,docker守护进程就是通过docker0为docker的容器提供网络连接的各种服务。
docker0是Linux虚拟网桥。
Linux虚拟网桥的特点:

  • 可以设置IP地址
  • 相当于拥有一个隐藏的虚拟网卡
    docker0的地址划分:
  • IP:172.17.0.1 子网掩码: 255.255.0.0
  • MAC: 02:42:c7:62:53:e0
  • 总共提供65534个地址
    docker守护进程在一个容器启动时,实际上它要创建网络连接的两端。一端是在容器中的网络设备,而另一端是在运行docker守护进程的主机上打开一个名为veth*的一个接口,用来实现docker这个网桥与容器的网络通信。
    在这里插入图片描述

(2).centos7 查看网桥设备

brctl show

在这里插入图片描述

(3).案例

1.运行容器

docker run --name centos7  -it centos:7 /bin/bash

在这里插入图片描述

2.查看网络设备

在这里插入图片描述

3.安装查看工具

yum -y install vim   net-tools ifconfig

在这里插入图片描述

4.查看docker 网络设备

在这里插入图片描述

3).自定义docker0

(1).前言

修改默认的配置文件 /etc/docker/daemon.json对Docker进行配置。
如果没有直接创建

扫描二维码关注公众号,回复: 14460291 查看本文章

(2).关闭 docker服务

systemctl stop docker

(3).修改bip

vim /etc/docker/daemon.json
{
"bip":"192.168.10.1/16"
}

在这里插入图片描述

(4).重启docker

systemctl restart docker

在这里插入图片描述

2.自定义docker虚拟网桥

1.查看现有网络情况

docker network ls

在这里插入图片描述

2.新建名为net-test的网桥(只有使用–subnet创建的网络才能指定静态IP)

docker network create --driver bridge --subnet 192.168.10.0/24 --gateway 192.168.10.1 net-test

在这里插入图片描述
报错:Error response from daemon: Pool overlaps with other one on this address space

这是因为新创建的网络自定义的子网ip与已有的网络子网ip冲突。

只需要重新定义子网ip段就行

docker network create --driver bridge --subnet 10.22.1.0/24 --gateway 10.22.1.1  net-test
docker network ls

在这里插入图片描述

3.重新查看网络配置信息:

docker network inspect  网桥名称
docker network inspect net-test

在这里插入图片描述

4.备注信息:

当用ifconfig命令查看的时候,显示的并不是net-test,而是br-ed63c1fd55b9
如需能在ifconfig中显示网桥名称,添加选项com.docker.network.bridge.name

docker network create --driver bridge --subnet 25.168.1.0/24 --gateway 25.168.1.1  net-test1 -o com.docker.network.bridge.name=net-test1

在这里插入图片描述
在这里插入图片描述

5,使用自定义网桥,指定端口启动容器

docker run -it --network=net-test1 -p 8080:80  centos:7 /bin/bash

在这里插入图片描述
在这里插入图片描述

二、Docker 容器的互联

1.允许所有容器互联

1前言

在同一宿主机下,docker的容器是通过虚拟网桥来进行连接的。那么在默认情况下,在同一宿主机中运行的容器都是可以互相连接的。
–icc=true 默认

1).测试 --icc=true 默认允许连接

docker run -it --name cct1 mycentos:1.0
docker run -it --name cct2 mycentos:1.0

其中mycentos:1.0自定义的镜像
在这里插入图片描述
在这里插入图片描述

2.容器的ip地址实际上是一个不可靠的连接,因为它会随着容器的启动而改变。

–link

docker run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE] [COMMAND]

CONTAINER_NAME: 需要连接的容器名字
ALIAS: 在容器中连接的代号(别名随机取)

docker run -it --name cct4    mycentos:1.0
docker run -it --name cct5  --link=cct4:web  mycentos:1.0

在这里插入图片描述
在这里插入图片描述

2.允许特定容器互联解决方案

如果你之前有 Docker 使用经验,你可能已经习惯了使用 --link 参数来使容器互联。随着 Docker 网络的完善,强烈建议大家将容器加入自定义的 Docker 网络来连接多个容器,而不是使用 --link 参数。

通过自定义 虚拟网桥 来实现指定容器间的互联 隔离

参考: 本文的 自定义docker虚拟网桥

docker run -it --rm --name test6 --network net-test mycentos:1.0
docker run -it --rm --name test7 --network net-test  mycentos:1.0

在这里插入图片描述
在这里插入图片描述

3.网络连通(Docker 两个不同网络间实现连通)

1).前言

docker0和自定义网络肯定不通,我们使用自定义网络的好处就是网络隔离。
但是在实际的工作中,比如我们部署了mysql使用了一个网段。部署了tomcat使用了另一个网段,两个网段之间肯定是不能相互连通的,但是tomcat和mysql又需要相互连通,我们就要使用网络连通。原理图如下:
在这里插入图片描述

在没有使用connect命令的情况下,不同网络间的容器是无法进行网络连接的。

2).启动不同网络的容器

(1).启动两个bridge(自带默认)桥接的容器

docker run -it --name tomcat1 tomcat
docker run -it --name tomcat2 tomcat
# 查看容器
docker ps -a

在这里插入图片描述

(2).启动两个mynet(自定义)桥接的容器

网桥创建如下:
docker network create --driver bridge --subnet 10.22.1.0/24 --gateway 10.22.1.1  mynet
docker network ls

在这里插入图片描述

启动两个mynet(自定义)桥接的容器如下:
docker run -it --name tomcat-net-01 --net mynet tomcat
docker run -it --name tomcat-net-02 --net mynet tomcat
# 查看容器
docker ps -a

在这里插入图片描述

3).两个不同网络,容器间互通

1.查看操作语法
docker network connect [OPTIONS] NETWORK CONTAINER
2.实际操作指令
docker network connect mynet tomcat1
3.测试两者间是否互通

tomcat1 ping tomcat-net-01可以ping通!

docker exec -it tomcat1 ping tomcat-net-01

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/q908544703/article/details/126130711
今日推荐