Docker从认识到实践再到底层原理(八)|Docker网络

前言
那么这里博主先安利一些干货满满的专栏了!
首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。
然后就是博主最近最花时间的一个专栏《Docker从认识到实践再到底层原理》希望大家多多关注!
第八章-网络
1. Docker为什么需要网络
参考:比特就业课
容器的网络默认与宿主机及其他容器都是相互隔离, 但同时我们也要考虑下面的一些问题, 比如
- 多个容器之间是如何通信的
- 容器和宿主机是如何通信的
- 容器和外界主机是如何通信的
- 容器中要运行一些网络应用(如 nginx、web 应用、数据库等),如果要让外部也可以访问这些容器内运行的网络应用应该如何实现
- 容器不想让它的网络与宿主机、与其他容器隔离应该如何实现
- 容器根本不需要网络的时候应该如何实现
- 容器需要更高的定制化网络(如定制特殊的集群网络、定制容器间的局域网)应该如何实现
上述的这些问题都需要我们对容器的网络进行合理的管理才能解决,这就体现出了容器网络管理的重要性。
2. Docker网络架构模型
CNM

Docker 网络架构采用的设计规范是 CNM(Container Network Model)。CNM 中规定了 Docker 网络的基础组成要素:Sandbox、Endpoint、Network。
3. 常见Docker网络类型
3.1 bridge 网络
bridge 驱动会在 Docker 管理的主机上创建一个 Linux 网桥。默认情况下,网桥上的容器可以相互通信。也可以通过 bridge 驱动程序配置,实现对外部容器的访问。Docker 容器的默认网络驱动.当我们需要多个容器在同一个 Docker 主机上通信时,桥接网络是最佳选择。
3.2 host 网络
对于独立容器,移除容器和 Docker 主机之间的网络隔离,并直接使用主机的网络。当网络堆栈不应该与 Docker 主机隔离,但是希望容器的其他资源被隔离时,主机网络是最佳选择。
3.3 container 网络
这个模式指定新创建的容器和引进存在的一个容器共享一个网络 ,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 ip,而是和一个指定的容器共享 ip,端口等,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。
3.4 none 网络
Docker 容器拥有自己的 Network Namespace,但是,并不为 Docker 容器进行任何网络配置。也就是说,这个 Docker 容器没有网卡、IP、路由等信息。容器完全网络隔离。
3.5 overlay 网络
借助 Docker 集群模块 Docker Swarm 搭建的跨 Docker Daemon 网络。将多个Docker 守护进程连接在一起,使集群服务能够相互通信。当我们需要运行在不同Docker 主机上的容器进行通信时,或者当多个应用程序使用集群服务协同工作时,覆盖网络是最佳选择。
4. 命令详解
4.1 命令清单
| 命令 | 功能 |
|---|---|
docker network create |
创建网络 |
docker network connect |
连接网络 |
docker network disconnect |
断开网络 |
docker network ls |
列出网络 |
docker network prune |
删除不使用的网络 |
docker network inspect |
查看网络详情 |
docker network rm |
删除1个或多个网络 |
4.2 docker network create

一创建出来就自带了三个网络。
docker network create [OPTIONS] NETWORK
关键参数。
-d, --driver : 网络驱动
--gateway : 网关地址
--subnet : 表示网段的 CIDR 格式的子网
--ipv6 : 启用 ipv6

默认给的就是bridge驱动。
4.3 docker network inspect
docker network inspect [OPTIONS] NETWORK [NETWORK...]
参数
-f, --format : 指定格式

