Docker网络配置

Posted 7788it

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker网络配置相关的知识,希望对你有一定的参考价值。

在安装好Docker后,其默认提供了三种网络模式:bridge、host和none。其中bridge是Docker默认的网络模式,在该模式下,容器拥有自己的IP namespace,容器可以通过宿主机上的docker0网桥与别的容器、宿主机或者外部网络进行通信。此外我们还可以通过端口映射的方式让外部环境也能访问到容器内部。

Docker默认的网络模式如下图所示:

 

技术图片

bridge网络模式

Docker三种网络模式:

技术图片

下面我们通过busybox来进行演示。

BusyBox 是一个集成了一百多个最常用 Linux 命令和工具(如 cat、echo、grep、mount、telnet 、ping、ifconfig 等)的精简工具箱,它只需要几 MB 的大小,很方便进行各种快速验证,被誉为“Linux 系统的瑞士军刀”。

下载busybox镜像:

技术图片

通过该镜像创建两个容器test1和test2:

技术图片

使用docker network inspect bridge命令查看bridge网络详情:

技术图片

可以看到test1和test2都连接到了bridge(因为是Docker默认的网络模式),并且test1内部IP为172.17.0.2,test2内部IP为172.17.0.3。

我们看下在test1容器内部是否可以ping通test2的IP:

技术图片

可以看到是没问题的。

看下test1内部ping宿主机IP(192.168.33.10)和外部网络是否可行:

技术图片

link

我们可以在创建容器的使用使用--link来让容器间的网络建立映射关系。

我们删除test2容器,重新创建test2容器,并且让其和test1建立网络映射关系:

技术图片

这样我们就可以在test2容器内部使用ping test1ping通test1网络了:

技术图片

创建自定义网桥

我们可以通过docker network create来创建自定义的网桥,比如我们创建一个新的网桥,名称为my-bridge:

技术图片

模式选择的是bridge。

我们让test1和test2容器都连接到这个新的网桥上(也可以在创建容器的时候使用--network来指定需要连接的网桥):

技术图片

查看my-bridge详情:

技术图片

可以看到test1和test2都连接上来了。

使用自定义网桥有个明显的好处是,容器间可以通过容器名称进行网络通信(无需在创建容器的时候使用--link来指定)。我们在创建test1容器的时候并没有使用--link test2来连接test2,我们看看在连接到my-bridge后,test1内部是否可以通过ping test2ping通test2 IP:

技术图片

可以看到是没问题的。

端口映射

在宿主机上我们是无法访问Docker容器内部网络的,不过我们可以通过端口映射的方式来实现这个需求。

mysql为例子,我们拉取MySQL镜像:

docker pull mysql:5.7.25

 

在创建MySQL容器的时候可以使用-p-P让容器暴露的端口和宿主机的端口进行映射:

技术图片

-e指定环境变量。

-p 3306:3306(冒号前面的端口为宿主机端口,后面的端口为容器端口)的意思是,让容器暴露的3306端口映射到宿主机的3306端口,这样我们就可以在宿主机外部通过192.168.33.10:3306来连接MySQL容器了:

技术图片

Docker的host和none网络模式使用较少这里就不介绍了。

参考??:https://docs.docker.com/v17.09/engine/userguide/networking/#set-the-environment-variables-manually

以上是关于Docker网络配置的主要内容,如果未能解决你的问题,请参考以下文章

Docker 网络配置

Docker 网络配置

docker系列之网络配置

Docker6种网络配置详解,网络模式应该这么选

ovs+docker网络配置

Docker网络配置Docker部署分布式项目