Docker 网络学习

news2024/12/22 22:41:05

docker的网络模式

当你开始大规模使用Docker时,你会发现需要了解很多关于网络的知识。Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理。然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分。因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求。本文首先介绍了Docker自身的4种网络工作方式,然后介绍一些自定义网络模式。

安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host

模式简介备注
host模式容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口优势:性能高,适用于对网络效率有较高要求,但是对于端口会于宿主机冲突
bridge模式此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信拥有独立隔离的网络
none模式该模式关闭了容器的网络功能,挂在这个网络下的容器除了 lo,没有其他任何网卡在保密闭环的空间中使用,一般不使用
Container模式创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。
自定义网络模式Docker 提供三种 user-defined 网络驱动:bridge, overlay 和 macvlan。overlay 和 macvlan 用于创建跨主机的网络docker network create -d bridge --subnet 172.25.0.0/16 network_name

docker-host网络

11585881740_.pic_hd.jpg

docker-bridge网络

docker默认的网络连接方式为bridge,即桥接模式。在实际运行中会生成一个虚拟的网桥docker0,这边的虚拟网桥就类似于物理交换机的作用,而veth则可以类比物理交换机的端口 ,veth与容器内的eth0网卡 就是一队veth-pair,关于veth-pair技术可以参考该链接Linux-虚拟网络设备-veth pair,. 而docker0作为linux普通网桥,可以配置ip,这样便可以在三层进行网络通讯了。
20170828171704363.png

Docker 创建一个容器的时候,会执行如下操作:

  • 创建一对虚拟接口/网卡,也就是veth pair,分别放到本地主机和新容器中;
  • 本地主机一端桥接到默认的 docker0 或指定网桥上,并具有一个唯一的名字,如 vetha596da4;
  • 容器一端放到新容器中,并修改名字作为 eth0,这个网卡/接口只在容器的名字空间可见;
  • 从网桥可用地址段中(也就是与该bridge对应的network)获取一个空闲地址分配给容器的 eth0,并配置默认路由到桥接网卡 vetha596da4。
  • 完成这些之后,容器就可以使用 eth0 虚拟网卡来连接其他容器和其他网络。
  • 如果不指定–network,创建的容器默认都会挂到 docker0 上,使用本地主机上 docker0 接口的 IP 作为所有容器的默认网关。

iptables

ipforward

我们知道bridge模式下,会生成虚拟docker0,docker0为容器的默认网关。作为容器与外界通讯的媒介,docker0 与宿主机的网卡如何通讯呢? 这边其实就利用了linux多网卡数据包的转发功能。

Linux系统默认多网卡之间的数据包转发功能是关闭的。开启方法如下:
数据包转发功能默认配置
cat /proc/sys/net/ipv4/ip_forward
0
设置为1的时候转发
开机自动数据包转发
把下面代码添加到开机启动项/etc/rc.d/rc.local
echo “1″ >/proc/sys/net/ipv4/ip_forward
或者修改/etc/sysctl.conf
net.ipv4.ip_forward = 1

docker常见问题解答

Q:docker build的时候需要连接外网,但是有时候连接不上,为什么如何解决?

A: docker build 默认采用bridge模式,该方式需要桥接网卡,但是没看到。所以采用host 模式进行
docker build --network=host -t test .
参考:https://www.debugself.com/2018/01/17/docker_network/

附录

  1. docker容器的网络配置
  2. docker-compose配置ipv6

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1018317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ARM64汇编基础

ARM64汇编基础 主要内容 到目前为止,大部分的移动设备都是64位的arm架构,一直想抽个时间系统学习下,这个周末就专门来学习下。毕竟两天的时间,也只是简单的入门了解下,为后续工作和学习打下基础。 本次学习的主要内容…

Pytorch学习笔记(GPU训练)

GUP训练 配置pytorch的gup版本主要是在网络模型、输入和标记的数据、损失函数 方式一 直接.cuda()调用,在原有的模型训练代码中的网络模型、输入和标记的数据、损失函数部分直接调用即可 方式二 事先定义好设备device,然后直接.to(device)调用,在原…

基于SSM的学生宿舍管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

[vulntarget靶场] vulntarget-a

靶场地址:https://github.com/crow821/vulntarget 拓扑结构 信息收集 主机发现 netdiscover -r 192.168.127.0/24 -i eth0端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.127.130访问目标80,发现为通达oa WIN7漏洞利用 通达oa后台…

运行软件报错msvcr100.dll丢失的解决方法,全面分析msvcr100.dll丢失问题

