Docker单机下的容器网络管理

Docker容器网络管理

容器网络类型

Docker安装以后,会在我们的主机上创建三个网络

docker network ls

image-20240312130610389

可以看到有bridge、host和none三种网络类型

我们先把ubuntu的网络环境配置一下

docker run -it ubuntu
apt update
apt install net-tools iputils-ping curl

这样环境就配置好了,接下来就退出容器,打包成为新的镜像

docker commit <容器name> <新镜像名>

现在我们来研究一下刚才上面的显示的三种网络类型

  • none网络:既然是none网络了,基本就是“没网络”,它只有一个本地的环回网络

    我们在创建容器时可以指定none网络来看看

    docker run -it --network=none ubuntu-net
    

    进入容器后可以ifconfig来查看一下网络

    image-20240312131219509

    他是无法连接到外界的互联网的,是一个真单机运行,没有人能从外部访问它

  • bridge网络:容器默认会使用bridge网络,即桥接网络,它被广泛应用

    image-20240312131459070

    我们进入桥接模式再ifconfig,发现相比none网络,它多了一个新的网络接口;其实这是Docker创建的虚拟网络,docker在此时就充当了一个桥接的角色,一边链接宿主网络,一头连接自己的虚拟子网

    image-20240312131634536

    通过这样的网桥,我们可以对容器的网络进行管控,可以使用network inspect来查看docker0网桥的配置信息

    docker network inspect bridge
    

    image-20240312131840073

  • host网络:当容器使用host网络时,会共享宿主网络,他们的配置完全一致

    docker run -it --network=host ubuntu-net
    

    在host网络的情况下,只要宿主主机能连上互联网,那么容器内部也没问题;这样一来就可以直接使用宿主的网络了,也不需要去开放端口了, 比桥接网络要方便的多,但相应的,安全性会有所下降。

    在使用时要根据实际情况来选择这三种网络的使用。

用户自定义网络

Docker为我们默认提供了三种网络驱动:bridge、overlay、macvlan。

我们可以用bridge来试着实现一下自定义的桥接网络

docker network create --driver bridge test

这里就创建好了一个名为test的桥接网络

image-20240312140247955

我们新建一个使用test网络的容器

docker run -it --network=test ubuntu-net

使用ifconfig来看一下网络情况

image-20240312135734646

我们现在退出这个容器,但不是关闭它,而是将其挂到后台

这里按ctrl + qctrl + p就能挂起

我们再次创建一个容器,这次不指定网络,看他的网络如下

image-20240312135750061

很明显他们不在一个网段,应该是相互隔离的,这是ping是ping不通的

接下来我把他的网络也接入test网络

docker network connect test <容器ID/名称>

image-20240312135823757

使用docker attach <容器id>来重新进入容器,再看看ifconfig里的配置

发现多了一个网络设备,现在两个容器就成功接入同一个网络环境下了

img

现在再试试ping原来的容器,就可以顺利ping通了

img

容器间网络

上面我们完成了通过自定义的网桥来实现容器间的通信,下面还可以直接配置容器间的网络来管理他们的通信

我们海狮先创建两个ubuntu-net容器

docker run -it ubuntu-net

我们直接在另外一个容器中ping它,由于他们都默认使用beidge网络处在同一个子网下,所以是可以顺利ping通的。

我们可以通过指定容器的ip来实现容器间通信,但是这样写的比较死。我们在配置容器的时候常常是自动分配的ip,这该怎么办呢

我们可以通过Docker为我们提供的DNS服务器来完成对域名的解析,只需要在启动容器时为容器所爱的网络命名,然后就可以实现互相的通信

docker run -it --name=test01 --network=test ubuntu-net
docker run -it --name=test02 --network=test ubuntu-net

image-20240313142337144

我们还可以直接让两个容器共享一个网络(设备),就相当于让他们处于同一网络环境下

docker run -it --name=test03 --network=container:test02 ubuntu-net

现在test02和test03的ip就完全一致了;

我们可以试着在test02中安装nginx

apt install -y systemctl nginx
systemctl start nginx

然后在tesst03中访问nginx

curl localhost

image-20240313142907208

成功访问,这俩容器的网络就接上了,实现了你中有我我中有你的网络状态

容器外部网络

上面了解了容器间的通信,接下来看看容器与外网的通信

