Docker学习高级篇02-docker网络简介
0x00 复习一下之前的知识
1、用户使用Docker Client与Docker Daemon建立通信,并发送请求给后者
2、Docker Daemon作为Docker架构中的主体部分,首先提供Docker Server的功能使其可以接受Docker Client的请求
3、Docker Engine执行Docker内部的一系列工作,每一项工作都是以一个Job的形式的存在
4、Job的运行过程中,当需要容器镜像时,则从Docker Registry中下载镜像,并通过镜像管理驱动Graph driver将下载镜像以Graph的形式存储。
5、当需要为Docker创建网络环境时,通过网络管理驱动Network Driver创建并配置Docker容器网络环境。
6、当需要限制Docker容器运行资源或执行用户指令等操作时,则通过Execdriver来完成
7、Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。
0x01 docker network是什么?能干嘛?
docker不启动,默认的网络(网卡)情况
virbr0
在Centos7的安装过程中如果有选择相关虚拟化的服务安装系统后,启动网卡时会发现有一个以网桥链接的私网地址的virbr0网卡(virbr0网卡:它还有一个固定的默认IP地址192.168.122.1),是做虚拟机网桥的使用的,其作用是为连接其上的虚拟网卡提供NAT访问外网的功能。
我们之前学习Linux安装,勾选安装系统的时候,附带了libvirt服务才会生成的一个东西,如果不需要可以直接将libvirtd服务卸载。
yum remove libvirt-libs.x86_64
docker启动后,默认的网络(网卡)情况
除了上面说的三个,多出了一个docker0
虚拟网桥
安装完docker后,默认创建的3大网络模式,主要用的是bridge
,勉强用host
,一般不用none
docker network ls
0x02 常用基本命令
docker network --help
docker network create aa_network
docker network ls
docker network inspect aa_network
docker network rm aa_network
通过docker inspect bridge
可以看出来我们的网卡名字默认就是docker0
docker网络能干吗?
现在我们通过一个docker来建立起一个。docker网络管理和容器调用之间的规划。
容器间的互联和通信以及端口映射。容器IP变动时候可以通过服务名直接网络通信而不受到影响。
0x03 docker网络模式分类
总体介绍
网络模式 | 简介 |
---|---|
bridge | 为每一个容器分配、设置IP等,并将容器链接到一个叫docker0 的虚拟网桥,默认为此模式 |
host | 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口 |
none | 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair和网络链接,IP等 |
container | 新创建的容器不会创建自己的网卡和配置自己的IP,而是和一个指定的容器共享IP,端口范围 |
bridge
就相当于30个人用自己的电脑来看电影
host
即30个人去电影院看同一个屏幕的电影
none
几乎不用,没有做任何的配置,需要自己去配置。一般不用。
container
我屏幕坏了,借用同桌的屏幕来看电影。和指定的容器共享IP。
bridge
模式:使用--network bridge
指定,默认使用docker0
host
模式:使用--network host
指定
none
模式:使用--network none
指定
container
模式:使用--network container:NAME
或者容器ID指定
docker network底层ip和容器映射变化
通过 下方命令可以看出两个容器的IP都是唯一的,就是默认bridge
。但是如果这时候其中一个容器坏了,再重新启动一个容器,发现IP还是和之前的一样,还是03。
docker run -it --name=u1 ubuntu /bin/bash
docker run -it --name=u2 ubuntu /bin/bash
docker inspect u1 | tail -n 20
docker inspect u2 | tail -n 20
结论:docker容器内部的ip是有可能发生变化的,所以我们要规划好我们的服务,写好我们的服务。所以某些网络就必须跑在我们指定的网络范围内,例如通过新建一个网络。
docker network create bb_network
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)