全站仪快速建站,酒水在什么网站做推广好,快速网站建设公司,江都建设银行网站#x1f389;#x1f389;欢迎来到我的CSDN主页#xff01;#x1f389;#x1f389; #x1f3c5;我是君易--鑨#xff0c;一个在CSDN分享笔记的博主。#x1f4da;#x1f4da; #x1f31f;推荐给大家我的博客专栏《Docker之网络配置的使用》。#x1f3af;… 欢迎来到我的CSDN主页 我是君易--鑨一个在CSDN分享笔记的博主。 推荐给大家我的博客专栏《Docker之网络配置的使用》。 如果感觉还不错的话请给我关注加三连吧 前言 在上期的博客的分享过程中我们分享了Dockerfile如何去构建我们的自定义镜像去符合我们的一个使用需求以及将我们的构建好的一个镜像文件上传到我们自己的镜像仓库中方便我们的同事以及项目的部署。今天的我们分享的是docker中的网络配置的使用。 一、网络配置简介
1. 基本概述 在Docker中网络配置是指设置和管理容器之间及容器与主机之间的网络通信方式的过程。Docker提供了各种网络模式和选项允许用户在不同场景下进行网络配置。 常见的docker网络配置概念 常见的Docker网络配置概念 配置概念说明默认网络模式 默认情况下Docker容器使用桥接网络模式bridge mode。每个容器都分配了一个独立的IP地址并且可以通过主机的IP地址进行访问。 自定义桥接网络 用户可以创建自定义的桥接网络将多个容器连接到同一网络中。这有助于容器之间的通信而不依赖于宿主机的IP地址。 主机网络模式 使用主机网络模式容器共享主机的网络命名空间直接使用主机的网络栈。这意味着容器可以使用主机的IP地址和端口但也可能导致端口冲突。 无网络模式在无网络模式下容器不具备任何网络功能。这适用于某些特殊场景例如纯粹用于计算的容器覆盖网络 Docker提供了覆盖网络overlay network以支持跨主机的容器通信。这在分布式系统和集群中很有用。 macvlan和ipvlan网络这两种网络模式允许容器分配到物理网络的MAC地址或IP地址使得容器直接与物理网络上的设备通信网络别名和链接 Docker容器可以使用网络别名允许容器通过多个名称进行访问。此外通过链接linking一个容器可以访问另一个容器的网络栈。 Docker ComposeDocker Compose允许通过YAML文件定义多个服务及其网络配置简化了多容器应用的管理 总之Docker提供了灵活的方式来管理容器之间的通信同时允许用户根据应用程序的需求进行定制化的网络设置。 2. 网络配置的主要用途 容器之间的通信 通过网络配置可以方便地实现容器之间的通信。不同容器可以在同一网络中通过容器名称或IP地址相互访问。 与主机的通信 Docker容器可以配置成与主机进行通信这对于特定应用场景非常有用。容器可以通过主机的IP地址或localhost进行访问。 隔离和安全性 Docker的网络隔离允许容器在相对安全的环境中运行。不同容器之间的网络栈是隔离的减少了横向攻击的风险。 多容器应用 对于复杂的应用程序通常需要多个容器协同工作。通过适当的网络配置可以确保这些容器之间能够正确地进行通信和协作。 跨主机通信 使用覆盖网络overlay network容器可以在跨越多个主机的环境中进行通信。这对于构建分布式系统和集群非常有用。 网络别名和链接 使用网络别名可以为容器分配多个名称从而使得容器可以通过不同的名称进行访问。通过链接容器可以访问其他容器的网络栈简化了应用的配置。 端口映射 Docker允许将容器内部的端口映射到主机上的端口使得外部系统可以通过主机的IP地址和端口与容器进行通信。 自定义网络 创建自定义网络允许用户灵活地配置容器之间的通信方式而不仅仅依赖于默认的桥接网络。 网络性能调优 Docker提供了一些网络性能调优选项用户可以根据应用程序的需求进行调整以获得更好的性能和吞吐量。 3. 网络配置的主要应用场景
Docker的网络配置主要的应用场景 应用场景说明微服务架构 在微服务架构中各个微服务通常以容器形式部署。Docker的网络配置允许这些微服务通过网络进行通信实现松耦合的分布式系统。 多容器应用 对于复杂的应用程序可能需要多个容器协同工作。网络配置使这些容器能够互相通信协同完成应用程序的各个部分。 容器编排工具 使用容器编排工具如Docker Compose、Kubernetes等时网络配置是至关重要的。它允许定义多个服务之间的通信方式以及容器与主机之间的连接规则。 分布式系统和集群 Docker的覆盖网络overlay network允许容器在不同主机之间进行通信从而构建分布式系统和集群。这对于高可用性和容错性至关重要。 服务发现和负载均衡 Docker网络配置使得服务能够注册和发现其他服务以及通过负载均衡实现请求的分发。这有助于构建可扩展的、具有高可用性的应用。 跨网络通信 当应用程序的不同部分需要在不同的网络中运行时Docker的网络配置可以帮助建立安全且可靠的通信。 测试和开发环境 在测试和开发过程中Docker网络配置使得可以轻松地模拟不同的网络条件包括局域网、互联网等以确保应用程序在各种环境下都能正常运行。 网络安全 Docker网络配置有助于实现容器之间的隔离减少横向攻击的风险。通过网络策略和安全组等配置可以提高容器网络的安全性。
4. 网络相关的知识点 主要涉及IP 、子网掩码 、网关 、DNS 、端口号等方面 子网掩码 互联网是由许多小型网络构成的每个网络上都有许多主机这样便构成了一个有层次的结构。 IP地址在设计时就考虑到地址分配的层次特点将每个IP地址都分割成网络号和主机号两部分以便于IP地址的寻址操作。 注意事项 子网掩码是“255.255.255.0”的网络 最后面一个数字可以在0~255范围内任意变化因此可以提供256个IP地址。但是实际可用的IP地址数量是256-2即254个因为主机号不能全是“0”或全是“1”。 子网掩码是“255.255.0.0”的网络 后面两个数字可以在0~255范围内任意变化可以提供255²个IP地址。但是实际可用的IP地址数量是255²-2即65023个。 IP地址的子网掩码设置不是任意的。如果将子网掩码设置过大也就是说子网范围扩大那么根据子网寻径规则很可能发往和本地主机不在同一子网内的目标主机的数据会因为错误的判断而认为目标主机是在同一子网内那么数据包将在本子网内循环直到超时并抛弃使数据不能正确到达目标主机导致网络传输错误如果将子网掩码设置得过小那么就会将本来属于同一子网内的机器之间的通信当做是跨子网传输数据包都交给缺省网关处理这样势必增加缺省网关的负担造成网络效率下降。 因此子网掩码应该根据网络的规模进行设置。如果一个网络的规模不超过254台电脑采用“255.255.255.0”作为子网掩码就可以了现在大多数局域网都不会超过这个数字因此 “255.255.255.0”是最常用的IP地址子网掩码假如在一所大学具有1500多台电脑这种规模的局域网可以使用“255.255.0.0”。 网关 网关实质上是一个网络通向其他网络的IP地址。 路由器Windows下叫默认网关网关就是路由路由就是网关不要蒙 规则 计算机的IP地址由两部分组成一部分为网络标识一部分为主机标识同一网段内的计算机网络部分相同主机部分不同同时重复出现。 路由器连接不同网段负责不同网段之间的数据转发交换机连接的是同一网段的计算机。通过设置网络地址和主机地址在互相连接的整个网络中保证每台主机的IP地址不会互相重叠即IP地址具有了唯 一性。 注意事项 在计算机网络中主机ID全部为0的地址为网络地址而主机ID全部为1的地址为广播地址这2个地址是不能分配给主机用的 二、docker网络配置 当你安装了docker,它会自动创建3个网络可以使用 docker network ls 命令来查看 bridge host 1. 网络模式 输入指令docker network ls查看网络模式 1.1 bridge模式 当Docker进程启动时会在主机上创建一个名为docker0的虚拟网桥此主机上启动的Docker容器会连接到这个虚拟网桥上。 虚拟网桥的工作方式和物理交换机类似这样主机上的所有容器就通过交换机连在了一个二层网络中。从docker0子网中分配一个IP给容器使用并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备Docker将veth pair设备的一端放在新创建的容器中并命名为eth0容器的网卡另一端放在主机中以vethxxx这样类似的名字命名并将这个网络设备加入到docker0网桥中。 bridge模式是docker的默认网络模式不写--net参数就是bridge模式。 特点 桥接网络模式的一些主要特点 默认网络模式 当没有明确指定网络模式时Docker容器默认使用桥接网络模式。这意味着每个容器都有自己的网络命名空间和IP地址并且可以通过主机的IP地址进行访问。 容器直接连通 桥接网络模式允许在同一桥接网络中的容器直接进行通信。这使得在同一主机上运行的多个容器可以通过内部网络进行交流无需通过外部网络。 自动分配IP地址 在桥接网络中Docker会自动分配给每个容器一个唯一的IP地址。这有助于容器之间的标识和通信。 主机可访问容器 容器在桥接网络中分配的IP地址是主机上的一个本地地址。因此主机可以通过这个本地地址与容器进行通信这对于某些应用场景非常有用。 网络隔离 使用桥接网络模式每个容器都有独立的网络栈从而实现了网络隔离。这有助于减少横向攻击的风险使得容器在相对安全的网络环境中运行。 端口映射 桥接网络模式允许将容器内部的端口映射到主机上的端口使得外部系统可以通过主机的IP地址和端口与容器进行通信。 容器名解析 Docker通过内置的DNS服务器提供容器名的解析这意味着容器可以使用其他容器的名称进行通信而无需依赖IP地址。 简单易用 桥接网络模式是最简单且最常见的网络模式之一适用于大多数单主机部署的应用场景。容易设置和管理适合开发和测试环境。 使用演示 我们现在运行一个容器使用并且运行 我们查看我们刚才创建的容器状态 我们可以在我们的主机上去访问我们虚拟机上的tomcat官网。 接下来我们模拟两个容器是否能够联通我们先去除所有的容器创建两个新的容器。 我们尝试使用c1容器去连接c2容器输入指令pingip地址 这说明了在同一个网桥中我们的两个容器可以相互连接。我们接下来实现一个案例我们先将soft文件夹下的容器清除掉将我们的一个war拖至soft文件下。 然后我们运行一个容器 我们在主机上的网页上去访问我们的项目 由上图可知当我们去访问我们的接口方法的时候网页报500的错误我们后台也报错了会报一个无法连接到数据库的错误。 接下来我们需要去安装我们的mysql容器。我们在执行指令之前先创建一个文件夹由于安装mysql数据库。 mkdir -p /mysql/{conf,data} 创建好对应的文件夹之后我们切换到对应的文件夹中我们将我们的 my.cnf复制到我们指定的文件夹中 我们切换路径到我们的data文件目录下在该目录下执行创建mysql的命令。 docker run \--name m1 \-v /mysql/conf/my.cnf:/etc/my.cnf \-v /mysql/data:/var/lib/mysql \--privilegedtrue \-e MYSQL_ROOT_PASSWORD123456 \-d mysql/mysql-server:5.7我们进入我们的mysql容器输入指令docker exec -it 容器名 bash 接下来进行我们的数据库登陆操作 · 我们后续需要远程连接必须授权一个用户给予所有的权限。执行下列sql语句 赋予权限
grant all on *.* to yx% identified by 123456;我们退出数据库服务我们重新启动数据库容器 我们进入到soft目录下修改其文件夹的war文中的yml文件 我们重新启动一个t1容器查看日志 指令 docker restart 容器名 //重新启动容器 docker logs 容器名 //查看指定容器的日志 重新访问我们项目的接口方法 后台会报一个错误 但是这里又一个问题 我们先启动t1容器再启动m1容器时我们在进行访问发现我们的容器端口号发送了改变无法连接。 由上图可知我们之前的m1的ip地址是 172.17.0.2现在是172.17.0.2。因为网桥中我们不能定死我们的ip地址。但是我们的自定义网络可以实现而且支持自定义ip好自定义容器名的方式。在下面的自定义网络中会讲解器用法。 使用操作 查看bridge信息
docker inspect bridge 打开容器
docker run -itd --netbridge --name cname iname
查看docker0网桥
查看容器网络
ip addr
ifconfig
外部访问 设置端口映射 docker run -itd --name bridge03 -p 8081:8080 spring:1.0 图解 1.2 host模式 Host模式是Docker中的一种网络模式它与桥接网络模式有所不同。在Host模式下Docker容器与主机共享网络命名空间直接使用主机的网络栈而不是在容器内创建一个新的网络命名空间。 图解 操作命令
docker run -itd --name host01 --nethost spring:1.0
1.3 自定义网络
使用操作 创建自定义网络
docker network create 网段 name
删除网络
docker network rm xx
固定ip启动
docker run -itd --name net01 --net mynet --ip 172.18.0.2 spring:1.0
测试
docker exec -it net01 ping net02
跨网桥测试
docker exec -it net01 ping 172.0.0.2
实例说明 因为我的网桥模式不能指定ip地址因此我们使用自定义网络指定ip地址。首先我们创建一个自定义网络。 我们创建完成之后进行查看网络 查看我们自定义网络的网段方便我们后续自定义ip 输入指令docker inspect 网络名 我们启动tomcat容器指定对应的网络和对应的ip地址 docker run -it \--name t1 \-p 8080:8080 \-v /soft:/usr/local/tomcat/webapps \--net mynet \--ip 172.20.0.200 \^C
[rootlocalhost soft]# docker run -it \--name t1 \-p 8080:8080 \-v /soft:/usr/local/tomcat/webapps \--net mynet \--ip 172.20.0.100 \tomcat:8.5.2按住crtl p和crtl q 出来目录我们启动mysql容器指定对应的网络和对应的ip地址 docker run \
--name m1 \
-v /mysql/conf/my.cnf:/etc/my.cnf \
-v /mysql/data:/var/lib/mysql \
--privilegedtrue \
-e MYSQL_ROOT_PASSWORD123456 \
--net mynet \
--ip 172.20.0.200 \
-d mysql/mysql-server:5.7 我们需要在复制一个容器因为他们没有ping的命令 docker run -it \
--name c1 \
--net mynet \
--ip 172.20.100.100 \
-d centos 我们进入新创建的容器中 进行连接。 我们也可以通过容器名进行连接 我们修改数据库连接的配置文件时不需要知道配置文件在哪里我们可以使用容器名进行配置。但是前提是在同一个网络中用一个自定义网络中。 我们创建一个新的容器c2。 此时我们c1是属于自定义网络mynetc2属于bridge网络。我们在c2中尝试连接c1 接下来我们进行一个操作 输入指令docker network connect bridge c1 是让c1连接到bridge网络中。 我们执行那个命令语句 我们再去查看我们c1的网络状态 我们再去尝试尝试连接我们的c1容器 本期的博客分享到此结束 各位老铁慢慢消化 下期博客博主会带来新货 三连加关注阅读不迷路