随着科技的飞速发展,计算机已经成为人们生活和工作中不可或缺的重要工具。然而,在使用计算机的过程中,难免会遇到一些令人困扰的问题,如计算机丢失 msvcr100.dll 文件就是其中之一。本文将详细介绍计算机丢失 msvcr100.dll 的困扰…

文件打开表有几个?——参考《王道考研》

一、 真题试练 解析: 二、关于文件打开表 三、 疑问? 不是说好的只维护一个文件打开表吗? 四、解答 OS维护的是总的文件打开表,各自用户由对应各自的打开表,所有用户的打开表组成OS总的打开表。

layui框架学习(45: 工具集模块)

layui的工具集模块util支持固定条、倒计时等组件,同时提供辅助函数处理时间数据、字符转义、批量事件处理等操作。   util模块中的fixbar函数支持设置固定条(2.7版本的帮助文档中叫固定块),是指固定在页面一侧的工具条元素&…

swift 事件

多个元素链接到单个IBAction 并区分

图书信息管理系统

#include<stdio.h> #include<string.h> #include<stdlib.h> #define MAXSIZE 10000typedef struct {char no[100];//图书ISBNchar name[100];//图书名字double price;//图书价格 } Book;typedef struct {Book data[MAXSIZE];int length; } SqList,*PSqList;P…

算法基础:图

图论 图论〔Graph Theory〕是数学的一个分支。它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形&#xff0c;这种图形通常用来描述某些事物之间的某种特定关系&#xff0c;用点代表事物&#xff0c;用连接两点的线表示相应两个事物间具有这种关系。 …

Java实现Ip地址获取

Java实现Ip地址获取 一、两种实现方式二、测试结果 一、两种实现方式 package com.lyp;import org.apache.commons.lang3.ObjectUtils;import java.net.*; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.Optional;/***…

创建及编辑线要素

17. 创建及编辑线要素 17.1 功能讲解 所有QGIS按键&#xff0c;右下角带 * 的&#xff0c;都是新建的意思。下图中&#xff0c; File encoding尽量选择 System。可自定义字段&#xff0c;例如 ‘Btype’&#xff0c;可以用其以不同的标记区分省界和区界。 保存路径&#x…

「UG/NX」Block UI 指定矢量SpecifyVector

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

ES6中WeakMap和WeakSet

这里重点说一下它们和对应的set、map的区别 WeakSet 不能遍历,没有forEach&#xff0c;没有size只能添加对象垃圾回收器完全不考虑WeakSet对该对象的引用。 WeakMap 键只能是对象它的键存储的地址不会影响垃圾回收。 let obj {name: Tom,age: 20}let map new WeakMap();…

Linux安装Mysql(详细)

安装Mysql数据库 参考阿里云命令安装Mysql smartservice.console.aliyun.com/service/ser… 安装MySQL 1.远程连接ECS实例。 具体操作&#xff0c;请参见使用VNC登录实例。 2.运行以下命令&#xff0c;更新YUM源。 sudo rpm -Uvh https://dev.mysql.com/get/mysql80-com…

C++之this指针总结(二百二十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

SpringBoot启动输出了Mybatis-plus和Pagehelper的图标的解决方法

SpringBoot启动输出了Mybatis-plus和Pagehelper的图标 解决方法 Mybatis-plus mybatis-plus可以通过下面的配置关闭图标输出 mybatis-plus:global-config:banner: false #启动时不输出mp的图标pagehelper pagehelper要麻烦一些&#xff0c;需要在jvm的启动参数中进行配置…

使用docker安装部署kuboard并导入k8s集群

1 官网地址 https://kuboard.cn/install/v3/install.html#kuboard-v3-x-%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E2 找到推荐的安装方式 先点击左上角的安装 3 进入安装引导页面 复制出来里面的docker 命令&#xff0c;根据需求修改外面端口映射&#xff0c;KUBOARD_ENDPOINT…

Docker安装ElasticSearch/ES 7.10.0

目录 前言安装ElasticSearch/ES安装步骤1&#xff1a;准备1. 安装docker2. 搜索可以使用的镜像。3. 也可从docker hub上搜索镜像。4. 选择合适的redis镜像。 安装步骤2&#xff1a;拉取ElasticSearch镜像1 拉取镜像2 查看已拉取的镜像 安装步骤3&#xff1a;创建容器创建容器方…

Chatgpt solve | 井底之蛙

这是一个经典的物理问题&#xff0c;我们可以使用Python来解决它。青蛙每分钟爬升4米&#xff0c;然后滑下2米&#xff0c;所以每分钟净爬升2米。 我们可以编写一个循环来模拟这个过程&#xff0c;直到青蛙爬出井口。下面是一个Python程序来解决这个问题&#xff1a; def time_…