一、Docker网络概念

1、网络驱动

Docker 网络子系统使用可插拔的驱动,默认情况下有多个驱动程序,并提供核心联网功能。

  1. bridge:桥接网络,这是默认的网络驱动程序(不指定驱动程序创建的容器默认是

    bridge驱动)。
  2. host:主机网络。消除容器和主机的网络隔离,直接使用主机的网络。
  3. overlay:覆盖网络。可以将多个Docker守护进程连接,实现跨主机容器通讯

    (swarm集群)。
  4. macvlan:将MAC地址分配给容器,使容器作为网络上的物理设备。不通过Docker

    主机网络栈进行路由,直接通过MAC地址路由到容器。
  5. none:表示关闭容器的所有网络连接。常与自定义网络驱动一起使用,不适用于

    swarm。
  6. 网络插件:可以通过Docker安装和使用第三方网络插件。

2、Docker 网络驱动选用原则

  1. bridge桥接网络:最适合用于同一个Docker主机上运行的多个容器之间需要通信的

    场景。(单主机)
  2. host主机网络:最适用于当网络栈不能与Docker主机隔离,而容器的其他方面需要

    被隔离的场景。(解除容器和主机隔离)
  3. overlay网络:适用于不同Docker主机上运行的容器需要通信的场景,或者多个应

    用程序通过Swarm集群服务一起工作的场景。(多主机、集群)
  4. macvlan网络:适用于从虚拟机迁移过来的场景,或者容器需要像网络上的物理机

    一样,拥有独立MAC地址的场景。(容器需要mac)
  5. 第三方网络插件适用于将Docker与专用网络栈进行集成的场景。(订制化)

3、容器的网络模式

docker内置了四种网络模式,也可以使用自定义网络。

(1)bridge模式

桥接网络分为默认桥接网络和用户自定义桥接网络两种类型。

实现原理:桥接网络使用软件网桥,让连接到同一桥接网络的容器可以通信,没连接该网桥的容器被隔离。

工作流程:Docker守护进程启动,会在主机上创建一个名为 docker0 的虚拟网桥,启动容器时如果没有特别指定,自动连接到这个虚拟网桥。ifconfig命令可以查看到docker0虚拟网桥

语法:docker network create --driver bridge 容器

(2)host模式

host模式的容器使用host驱动,直接连接Docker主机网络栈

host模式没有为容器创建一个隔离的网络环境,容器没有隔离的网络名称空间,也不会获得一个独立的网络名称空间,而是和Docker主机共用一个网络名称空间。

容器和主机在同一个网络中,使用主机的物理网络接口,没有独立的IP地址,直接使用主机的IP地址和端口。

(3)container模式

Docker中一种较为特别的网络模式,主要用于容器和容器直接频繁交流的情况。

要点:

1.该模式指定新建的容器和现有的一个容器共享网络名称空间。

2. 新创建的容器和一个现有的指定容器共享IP地址、端口范围,不创建自己的网络接

口、IP地址。


3. 两个容器间网络不隔离,进程可通过回环网络进行通信。

4. 这两个容器和主机和其他容器存在网络隔离。

(4)none模式

none模式将容器放置在它自己的网络栈中,但是并不进行任何配置,实际上关闭了容器的网络功能。容器内部只能使用回环网络接口(127.0.0.1)。.

可用场景:

  1. 有些容器并不需要网络,例如只需要写入磁盘卷的批处理任务。
  2. 安全性要求高并且不需要联网的应用可以使用none模式。
  3. 要创建自定义网络。

(5)用户自定义网络模式

管理员可以使用Docker网络驱动(bridge、overlay、macvlan)或第三方网络驱动插件创建一个自定义的网络,然后将多个容器连接到同一个自定义网络。

特点:

  1. 连接到用户自定义网络的容器,可以使用IP地址或名称相互通信。
  2. 可以根据需要创建任意数量的自定义网络。
  3. 可以在任何时间将容器连接到这些网络。
  4. 对运行中的容器,可连接、断开自定义网络,无须重启容器。

4、容器间的通信方案

  1. bridge模式让同一个Docker网络上的所有容器在所有端口上都可以相互连接。

    注意:默认桥接网络不支持基于名称的服务发现和用户指定的IP地址,只能通过IP地址互相访问,除非创建容器时使用--link选项建立容器连接。

    语法:docker run -tid --network 网络模式 镜像

  2. host模式让所有容器都位于同一个主机网络空间中,并共用主机的IP地址栈,在该主机上的所有容器都可通过主机的网络接口相互通信。

  3. 容器通过端口映射对外部提供连接。

    语法:

  4. container模式让容器共用一个IP网络,两个容器之间可通过回环网络接口相互通信。

  5. 容器之间使用 --link 选项建立传统的容器互联。

    语法:

    docker run -idt --name 容器名 --link <源容器的名称或ID>:容器别名 镜像

  6. 容器之间通过挂载主机目录来实现相互之间的数据通信。

