首页 > 数据库 > 数据库开发技术 > 健哥带你细致学习Docker - 自定义网络

最近有几个已经就业的小伙伴,过来问千锋健哥关于Docker网络配置的问题,他们在实际开发中还是有些疑问。关于Docker网络这一块的内容确实很多,为了让大家搞清楚这个问题,健哥准备搞几篇系列文章,来为各位小伙伴解惑。这次健哥带来的是Docker网络的自定义网络模式,接下来我们直接上干货!!!
Docker容器和服务之所以强大的原因之一,是可以将它们连接在一起,或者将它们连接到非Docker的工作负载上。而Docker容器和服务甚至都不需要知道它们部署在Docker容器上。无论Docker主机是运行在Linux、window上,或者两者混合运行,都可以使用Docker以与平台无关的方式来管理它们。
而这一切的基础,都是缘于Docker网络提供的强大功能和良好设计!
关注java架构栈,干货天天都不断哦!
一. 操作环境
我们先说一下运行所需要的环境,如下:
centos 7.x版本
docker版本:Docker version 20.10.18, build b40c2f6
xshell 7
二. Docker network 常用命令
我们先来看看Docket中提供的常用network命令。
1.查看docker network帮助手册
[root@hecs-215393 ~]# docker network --help # 查看docker network 帮助手册
Usage: docker network COMMAND
Manage networks
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
Run 'docker network COMMAND --help' for more information on a command.
[root@hecs-215393 ~]# 2.列出docker网络
[root@hecs-215393 ~]# docker network ls # 列出docker网络
NETWORK ID NAME DRIVER SCOPE
5b15d96cf179 bridge bridge local
12bf219add93 host host local
66b6768156e6 none null local
[root@hecs-215393 ~]# 3.通过docker network create创建一个网络
[root@VM-8-11-centos ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
52f8e50a864d bridge bridge local
5534ad5d6eca host host local
d60aa65de36e none null local
# 创建一个docker网络
[root@VM-8-11-centos ~]# docker network create qf
6fc2499a6dd26591e1b61f1d20e3c9c61f4b64e3de77b7a832be0f68572ec279
# 再次查看一下当前的网络状态
[root@VM-8-11-centos ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
52f8e50a864d bridge bridge local
5534ad5d6eca host host local
d60aa65de36e none null local
6fc2499a6dd2 qf bridge local
[root@VM-8-11-centos ~]# 
4.查看qf网络的详细信息
[root@VM-8-11-centos ~]# docker network inspect qf
[
{
"Name": "qf",
"Id": "6fc2499a6dd26591e1b61f1d20e3c9c61f4b64e3de77b7a832be0f68572ec279",
"Created": "2022-10-09T16:41:48.505578412+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.19.0.0/16",
"Gateway": "172.19.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
[root@VM-8-11-centos ~]# 三. Docker网络的作用
在开始学习Docker网络用法之前,我们再来了解一下Docker网络的作用,主要作用如下:
1. Docker网络可以负责容器间的相互连接和通信,以及端口映射;2. 当容器`ip`地址发生更改时,可以通过服务名称进行网络通信,不会因为`ip`的更改导致服务不可用。
四. 网络模式
Docker的网络有以下几种网络模式。
| 网络模式 | 说明 |
bridge, 虚拟网桥, 默认模式 |
每一个容器有独立的ip, 并将容器连接到docker0网桥上 |
host |
使用宿主机的ip和端口号, 容器不会虚拟出自己的网卡、配置ip |
none |
有独立的network namespace,但是并未对其进行任何网络设置 |
container |
和一个指定的容器共享ip和端口号, 不会虚拟出网卡、配置ip等操作. |
五. 自定义网络
当两个容器相互调用的时候,如果直接通过ip来通信,由于容器内的ip地址可能会发生变化,此时会导致相互调用的服务不可用。
1.举例说明
我们首先要准备两台centos容器,网络模式都为bridge。

进入mycentos01容器,查看网络情况。

进入mycentos02容器,查看网络情况。

在mycentos02中ping mycentos01。

在mycentos01中ping mycentos02。

2.使用服务名称,当前不可通信
当前情况下,两台容器通过ip地址可以通信,但是ip地址会发生更改,导致两个服务之间不能通信异常,所以一般情况下必须使用「服务名称」作为通信的方式。容器中所谓的服务名称就是「容器的名称」。我们可以将上述测试更改为容器内通信彼此的容器名称「服务名称」来测试通信情况,如下所示:

如果想要通过服务名称「容器名称」来实现通信,此时必须得使用「自定义网络」。
3.自定义网络
新创建一个网络。




—network=qf_network,将容器的网络设置为自定义网络。进入容器互相通过「服务名称」ping一下。创建两个centos容器,分别将网络模式指向自定义网络.
4.结论
在开发当中,最常用使用的一种方式就是自定义网络,自定义网络本身就维护好了主机名称与ip地址的映射关系。
五. 总结
各位小伙伴,今天千锋健哥为大家带来的自定义网络模式就是这些内容了,是不是很容易理解呢?
docker网络作为整个docker体系中极为重要的一个知识点,在生产中经常被用到。
自定义网络,可以通过服务名称「容器名称」进行容器间的通信。自动处理了容器名称与ip地址的映射关系,这样使得容器间通信更为可靠和容易。至于其他模式,如果各位小伙伴想要了解,敬请继续期待千锋健哥本系列的其他文章哦。
扫码咨询了解课程详情,获取课程配套资料!

扫码或者点击文末左下角【阅读原文】快速进入学习!

点击【阅读原文】,免费开始学习Docker视频课程!
原文作者:Java架构栈;如有侵权,请联系管理员删除。