码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 六、Docker容器的网络连接


    目录

    • 一、Docker 容器的网络基础
    • 1.docker0(Lunix的虚拟网桥)
      • 1).查看
      • 2).定义
        • (1).前言
        • (2).centos7 查看网桥设备
        • (3).案例
          • 1.运行容器
          • 2.查看网络设备
          • 3.安装查看工具
          • 4.查看docker 网络设备
        • 3).自定义docker0
          • (1).前言
          • (2).关闭 docker服务
          • (3).修改bip
          • (4).重启docker
      • 2.自定义docker虚拟网桥
        • 1.查看现有网络情况
        • 2.新建名为net-test的网桥(只有使用–subnet创建的网络才能指定静态IP)
        • 3.重新查看网络配置信息:
        • 4.备注信息:
        • 5,使用自定义网桥,指定端口启动容器
    • 二、Docker 容器的互联
      • 1.允许所有容器互联
        • 1前言
          • 1).测试 --icc=true 默认允许连接
        • 2.容器的ip地址实际上是一个不可靠的连接,因为它会随着容器的启动而改变。
      • 2.允许特定容器互联解决方案
      • 3.网络连通(Docker 两个不同网络间实现连通)
        • 1).前言
        • 2).启动不同网络的容器
          • (1).启动两个bridge(自带默认)桥接的容器
          • (2).启动两个mynet(自定义)桥接的容器
            • 网桥创建如下:
            • 启动两个mynet(自定义)桥接的容器如下:
        • 3).两个不同网络,容器间互通
            • 1.查看操作语法
            • 2.实际操作指令
            • 3.测试两者间是否互通

    一、Docker 容器的网络基础

    1.docker0(Lunix的虚拟网桥)

    1).查看

    ifconfig
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    2).定义

    (1).前言

    通过ifconfig查看docker0的网络设备,docker守护进程就是通过docker0为docker的容器提供网络连接的各种服务。
    docker0是Linux虚拟网桥。
    Linux虚拟网桥的特点:

    • 可以设置IP地址
    • 相当于拥有一个隐藏的虚拟网卡
      docker0的地址划分:
    • IP:172.17.0.1 子网掩码: 255.255.0.0
    • MAC: 02:42:c7:62:53:e0
    • 总共提供65534个地址
      docker守护进程在一个容器启动时,实际上它要创建网络连接的两端。一端是在容器中的网络设备,而另一端是在运行docker守护进程的主机上打开一个名为veth*的一个接口,用来实现docker这个网桥与容器的网络通信。
      在这里插入图片描述

    (2).centos7 查看网桥设备

    brctl show
    
    • 1

    在这里插入图片描述

    (3).案例

    1.运行容器

    docker run --name centos7  -it centos:7 /bin/bash
    
    • 1

    在这里插入图片描述

    2.查看网络设备

    在这里插入图片描述

    3.安装查看工具

    yum -y install vim   net-tools ifconfig
    
    • 1

    在这里插入图片描述

    4.查看docker 网络设备

    在这里插入图片描述

    3).自定义docker0

    (1).前言

    修改默认的配置文件 /etc/docker/daemon.json对Docker进行配置。
    如果没有直接创建

    (2).关闭 docker服务

    systemctl stop docker
    
    • 1

    (3).修改bip

    vim /etc/docker/daemon.json
    {
    "bip":"192.168.10.1/16"
    }
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    (4).重启docker

    systemctl restart docker
    
    • 1

    在这里插入图片描述

    2.自定义docker虚拟网桥

    1.查看现有网络情况

    docker network ls
    
    • 1

    在这里插入图片描述

    2.新建名为net-test的网桥(只有使用–subnet创建的网络才能指定静态IP)

    docker network create --driver bridge --subnet 192.168.10.0/24 --gateway 192.168.10.1 net-test
    
    • 1

    在这里插入图片描述
    报错:Error response from daemon: Pool overlaps with other one on this address space

    这是因为新创建的网络自定义的子网ip与已有的网络子网ip冲突。

    只需要重新定义子网ip段就行

    docker network create --driver bridge --subnet 10.22.1.0/24 --gateway 10.22.1.1  net-test
    docker network ls
    
    • 1
    • 2

    在这里插入图片描述

    3.重新查看网络配置信息:

    docker network inspect  网桥名称
    
    • 1
    docker network inspect net-test
    
    • 1

    在这里插入图片描述

    4.备注信息:

    当用ifconfig命令查看的时候,显示的并不是net-test,而是br-ed63c1fd55b9
    如需能在ifconfig中显示网桥名称,添加选项com.docker.network.bridge.name

    docker network create --driver bridge --subnet 25.168.1.0/24 --gateway 25.168.1.1  net-test1 -o com.docker.network.bridge.name=net-test1
    
    
    • 1
    • 2

    在这里插入图片描述
    在这里插入图片描述

    5,使用自定义网桥,指定端口启动容器

    docker run -it --network=net-test1 -p 8080:80  centos:7 /bin/bash
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    二、Docker 容器的互联

    1.允许所有容器互联

    1前言

    在同一宿主机下,docker的容器是通过虚拟网桥来进行连接的。那么在默认情况下,在同一宿主机中运行的容器都是可以互相连接的。
    –icc=true 默认

    1).测试 --icc=true 默认允许连接

    docker run -it --name cct1 mycentos:1.0
    docker run -it --name cct2 mycentos:1.0
    
    • 1
    • 2

    其中mycentos:1.0自定义的镜像
    在这里插入图片描述
    在这里插入图片描述

    2.容器的ip地址实际上是一个不可靠的连接,因为它会随着容器的启动而改变。

    –link

    docker run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE] [COMMAND]
    
    • 1

    CONTAINER_NAME: 需要连接的容器名字
    ALIAS: 在容器中连接的代号(别名随机取)

    docker run -it --name cct4    mycentos:1.0
    docker run -it --name cct5  --link=cct4:web  mycentos:1.0
    
    • 1
    • 2

    在这里插入图片描述
    在这里插入图片描述

    2.允许特定容器互联解决方案

    如果你之前有 Docker 使用经验,你可能已经习惯了使用 --link 参数来使容器互联。随着 Docker 网络的完善,强烈建议大家将容器加入自定义的 Docker 网络来连接多个容器,而不是使用 --link 参数。

    通过自定义 虚拟网桥 来实现指定容器间的互联 隔离

    参考: 本文的 自定义docker虚拟网桥

    docker run -it --rm --name test6 --network net-test mycentos:1.0
    docker run -it --rm --name test7 --network net-test  mycentos:1.0
    
    • 1
    • 2

    在这里插入图片描述
    在这里插入图片描述

    3.网络连通(Docker 两个不同网络间实现连通)

    1).前言

    docker0和自定义网络肯定不通,我们使用自定义网络的好处就是网络隔离。
    但是在实际的工作中,比如我们部署了mysql使用了一个网段。部署了tomcat使用了另一个网段,两个网段之间肯定是不能相互连通的,但是tomcat和mysql又需要相互连通,我们就要使用网络连通。原理图如下:
    在这里插入图片描述

    在没有使用connect命令的情况下,不同网络间的容器是无法进行网络连接的。

    2).启动不同网络的容器

    (1).启动两个bridge(自带默认)桥接的容器

    docker run -it --name tomcat1 tomcat
    docker run -it --name tomcat2 tomcat
    # 查看容器
    docker ps -a
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    (2).启动两个mynet(自定义)桥接的容器

    网桥创建如下:
    docker network create --driver bridge --subnet 10.22.1.0/24 --gateway 10.22.1.1  mynet
    docker network ls
    
    • 1
    • 2

    在这里插入图片描述

    启动两个mynet(自定义)桥接的容器如下:
    docker run -it --name tomcat-net-01 --net mynet tomcat
    docker run -it --name tomcat-net-02 --net mynet tomcat
    # 查看容器
    docker ps -a
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    3).两个不同网络,容器间互通

    1.查看操作语法
    docker network connect [OPTIONS] NETWORK CONTAINER
    
    • 1
    2.实际操作指令
    docker network connect mynet tomcat1
    
    • 1
    3.测试两者间是否互通

    tomcat1 ping tomcat-net-01可以ping通!

    docker exec -it tomcat1 ping tomcat-net-01
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    NFS服务配置
    15-bean生命周期,循环依赖
    数组转树形结构
    基于PYTHON游乐场服务管理系统的设计与实现
    初识c++
    React Query:高效管理API请求与缓存
    cesium 鹰眼图1
    CardView设置任意角为圆角
    让机器人飞入寻常百姓家丨青源Workshop「人形机器人」观点集锦
    js中 数组的操作 push(),pop(),shift(),unshift() 简介
  • 原文地址:https://blog.csdn.net/q908544703/article/details/126130711
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号