5、传统容器连接

创建容器时使用--link选项可以在容器之间建立连接,这是Docker传统的容器互联解决方案。

特点:

  1. 这种连接方式用来将多个容器连接在一起,并在容器之间发送连接信息。
  2. 当容器被连接时,在源容器接收容器之间建立一个 安全通道 ,关于源容器的信息能够被发送到接收容器,让接收容器可以访问源容器所指定的数据。

6、容器访问外部网络

默认情况下,容器可以主动访问到外部网络的连接,但是外部网络无法访问到容器。

使用bridge模式(默认桥接网络)的容器通过NAT方式实现外部访问,具体通过iptables(Linux的包过滤防火墙)的源地址伪装操作实现。

查看主机的 NAT 规则:iptables -t nat -vnL

7、从外部网络访问容器

默认情况下,创建的容器不会将其任何端口对外发布,从容器外部无法访问容器内部。

(1)-P发布容器所有暴露的端口

语法:

docker run -tid test-http -P httpd //创建容器使用-P选项发布httpd服务

docker port test-http //查看容器的端口映射设置

curl http://192.168.100.111:49153 //使用curl命令访问服务测试

(2)-p发布容器特定端口

语法:docker run -tid test-http -P 8848 httpd

案例1:映射指定地址的指定端口

docker run -tid --name test-port -p 192.168.100.111:8848:80 httpd

案例2:映射指定地址的任一端口

docker run -tid --name test-port -p 127.0.0.1::80 httpd

案例3:同时发布TCP和UDP端口

docker run -tid --name test -p 8080:80/tcp -p 8080:80/udp httpd

8、容器的网络配置语法

使用 docker run 和 docker create 命令来设置容器的网络配置的语法。

(1)设置容器的网络连接

容器启动时,可以使用 --network 选项设置容器要连接的网络,即网络模式。

none:容器为none模式,容器不使用任何网络连接,能完全禁用网络连接。

bridge:容器为bridge模式,连接到默认桥接网络,也是默认设置。

host:容器为host模式,使用主机网络栈。

container:容器为container模式,容器使用某一个容器(通过id或name来标识)的网络栈。

网络名or网络id:容器连接自定义网络,可使用自定义网络的名称或id。

(2)为容器添加网络作用域的别名

注意:网络作用域别名只支持用户自定义的网络。

两个容器互ping 《————网络别名可以互相访问

语法:

docker run -tid --network 自定义网络 --network-alias 别名 镜像 //设置网络容器别名

(3)设置容器的IP地址

使用 --network 选项启动容器连接自定义网络时,可以使用 --ip 或 --ip6 选项明确指定分配给该网络容器的ip地址。

前置使用条件:

  1. 只适用用户自定义网络;
  2. 用户自定义网络配置了子网。

    语法:

    docker run -dti --name test --network hqsnet2 --ip 10.10.0.10 镜像

(4)设置容器的网络接口MAC地址

默认情况下,容器mac地址是基于其IP地址生成。

可以通过 --mac-address 选项为容器指定一个MAC地址。

语法:

docker run -dti --name test-dns --mac-address 56:78bc:8c:1d 镜像

  • [未完 ]

(5)设置容器的DNS配置和主机名

  • [未完 ]

二、Docker网络管理命令

docker network 是Docker 网络本身的管理命令。

1、查看网络列表

语法:docker network ls

选项:

-q //只显示id

--filter //根据条件筛选

--format //格式化输出

--no-trunc //显示完整ID

2、查看网络详细信息

执行 docker network inspect 命令查看指定网络的详细信息,参数可以是网络名称或网络ID。

语法: docker network inspect bridge

3、创建容器网络

使用 docker network create 命令创建容器网络

** 语法:**

docker network create --driver bridge --subnet 192.168.159.0/24 网络名 //创建网络时指定网段和子网掩码

选项:--gateway //指定网关

4、删除容器网络

使用 docker network rm 删除容器网络。

** 语法:** docker network rm id或网络名 //可以删除多个指定网络

5、连接\断开容器网络

使用 docker network connect 连接容器网络。

使用 docker network disconnect 断开容器网络。 //-f强制断开连接

** 语法:**

docker network disconnect bridge 容器id //只能指定容器id号

docker network connect mynet 容器id

