首页 > 其他分享 >Docker 容器网络

Docker 容器网络

时间:2023-04-10 19:12:50浏览次数:51  
标签:容器 00 bridge 网络 172.17 Docker docker

Docker 容器网络

网络只不过是一个区域【数据交流】

  • 默认情况下,所有容器都运行在 Docker 默认的网络空间中。
  • 在默认网络中,每个容器都可以与其他容器通信,我们可以创建网络隔离。

Docker 网络类型

一般情况,分三种:

  • none:对于这个容器,禁用所有网络
  • host:对于独立容器,直接使用宿主机的网络
  • bridge:配置桥接网络,桥接网络使用软件桥接,允许连接到同一桥接网络的容器进行通信,同时提供与未连接到该桥接网络的容器的隔离。默认使用的网络模式【启动 Docker 时,会自动创建一个默认的桥接网络】

默认桥接网络的一个缺点是不支持使用 DNS 自动发现容器服务。因此,如果您希望属于默认网络的容器能够相互通信,则必须使用 --link 选项静态允许通信发生。此外,通信需要容器之间的端口转发。

并采用的复杂配置模式:overlay, ipvlan, macvlan 三者分别覆盖网络、控制 IP、控制 MAC

开始测试前需要两个容器 container

  • 容器 A:docker run -dit --name c-a alpine ash
  • 容器 B:docker run -dit --name c-b alpine ash

-it 应该都知道,-d 是挂后台的意思

  • alpine 镜像是基于 Alpine Linux 的最小 Docker 镜像,一般进行测试使用
  • ash 是 shell,属于 Bourne shell 简化版本,特点是占用系统资源最少,感兴趣可以去学习,不过主流是 bash, zsh

上面在创建时,并没有什么特别的,根据默认创建那么它们应该是使用相同给默认桥接网络

learn@debian10:~/work$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
c8e2262fa6ef   bridge    bridge    local
5050dfe48c19   host      host      local
ac4d3767e763   none      null      local

默认 bridge 网络的名称也是 bridge,追查 c8e2262fa6ef 网络,就是默认 bridge 那个使用 docker network inspect <network-name|network-id>

learn@debian10:~/work$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "c8e2262fa6ef5bf351c325efe2bebf715c8174641ee3be711e2989aed13c8803",
        "Created": "2023-04-09T20:35:16.356724826+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": {
            "83358fcb0195b367b553d7bb610d09a0f64bdbf77afb4b55a2d2371e1b69c1e9": {
                "Name": "c-b",
                "EndpointID": "1e9a8d123a4b38af5119185318bc43214b64ea49c2edb197ec986f136ba44578",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            },
            "9fe00453457a633a650d049083cc85c39b6b55a617e2d3b49d86864a1231d7e7": {
                "Name": "c-a",
                "EndpointID": "8a69f2d9e54411358b79138b3c662185c27d6d689d9ea26d289c49a0c9a4f9b9",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "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": {}
    }
]

Containers 属性是可以看到它连接的两个容器 c-ac-b

  • 网络配置中可以看到网关是 172.17.0.1
  • c-a 分配的 IPv4 是 172.17.0.2/16
  • c-b 分配的 IPv4 是 172.17.0.3/16

我们使用 docker attach <container-name> 连接容器

  • 说明这个子命令作用是将本地标准流附加到正在运行的容器
learn@debian10:~/work$ docker attach c-a
/ #

接下来我们使用的是 alpine 的 ash 作为 shell 不是 bash,我们已经进入 alpine 的 c-a 容器中

# 查看 c-a 中的网络接口,下面是完整命令,简化是 ip a
# 为什么没有使用 ifconfig,已经快淘汰 ...
ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
  • lo 是本地回环,学习过计算机网络应该都知道
  • eth0@if5 接口是连接 bridge 网络的网卡,其中的 172.17.0.2/16 是否眼熟

    标签:容器,00,bridge,网络,172.17,Docker,docker
    From: https://www.cnblogs.com/shadow-/p/17304004.html

相关文章

  • docker 部署 tomcat
    拉取tomcat镜像dockerpulltomcat:latest运行tomcatdockerrun-d-p8090:8080--nametomcat_doc-v/root/web/:/usr/local/tomcat/webappstomcat:latest......
  • 解决Windows下Docker启动容器时,端口被占用错误
    今天在启动本机的nacos容器时报了如下错误:,--.,--.'|,--,::|Nacos2.0.2,`--.'`|':,---.Runninginstandalonemode,Allfunctionmodules|::|......
  • Docker的网络模式
    1、Docker网络实现原理(1)Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器......
  • odoo Docker Compose 部署
    1.docker-compose.yml配置version:'3.1'services:web: image:odoo:14 depends_on: -mydb ports: -"8069:8069" environment: -HOST=mydb -USER=odoo -PASSWORD=myodoo volumes: -odoo-web-data:/var/lib/odoo -./config......
  • CS 486/686 神经网络
    CS486/686Winter2023Assignment42NeuralNetworks(65marks)Inthispartoftheassignment,youwillimplementafeedforwardneuralnetworkfromscratch.Additionally,youwillimplementmultipleactivationfunctions,lossfunctions,andperfor-man......
  • 【STL1】容器分类及测试
    //ConsoleApplication2.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。//#pragmawarning(disable:4996)#include<array>#include<ctime>#include<cstdlib>#include<iostream>#defineASIZE100000usingstd::cout;usingstd::cin;us......
  • ChatGPT垂直行业私有数据知识库向量数据库-Linux Ubuntu下安装docker-并且安装运行qdr
    现在基于GPT相应实现自建本地知识库,必不可少的就是向量数据库,现在介绍下qdrant向量数据库的安装。因为qdrant向量数据库只支持docker部署,所以在服务器上安装一下docker,下面是在ubutnu下安装dockeraptupdateaptinstallapt-transport-httpsca-certificatescurlgnupglsb-r......
  • docker环境下安装zabbix
    一:安装docker安装部署docker.sh####################################脚本docker安装BEGINS[root@zabbix-agentyidong]#cat*.sh#!/bin/bashcat<<EOF1.安装docker2.启动docker3.退出EOFread-p"请选择一个变量来定位:"Selectcase$Selectin1)echo"安装docker软件开始--------......
  • c++遍历容器元素
    for(autoi:v)遍历容器元素1.auto2.auto&3.constauto&4.constautoC++11新增了一种循环:基于范围(range-based)的for循环。这简化了一种常见的循环任务:对数组(或容器类,如vector和array的每个元素执行相同的操作,如下例所示:doubleprices[5]={4.99,10.99,6......
  • Python3网络爬虫实战之爬虫框
    ScrapySplash的安装ScrapySplash是一个Scrapy中支持JavaScript渲染的工具,本节来介绍一下它的安装方式。ScrapySplash的安装分为两部分,一个是是Splash服务的安装,安装方式是通过Docker,安装之后会启动一个Splash服务,我们可以通过它的接口来实现JavaScript页面的加载。......