docker教程-高级篇

文章目录

概述

本文为个人学习笔记,内容整理自B站尚硅谷周阳老师的docker教程视频,由于工作需要,本文仅整理高级篇部分关于docker network的部分66-77小节的视频,更多高级篇内容详见教程,原视频请点击这里,docker基础篇教程请点击这里

2023年5月26日更新高级篇docker network部分,未完待续…

docker network

1. 简介

启动docker,在宿主机上查看网络配置(可以使用ifconfig命令也可以使用ip addr命令),会发现网络配置中多出来一个docker0的虚拟网桥,在内核层连通了其他物理机或虚拟网卡,这就将所有容器和本地主机都放在同一个物理网络,用来实现宿主机与容器以及容器与容器之间的网络通信

在这里插入图片描述

2. 常用命令

(1)创建网络,常用于自定义网络模式中,默认使用网桥模式

docker network create 网络名称

(2)删除网络

docker network rm 网络名称

(3)删除所有无效不占用的网络

docker network prune 网络名称

(4)查看网络源数据

docker network inspect 网络名称

(5)查看当前网络

docker network ls

(6)将容器连接到某个网络上

docker network connect [options] 网络名称 容器名称

(7)将容器从某个网络上断开连接

docker network disconnect [options] 网络名称 容器名称

实验一:创建网络mytest,新建容器u1配置该网络,在容器停止运行的情况下删除网络后,启动容器会失败,配置容器的网络断开mytest网络的配置,重新配置容器的网络为bridge模式,启动容器成功

在这里插入图片描述

3. 作用

(1)实现容器间的互联和通信以及端口映射
(2)容器ip变动时候可以通过容器名直接网络通信而不受到影响(具体看4.5小节)

4. 网络模式类型

4.1 bridge模式

该模式下会给每个容器独立分配ip,并将容器连接到docker0虚拟网桥,该模式是容器网络配置的默认模式。使用--network bridge命令指定bridge模式

在这里插入图片描述

如上图所示,在bridge模式下,宿主机和容器之间,容器与容器之间,通信都需要通过docker0网桥

(1)使用桥接模式时,会在宿主机中虚拟一个网桥docker0,docker启动一个容器时会根据网桥docker0的网段分配给容器一个ip地址,成为container-ip,同时网桥docker0是每个容器的默认网关。同一宿主机内的容器都接入同一个网桥docker0,这样容器之间就能够通过容器的container-ip直接通信

(2)网桥docker0类似一个交换机有多个接口,每个接口都叫veth,在本地主机和每一个容器都会创建一个虚拟接口eth0,他们通过网桥docker0彼此联通,这样一对接口叫veth pair

实验二:以后台运行方式创建ubuntu容器后,查看容器状态发现容器没有运行,再次启动ubuntu容器后查看容器状态发现容器依旧没有运行

(一个小坑,若ubuntu以后台运行方式创建实例,则会在创建的同时被docker杀掉,如下图所示)

在这里插入图片描述

实验三:创建两个ubuntu容器u1和u2,u1不指定网络配置模式,u2指定网络配置模式,创建后查看u1和u2的网络配置情况和宿主机的网络配置情况,发现u1和u2都是bridge网络模式,并且宿主机网络配置情况会多出两个端口对应情况,测试u1和u2容器的ping通情况,测试宿主机和u1和u2容器的ping通情况

在这里插入图片描述

查看u1和u2的网络配置信息,发现未指定网络配置的u1使用了默认模式,bridge

在这里插入图片描述

在ubuntu容器实例u1和u2中使用ip、ifconfig、ping命令时,需要使用apt-get进行安装,看这里

查看宿主机网络配置,发现多了两个veth和eth0对应端口的匹配(veth是网桥docker0的接口,eth0是容器上虚拟网卡的接口)

在这里插入图片描述

查看u1和u2的网络配置,发现各自多了一个veth和eth0的端口匹配

在这里插入图片描述

在这里插入图片描述

u1和u2能够相互ping通

在这里插入图片描述

宿主机能够ping通u1和u2

在这里插入图片描述

实验四:创建两个ubuntu容器u1和u2,查看ip地址然后删除容器u2,创建容器u3,查看ip地址,发现之前分配给u2的ip地址现在分配给了u3,测试u1和u3基于ip的ping通情况

使用实验三创建的ubuntu容器u1和u2,查看ip

在这里插入图片描述

删除容器u2,创建容器u3,查看ip,发现之前分配给u2的ip地址现在分配给了u3,说明容器的ip地址分配是动态变化的,因此在生产情况下基于bridge的网络模式不能基于ip地址来实现网络通信,要使用容器名来实现通信才比较合理,而自定义网络模式则提供了基于容器名的网络通信,详见4.5

在这里插入图片描述

u1和u3能够相互ping通
在这里插入图片描述

4.2 host模式

该模式下不会给容器分配独立的ip地址,而是共用宿主机的ip地址与外界通信

在这里插入图片描述

实验五:创建网络配置为host模式的ubuntu容器,查看其ip情况

以host模式创建容器u1,查看ip,发现和宿主机执行ifconfig命令的返回界面一模一样,ip地址也相同

在这里插入图片描述

4.3 none模式

该模式下不会给容器分配ip地址等网络配置,查看ip信息只会有一个本地回环地址,网络配置需要自己进行配置,生产环境中基本不用这种模式

在这里插入图片描述

4.4 container模式

该模式下容器的网络配置会和指定的容器的网络配置相同,但是这种模式下有一个坑,当某些容器占用了指定端口后,再新建一个容器使用container模式与该容器共享网络配置时,会导致端口冲突

在这里插入图片描述

使用以下命令指定container模式下共享网络配置的容器

--network=container:容器实例名称

实验六:bridge模式新建一个ubuntu容器u1,container模式新建一个ubuntu容器u2共享u1的网络配置,查看网络配置情况,容器u1停止运行,进入容器u2查看网络配置情况

在这里插入图片描述

在这里插入图片描述

4.5 自定义模式

该模式下创建容器时需要指定自己创建的网络,可以实现使用容器名进行通信,原理是自定义模式下将容器ip和容器名绑定在一起了,因此不管ip地址如何变化,只要容器名不变,就可以实现通信,在生产环境中较为常见

实验七:创建自定义网络mynetwork1和mynetwork2,创建ubuntu容器u1和u2使用mynetwork1自定义网络,创建ubuntu容器u3使用mynetwork2自定义网络,测试三者的ping通情况,删除u2,再创建u3使用network1,再创建u2使用network1,查看网络情况,此时u2的ip会改变,测试u1与u2的ping通情况

在这里插入图片描述

容器u1能够ping通在同个自定义网络的容器u2,但不能ping通在不同个网络的容器u3

在这里插入图片描述

容器u2能够ping通在同个自定义网络的容器u1,但不能ping通在不同个网络的容器u3

容器u3不能ping通在不同个网络的容器u1和u2

在这里插入图片描述

删除u2,使用mynetwork1网络创建u4,发现u4会使用了u2的ip,再度使用mynetwork1创建u2时,会发现u2此时的ip发生了变化,但是这并不妨碍u1使用容器名u2来ping通u2,这便是使用自定义网络模式的好处!

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值