在容器的三种网络模式下, 显然none模式是连不了外网的,这下只剩下共享和桥接两种模式来连接网络了。

学过计网的话,这里的物理机可以看做一个路由,容器将网络数据发给物理机,物理机通过地址变换再进行转发;所以这里公网是无法直接访问容器的

image-20240313143609477

上面的图是我们一般意义上的网络的转发,而对于Docker容器的也是差不多的

image-20240313143716050

这里有一个问题,如果只依靠NAT的话,我们的容器只能发送数据,而不能接收数据,该怎么办呢?

我们以前通过nginx实现过端口映射,这里的逻辑也是差不多的。

docker run -d -p 80:80 nginx

这里的-p是port端口映射,规则是宿主端口:容器端口,这里就是把容器的80端口映射到主机的80端口上

image-20240313144404741

我们可以使用docker ps,然后在PORTS里查看端口的映射情况

以上就是Docker中单机下的网络操作~


参考视频:Docker 容器技术 已完结(2022 最新版)4K蓝光画质+杜比音效 从内卷到开摆

视频教程文档:Docker容器技术

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

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

相关文章

HTML静态网页成品作业(HTML+CSS)——家乡广州介绍设计制作(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有5个页面。 二、作品演示 三、代…

Android Bundle putBinder传输超过1MB数据,Kotlin

Android Bundle putBinder传输超过1MB数据&#xff0c;Kotlin 由于Android系统架构的设计&#xff0c;Activity/Fragment之间通过Intent在Bundle塞进数据进行传输时候&#xff0c;如果数据超过1MB&#xff0c;会抛JE&#xff1a; java.lang.RuntimeException: android.os.Tran…

IDEA中配置完Maven后 重启就恢复默认设置

目录 问题描述解决方案-修改other settingsother settings改完也不奏效参考这里 问题描述 在IDEA的settings里配置完Maven之后 每次重启或新建一个项目/窗口之后 又恢复成之前的默认配置 解决方案-修改other settings 这和IDEA的版本有关 目前我使用的版本(2020.3.4) 配置完重…

计算机网络期末98+冲刺笔记

一、计算机网络基础 1.1计算机网络的概述 计算机网络的定义&#xff1a;利用通信设备和线路&#xff0c;将地理位置不同的具有独立功能的多台计算机机器外部设备连接起来&#xff0c;在网络操作系统、网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息…

cpp qt 一个奇怪的bug

今天在用cpp qt的时候发现了一个奇怪的东西 这是我的源代码 #include "mywidget.h" #include <QPushButton>myWidget::myWidget(QWidget *parent): QWidget(parent) {QPushButton * btn1 new QPushButton;btn1->show();btn1->setParent(this);btn1-&g…

如何恢复丢失未保存的 Word 文档指南

在广阔的数字领域&#xff0c;对丢失未保存的 Word 文档的恐惧对于用户来说是再熟悉不过的焦虑了。本指南旨在对用户可能发现自己迫切需要恢复未保存文档的各种场景进行详尽的探索。无论是由于保存失败、意外的系统崩溃还是令人心碎的意外删除&#xff0c;请放心&#xff0c;我…

详解MySQL的MVCC(ReadView部分解析C++源码)

文章目录 1. 什么是MVCC2. MVCC核心组成&#xff08;三大件&#xff09;2.1 MVCC为什么需要三大件 3. 隐藏字段4. undo log4.1 模拟版本链数据形成过程 5. Read View5.1 m_ids5.2 m_creator_trx_id5.3 m_low_limit_id5.4 m_up_limit_id5.5 可见性分析算法 6. MVCC流程模拟6.1 R…

ChromeDriver 122 版本为例 国内下载地址及安装教程

ChromeDriver 国内下载地址 https://chromedriver.com/download 靠谱 千千万万别下载错了 先确认 Chrome 浏览器版本 以 win64 版本为例 那我们下载这一个啊&#xff0c;不要下载错了 下载地址贴在这哈 https://storage.googleapis.com/chrome-for-testing-public/122.0.…

低代码开发平台,快速搭建开源MES系统

MS低代码云MES作为一家专注于提供生产制造数字化方案的服务商&#xff0c;“以客户为中心”、以“数据驱动、智能化、互联化”为企业的核心标签&#xff0c;以低代码平台为切入点&#xff0c;帮助企业构建以人为本的未来供应链生态系统&#xff0c;实现制造企业的智能化转型。 …

Vulnhub - Toppo

希望和各位大佬一起学习&#xff0c;如果文章内容有错请多多指正&#xff0c;谢谢&#xff01; 个人博客链接&#xff1a;CH4SER的个人BLOG – Welcome To Ch4sers Blog Toppo 靶机下载地址&#xff1a;Toppo: 1 ~ VulnHub 0x01 信息收集 Nmap扫描目标主机&#xff0c;发…

关于分布式微服务数据源加密配置以及取巧方案(含自定义加密配置)

文章目录 前言Spring Cloud 第一代1、创建config server项目并加入加解密key2、启动项目&#xff0c;进行数据加密3、实际项目中的测试server Spring Cloud Alibaba低版本架构不支持&#xff0c;取巧实现无加密配置&#xff0c;联调环境问题加密数据源配置原理探究自定义加密解…

[LeetCode][110]平衡二叉树

题目 110.平衡二叉树 给定一个二叉树&#xff0c;判断它是否是平衡二叉树。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,3,3,null,null,4,4] 输出&#xff1a;false 示例 3&…

Linux:1_常见指令以及权限理解(上)

常见指令以及权限理解 一.补充知识 为方便初学者更好的理解Linux系统,这部分将对比windows系统补充一部分必要知识1 2 3 4 5 6 二.补充指令 1. 重新认识指令: 指令本质都是程序 —指令、程序、可执行程序都是一回事(都是文件内容属性)指令就是程序 … 安装和卸载是在把可…

分布式搜索引擎elasticsearch(2)

1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL&#xff08;[Domain Specific Language](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html)&#xff09;来定义查…

(一)RabbitMQ实战——rabbitmq的核心组件及其工作原理介绍

前言 RabbitMQ是一个开源的消息代理软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;标准&#xff0c;提供可靠的消息传递机制。RabbitMQ可以用于在应用程序之间传递消息&#xff0c;实现不同应用系统之间的解耦和通信。它支持多种编程语言&#xff0c;…

什么是Ribbon,怎么实现负载均衡?

一. Ribbon 是 Netflix 公司开发的一个负载均衡器&#xff08;Load Balancer&#xff09;工具&#xff0c;主要用于在分布式系统中进行客户端侧的负载均衡。它可以集成到微服务架构中的客户端&#xff0c;通过在客户端实现负载均衡算法&#xff0c;来分发请求到多个服务提供者…

彩虹知识付费模板MangoA全开源包含秒杀/抽奖/社群/推送等功能

二次开发增加以下功能每日秒杀每日签到官方社群多级分销在线抽奖项目投稿 每日秒杀 每日签到 官方社群 多级分销 在线抽奖 项目投稿 下载地址&#xff1a;https://pan.xunlei.com/s/VNstMfOecGliiqew7UIorsOnA1?pwdhywi#

<支持向量机算法(SVM:Support Vector Machine)>——《机器学习算法初识》

目录 一、⽀持向量机(SVM)算法 1 SVM算法导⼊ 2 SVM算法定义 2.1 定义 2.2 超平⾯最⼤间隔介绍 2.3 硬间隔和软间隔 2.3.1 硬间隔分类 2.3.2 软间隔分类 3 ⼩结 二、 SVM算法api初步使⽤ 三、 SVM算法原理 1 定义输⼊数据 2 线性可分⽀持向量机 3 SVM的计算过程与算…

Rust 构建开源 Pingora 框架可以与nginx媲美

一、概述 Cloudflare 为何弃用 Nginx&#xff0c;选择使用 Rust 重新构建新的代理 Pingora 框架。Cloudflare 成立于2010年&#xff0c;是一家领先的云服务提供商&#xff0c;专注于内容分发网络&#xff08;CDN&#xff09;和分布式域名解析。它提供一系列安全和性能优化服务…

【原创】[新增]ARCGIS之土地报备Txt、征地Xls格式批量导出Por旗舰版

一、软件简介 2024年新增旗舰版软件&#xff0c;本软件全新界面开发&#xff0c;保留原有软件功能及一些使用习惯&#xff0c;并集成了现已有的所有定制格式的支持&#xff0c;并增加自定义格式的导出&#xff1b;做到1N2&#xff08;即为1种通用版本N种定制格式导出txt、Xls&a…