docker网络管理--项目三的更多相关文章

  1. docker部署项目 <三>

    使用docker运行一个控制台项目,新建一个控制台测试项目 一.安装mono,直接在网易镜像中心找下载路径 docker pull hub.c..com/library/mono:latest 二.安 ...

  2. Docker实战 | 第三篇:Docker安装Nginx,实现基于vue-element-admin框架构建的项目线上部署

    一. 前言 在上一文中 点击跳转 通过IDEA集成Docker插件实现微服务的一键部署,但 youlai-mall 是前后端分离的项目,除了后端微服务的部署之外,当然还少不了前端工程的部署.所以本篇讲 ...

  3. Docker 系列六(Docker Swarm 项目).

    一.前言 随着互联网快速发展,以及微服务架构的流行,服务器的压力越来越大.上一篇介绍的 Docker Compose 项目,可以将多个容器捏合在一起,实现容器间的通信,比如 Web 项目对 DB.Ca ...

  4. Docker学习笔记之编写 Docker Compose 项目

    0x00 概述 通过阅读之前的小节,相信大家对 Docker 在开发中的应用已经有了一定的了解.作为一款实用的软件,我们必须回归到实践中来,这样才能更好地理解 Docker 的实用逻辑和背后的原理.在 ...

  5. CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose

    CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...

  6. Docker网络管理机制实例解析+创建自己Docker网络

    实例解析Docker网络管理机制(bridge network,overlay network),介绍Docker默认的网络方式,并创建自己的网络桥接方式,将开发的容器添加至自己新建的网络,提高Doc ...

  7. Docker决战到底(三) Rancher2.x的安装与使用 - 简书

    原文:Docker决战到底(三) Rancher2.x的安装与使用 - 简书   image.png 当越来越多的容器化应用被部署,一个可以管理编排这些容器的工具此时就显得尤为重要了.目前容器编排领域 ...

  8. Docker + .NET Core(三)-两种发布方式

    原文:Docker + .NET Core(三)-两种发布方式 第一种,自己手写dockerfile发布,上传至hubDocker 正常发布到文件夹中,发布文件上传至linux机器上.如 /www/a ...

  9. docker 实践十:docker 网络管理

    本篇是关于 docker 网络管理的内容,同时也包含了 docker 网络的高级应用. 注:环境为 CentOS7,docker 19.03. docker 网络基础 docker 网络模型 在 do ...

  10. Docker & k8s 系列三:在k8s中部署单个服务实例

    本章将会讲解: pod的概念,以及如何向k8s中部署一个单体应用实例. 在上面的篇幅中,我们了解了docker,并制作.运行了docker镜像,然后将镜像发布至中央仓库了.然后又搭建了本机的k8s环境 ...

随机推荐

  1. vue之循环遍历v-for

    1.背景 2.遍历数组 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  2. [python] Python并行计算库Joblib使用指北

    Joblib是用于高效并行计算的Python开源库,其提供了简单易用的内存映射和并行计算的工具,以将任务分发到多个工作进程中.Joblib库特别适合用于需要进行重复计算或大规模数据处理的任务.Jobl ...

  3. windows中MySQL迁移数据存放盘符位置

    由于刚开始安装mysq时都选择了默认安装,数据存放在了c盘,后面数据量过大c盘不堪重负,所以迁移数据到D盘 windows中MySQL迁移数据存放盘符位置 参考: https://blog.csdn. ...

  4. Python3.11二进制AI项目程序打包为苹果Mac App(DMG)-应用程序pyinstaller制作流程(AppleSilicon)

    众所周知,苹果MacOs系统虽然贵为Unix内核系统,但由于系统不支持N卡,所以如果想在本地跑AI项目,还需要对相关的AI模块进行定制化操作,本次我们演示一下如何将基于Python3.11的AI项目程 ...

  5. Win11减少C盘占用及清爽系统配置教程

    Win11减少C盘占用及清爽系统配置教程 你是否有过C盘爆满而不得不重装系统的经历?你是否有过因为C盘爆满而不得不不断的拓展空间的无奈?你是否有过已经将软件安装在D盘但C盘的空间还是在日益变满的痛苦? ...

  6. 深入理解JavaScript中的try catch finally

    在日常开发中,我们经常使用try catch 来捕捉错误,来提升应用程序的健壮性,但是,大部分时候,只是惯性使用,很少静下来去深入理解一下try catch finally,所以本文将对try cat ...

  7. 小tips:node版本管理工具nvm

    nvm是node版本管理工具 为了解决node各种版本存在不兼容现象 nvm是让你在同一台机器上安装和切换不同版本的node的工具 安装 nvm-windows 最新下载地址: https://git ...

  8. 音视频入门-6-ffmpeg小实验-从v4l2层获取PC ubuntu摄像头图像

    0. 进行本代码实验的前提 确保已经在ubuntu内正确安装了ffmpeg 手把手安装教程可以参考我的另一篇博文<音视频入门-4-ffmpeg命令快速体验音视频开发/ ffmpeg编译过程经历的 ...

  9. 3.1 gradio的基本使用详解

    ·gr.Text:用于文本输入,适用于自然语言处理任务的模型. gr.Image:用于图像上传,适用于图像处理或计算机视觉模型. ·gr.Audio:用于音频输入,适用于语音识别或音频处理模型. im ...

  10. ajax发送 put和delete请求

    AJAX发送 PUT和DELETE请求(转载)    转自:https://blog.csdn.net/liuyuanjiang109/article/details/78972644 ajax使用r ...