[
{
"Name": "bridge",
"Id": "c628e2b0d777ee8674106b75d24bc0ba856047abced6d2ad84e101611461092a",
"Created": "2023-09-01T20:57:06.849887313+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
4.4 docker network connect
于将容器连接到网络。可以按名称或 ID 连接容器。 一旦连接,容器可以与同一网络中的其他容器通信。
docker network connect [OPTIONS] NETWORK CONTAINER
关键参数。
--ip : 指定 IP 地址
--ip6 : 指定 IPv6 地址
实操。
启动一个容器,然后看他的ip。

连上网,ifconfig就可以看到了。

4.5 docker network disconnect
docker network disconnect [OPTIONS] NETWORK CONTAINER
参数。
-f : 强制退出

4.6 docker network prune
删除不使用的网络。
docker network prune [OPTIONS]
参数。
-f , --force : 不提示
4.7 docker network rm
删除一个或多个网络。
docker network rm NETWORK [NETWORK...]
参数。
-f : 强制退出
4.8 docker network ls
遍历所有网络。
-f, --filter : 指定过滤条件
--format : 指定格式
--no-trunc : 不截断
-q, --quiet : 仅仅显示 id
5. Docker Bridge 网络
5.1 bridge网络详解
5.1.1 什么是bridge网络
Docker Bridge 网络采用内置的 bridge 驱动,bridge 驱动底层采用的是 Linux 内核中 Linux bridge 技术。就网络而言,bridge 网络是在网络段之间转发流量的链路层设备,而网桥可以是在主机内核中运行的硬件设备或软件设备;就 Docker 而言,桥接网络使用软件网桥 docker0,它允许连接到同一网桥网络的容器进行通信,同时提供与未连接到该网桥网络容器的隔离。
5.1.2 操作案例一
启动两个镜像。

在第一个容器ping第二个,在第二个容器ping第一个。


这两个就是两个容器的ip地址。

第一个ping第二个,ping成功了。

第二个ping第一个,也ping到了。
5.1.3 操作案例二
默认情况下,如操作案例一所示。我们默认创建的容器都会连接在docker0这个bridge上。但是我们也可以用我们自定义的bridge来通信。
先创建一个网络。

看一下这个桥的信息。

启动两个容器。

可以ping通。

5.2 DNS解析
Docker 自定义桥接网络是支持通过 Docker DNS服务进行域名解析的, 也就是说我们可以直接使用容器名进行通信,因为 DNS 服务可以解析容器名到 IP 地址的映射, 但是默认的 bridge网络是不支持 DNS 的。
实验很简单,就是用容器名字来ping就行了,其他步骤和#5.1的是一样的。
结论:
- 默认的桥不支持这个DNS
- 自定义的桥是支持DNS的
5.3 端口的暴露和转发
先启动一个nginx容器。

6. Docker Host 网络
6.1 什么是host网络

意思就是,根本就不需要虚拟的网卡,直接连宿主机的网卡,直接用宿主机的。
6.2 操作案例
创建两个容器,分别用不同的网络类型。
docker run -itd --name b1 busybox:1.36.0
这个默认用的是bridge网络。
docker run -itd --name b2 --network host busybox:1.36.0
这个指定用host网络。

分别查看这两个容器网络的差异。
我们分别查看这两个网络的信息。

第一个容器里面只查到两个。

第二个容器里面能查到很多个,毕竟第二个容器直接连了宿主机的网卡。
7. Docker Container 网络

这种网络也是用别人的网卡,只不过是,使用的是另外一个容器的网卡(虚拟的),而不是使用宿主机的网卡。
7.2 操作案例
docker run -itd --name b2 --network container:b1 busybox:1.36.0
b1和上面一样,b2就是这样创建。

发现两个的私网ip是一样的。
如果此时直接把b1停掉,b2会怎样呢?

发现此时外部的ip直接没了。
8. Docker None 网络
8.1 none 网络介绍
none 网络就是指没有网络。挂在这个网络下的容器除了 lo(本地回环),没有其他任何网卡。
反正就是没有网络。
8.2 操作案例

Docker从认识到实践再到底层原理(八)|Docker网络的更多相关文章
- Docker 介绍以及其相关术语、底层原理和技术
https://ruby-china.org/topics/22004 Docker是啥 Docker是一个程序运行.测试.交付的开放平台,Docker被设计为能够使你快速地交付应用.在Docker中 ...
- Docker从入门到实践
一般说来 SPA 的项目我们只要启一个静态文件 Server 就可以了,但是针对传统项目就不一样了,一个项目会依赖很多服务端程序.之前我们的开发模式是在一台开发机上部署开发环境,所有人都在这台开发机上 ...
- docker学习笔记(1)概述、原理学习、常用命令
一.Docker概述 Docker是基于Go语言实现的云开源项目,诞生于2013年初,目前主流的Linux操作系统已支持Docker,如Redhat RHEL6.5/CentOS6.5.Ubuntu ...
- [CoreOS 转载] CoreOS实践指南(七):Docker容器管理服务
转载:http://www.csdn.net/article/2015-02-11/2823925 摘要:当Docker还名不见经传的时候,CoreOS创始人Alex就预见了这个项目的价值,并将其做为 ...
- Docker Daemon 参数最佳实践
1. Docker Daemon 配置参数 限制容器之间网络通信 在同一台主机上若不限制容器之间通信,容器之间就会暴露些隐私的信息,所以推荐关闭 docker daemon –icc=false 使用 ...
- Docker 从入门到实践(一)Docker 简介
读前须知:本教程大部分都是[Docker 从入门到实践 ]一书的知识,有兴趣可以直接观看书籍.同时,借鉴书籍的知识,如有侵权,请告知我,我会删除处理.谢谢. 一.什么是 Docker? Docker ...
- Kubernetes+Docker+Istio 容器云实践
随着社会的进步与技术的发展,人们对资源的高效利用有了更为迫切的需求.近年来,互联网.移动互联网的高速发展与成熟,大应用的微服务化也引起了企业的热情关注,而基于Kubernetes+Docker的容器云 ...
- Docker从入门到实践(2)
二.基本概念 Docker 镜像 我们都知道,操作系统分为内核和用户空间.对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持.而 Docker 镜像(Image),就相 ...
- Docker底层原理介绍
1.docker介绍 1.1什么是docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻 ...
- Docker — 从入门到实践PDF下载(可复制版)
0.9-rc2(2017-12-09)修订说明:本书内容将基于DockerCEv17.MM进行重新修订,计划2017年底发布0.9.0版本.旧版本(Docker1.13-)内容,请阅读docker-l ...
随机推荐
- 第五届蓝桥杯(2014)C/C++大学A组省赛题解
第一题.猜年龄 小明带两个妹妹参加元宵灯会.别人问她们多大了,她们调皮地说:"我们俩的年龄之积是年龄之和的6倍".小明又补充说:"她们可不是双胞胎,年龄差肯定也不超过8岁 ...
- Hbase结构和原理
Hbase是什么? HBase是一种构建在Hadoop HDFS之上的分布式.面向列的存储系统.在需要实时读写.随机访问超大规模数据集时,可以使用HBase. HBase依赖Zookeeper,默认 ...
- h5响应式方案设计
- 基于Java 的商城网站系统设计与实现(8000字论文)
摘要 随着我国经济活力的不断提升和互联网的快速发展,信息的重要性正在显现出来.电子商务作为经济发展的重要一环取得了突飞猛进的发展.由于具有高效便捷的优点,网上购物已经成为一种不可或缺的新型生活方式,近 ...
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2024.01.02)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- 痞子衡嵌入式:我拿到了2023年度电子星球(eestar)年度黑马作者
今天收到了「电源网旗下电子星球」 颁发的 2023 年度黑马作者奖牌,这是痞子衡继 2019 年和与非网合作后的第二个媒体平台颁发的奖项.这个奖牌做得很有质感,拿在手里沉甸甸的.此外与奖牌配套的还有一 ...
- [转帖]浏览器HTTP请求并发数和TCP连接的关系
https://cloud.tencent.com/developer/article/1518678 面试题目(头条): 网页中的图片资源为什么分放在不同的域名下? 浏览器与服务器建立一个TCP连接 ...
- [转帖]Mnesia reports that this RabbitMQ cluster has experienced a network partition.
一 问题描述 双节点RabbitMQ集群发生了脑裂,节点日志报错: [error] <0.6318.0> Mnesia(rabbit@pc2): ** ERROR ** mnesia_ev ...
- [转帖]How to Resolve ORA-3136 Inbound Connection Timed Out
https://logic.edchen.org/how-to-resolve-ora-3136-inbound-connection-timed-out/#:~:text=ORA-03136%3A% ...
- [转帖]Linux命令(51)——ipcs命令
https://cloud.tencent.com/developer/article/1380589 1.命令简介 ipcs命令用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表.共享 ...