docker网络介绍net

docker 几种网络模式

  • bridge模式
    使用–net=bridge参数指定网络模式,docker的默认模式就是bridge模式,默认选择bridge的情况下,容器启动的时候会通过DHCP获取一个ip地址,这可能不是我们想要的,在centos系统下,可以通过pipework脚本对容器分配固定ip,(这个ip可以和宿主机同网段)。
    pipework缺陷:容器重启后 IP 设置会自动消失,需要重新设置。
  • host模式
    使用–net=host参数指定网络模式。
    共享宿主机的网络设置
  • none模式
    使用–net=none参数指定网络模式
    创建的容器没有网络设置,只有lo回环网络设置
  • container模式
    使用–name=container:容器名称 or 容器id参数指定网络模式。
    该模式是指创建新容器时,可以通过该参数指定其和一个已存在的网络容器共享一个network namespace。如下图所示,黄色容器的网卡共享左边绿色容器的,因此不会拥有自己独立的ip,而是会共享左边容器的ip和端口范围。两个容器间通过lo进行通信。
    在这里插入图片描述

常用基本命令

  • 查看docker网络

docker network ls

在这里插入图片描述默认创建3种网络,分别为bridge、host、none。

  • 查看完整的网络id

docker network ls --no-trunc

在这里插入图片描述

  • 创建网络,默认为bridge模式

docker network create van

在这里插入图片描述

  • 删除docker网络

docker network rm van

在这里插入图片描述

  • 查看网络详细信息

docker network inspect bridge

在这里插入图片描述

  • 将正在运行的容器连接到指定的网络

docker network connect 网络名 正在运行的容器

  • 容器启动时设置网络

docker run -itd --network=网络名 即将启动的容器

  • 指定容器的ip地址

docker network connect --ip 10.10.10.10 网络名 容器

  • 删除所有无用的网络

docker network prune

  • 强制断开容器的网络连接

docker network disconnect 网络名 容器

实战

我们启动两个centos的镜像,分别为c1、c2

docker run -it --name c1 mycentos:1.5 /bin/bash
docker run -it --name c2 mycentos:1.5 /bin/bash

  • c1的网络设置如下所示
    在这里插入图片描述

  • c2的网络设置如下所示在这里插入图片描述

  • 在c1里面ping c2的网络地址是可以ping通的,如下所示
    在这里插入图片描述

  • 在c2里面ping c1的网络地址是可以ping通的,如下所示在这里插入图片描述

  • 此时我们先关闭c1、在创建容器c3、最后启动c1,观察下c1和c3的网络配置

#关闭c1
docker stop c1
#创建c3的指令
docker run -it --name c3 mycentos:1.5 /bin/bash
#在启动c1
docker start c1

  • 查看c3的网络配置
    在这里插入图片描述

  • 查看c1的网络配置
    在这里插入图片描述

  • 我们可以发现原先c1的ip已经被c3占用了,c1的ip被分配为173.17.0.5。
    这种情况下我们如果通过指定ip的方式去访问对应的中间件的话(如mysql、redis),就有可能会出现当容器重启时,ip发生变更而导致无法正常访问的场景。

如何解决呢,我们可以通过配置自定义网络、通过服务名的方式访问,如下所示

  • 首先我们先关闭并删除对应的容器(c1、c2、c3)
  • 创建自定义docker网络

docker network create van_network

  • 创建容器c1、c2、c3

docker run -it --name c1 --network=van_network mycentos:1.5 /bin/bash
docker run -it --name c2 --network=van_network mycentos:1.5 /bin/bash
docker run -it --name c3 --network=van_network mycentos:1.5 /bin/bash

  • 在c3中分别ping c2 和 c1的容器
    可以发现都可以ping的通。
    在这里插入图片描述
  • 当我们c2容器先关闭在启动,ip发生变更之后。在c3容器中访问c2,观察是否可以正常访问
    可以发现虽然c2的ip从172.21.0.3 变更成172.21.0.5,但是我们通过容器名称仍然可以正常访问成功。
    自定义网络本身就维护好了主机名和IP的对应关系,也就是IP和域名都能联通

在这里插入图片描述

  • 如果我们想给容器分配一个固定的ip,那么我们可以通过pipework给现有容器配IP地址。
# 安装pipework。如果没有安装,可以通过以下命令克隆pipework的GitHub仓库并将其脚本复制到/usr/bin目录下
git clone https://github.com/jpetazzo/pipework.git
cp pipework/pipework /usr/bin/
# 运行pipework为容器指定网络配置。首先,找到你的Docker容器的名字或ID,然后运行pipework
# 以下是一个示例命令,将容器c1配置在192.168.157.2 /24网络上,并设置静态IP192.168.157.160
#pipework 网桥名 容器实例 ID 分配给容器的 IP/掩码@网关
pipework br0 c1 192.168.157.160/24@192.168.157.2 
  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值