Docker 备忘录 - 08. 网络模式(docker配置网络模式)
nanshan 2024-10-30 02:53 11 浏览 0 评论
当我们项目中使用多个容器时,我们就会面临容器间的通信问题,如哪些容器能够互相通信?哪些需要隔离?如何使用容器名称通信等。而 Docker 网络就是用来解决容器间通信问题的。
一、常用命令
# 查看所有网络
docker network ls
# 创建网络,默认为 bridge 类型
docker network create <网络名称>
# 删除一个或者多个网络
docker network rm <网络ID/名称>
# 删除所有未使用的网络
docker network prune
# 查看网络详细信息
docker network inspect <网络ID/名称>
# 连接容器到网络
docker network \
connect <网络ID/名称> <容器ID/名称>
# 从网络中删除容器
docker network \
disconnect <网络ID/名称> <容器ID/名称>
二、默认网络
Docker 会默认创建三个网络:
- bridge 网络:网络驱动类型为 bridge,即 bridge 网络模式,该模式会为每个容器创建虚拟网卡并分配 IP,该网络也是启动容器时默认使用的网络。
- host 网络:网络驱动类型为 host,即 host 网络模式,该模式会让容器共享宿主机的网络配置,与宿主机公用 IP 与端口号。
- none 网络:网络驱动类型为 null,即 none 网络模式。该模式下容器无网络配置,即禁用网络功能。
三、bridge 网络模式
docker 默认的网络模式,其会为容器创建独立的网络命名空间,每个容器都具有独立的网卡、IP 地址等,这些容器都将连接到一个 docker0 的虚拟网桥上。
docker0 是 默认的 bridge 网络在宿主机上创建的一个虚拟网桥,主要用于连接到 bridge 网络的容器与宿主机、容器与容器之间的网络通信。
我们查看下宿主机的网络配置信息:
下面我们启动一个容器,并查看下他的网络信息:
# 启动一个容器
docker run -d -p 80:80 \
--name liwy-nginx nginx
# 查看容器详情
docker inspect liwy-nginx | tail -n 21
通过上面的信息,我们可以看到,启动的容器默认使用的就是 bridge 网络,而且为容器分配了一个 IP:172.17.0.2,而他的网关就是宿主机中的 docker0:172.17.0.1。
此时我们进入容器内看下该容器的网络信息:
这里我们看到容器的网络配置中有一个( 10: eth0@if11 )的网络接口,其 IP 的确是 172.17.02。
然后我们再到宿主机上查看下网络配置:
此时我们会发现多了一个 veth 开头的网络接口( 11: veth319446e@if10 ),这个虚拟网络接口用来和上面启动的容器进行通信的。
观察容器中的 eth0 网络接口与宿主机的 veth 网络接口,我们可以发现这两个接口是相互对应的:如 11:veth319446e@if10 就表示宿主机的 11:veth 与容器的 10:eth0 对应。
也就是说 docker0 网桥在宿主机上会给每个容器创建一个 veth 开头的虚拟网络接口,在容器内,会为每个容器会创建 eth0 的虚拟网络接口,使用 veth-pair 技术,每个 veth 会匹配容器内部的 eth0,两两配对,实现通信。如下图:
默认情况下,容器在创建时会连接到这个默认桥接网络 docker0,它的默认的网段为 172.17.0.0/16,它的IP地址是 172.17.0.1。而连接到 docker0 的容器,会为其分配一个IP,如上容器IP为 172.17.0.2。
但是容器 IP 不是固定的,如果我们停掉一个已启动的容器,那么他的 IP 就会收回,然后再启动另外一个新的容器,此时之前收回的 IP 就会分配给新的容器。所以在实际生产环境中,容器之间通常不能直接使用 IP 访问,而是使用容器名称来访问,但是默认的 bridge 网络并不支持使用容器名称访问,后面我们会使用自定义网络的方式来解决这个问题。
三、host 网络模式
该模式下,容器与宿主机使用同一网络命名空间,容器也不会虚拟出自己的网卡而是与宿主机共享网络配置,使用的是宿主机的 IP 和端口。
我们启动一个使用 host 网络的容器,并查看下他的网络配置:
# 启动容器并连接到 host 网络
# 使用 host 网络时就不用设置端口映射了,
# 因为其使用的就是宿主机的端口。
docker run -d --network host \
--name liwy-nginx-host nginx
# 查看容器的网络配置信息
docker inspect \
liwy-nginx-host | tail -n 21
可以看到该模式下,容器并没有被分配 IP,然后我们在到容器中查看的网络配置:
我们发现这里容器的网络配置与宿主机的网络配置是完全一样的,其实它就是共享了宿主机的网络配置。
四、none 模式
该模式容器有独立的网络命名空间,但并没有对容器进行任何网络设置,如分配网卡、IP 等。也就是说禁用了网络功能,不能进行网络通信。
# 启动容器并连接到 none 网络
docker run -d --network none \
--name liwy-nginx-none nginx
五、共享容器网络
我们还可以通过使用 --network container:<容器名称/ID> 的方式来指定一个已有的容器,并与其共享网络配置。
此时我们的容器不会创建自己的虚拟网卡和 IP ,而是和指定的容器共享 IP、端口等。
# 启动容器并指定与 liwy-nginx 共享网络
docker run -d \
--network container:liwy-nginx \
--name liwy-nginx-2 nginx
这里如果停掉容器 liwy-nginx,那么容器 liwy-nginx-2 的网络也没有了,因为容器 liwy-nginx-2 是依赖容器 liwy-nginx 的。
六、自定义 bridge 网络
1. 创建网络
我们还可以创建自定义的网络,并将多个容器连接到同一网络。连接到自定义网络后,容器可以使用 IP 地址或容器名称相互通信。
# 创建一个网络
docker network create liwy-net
我们创建的新网络,其默认也是 bridge 模式,但是它是一个新的桥接网络,和 docker0 是独立开的,他们可以有不同的配置和属性。我们到宿主机上看下网络信息:
这里可以看到,我们创建新的 bridge 网络后,会在宿主机中创建一个新的 br-ef6852c0e194 网桥,他的网段与 docker0 是不同的,之后我们加入到这个新网络的容器也将会和这个新的网桥进行通信。
2. 连接容器到网络
这里我们创建两个容器,liwy-nginx-1 和 liwy-nginx-2,并将其加入到我们刚才创建的自定义网络中:
# 运行容器1并加入到我们创建的网络
docker run -d --network liwy-net \
--name liwy-nginx-1 nginx
# 运行容器2并加入到我们创建的网络
docker run -d --network liwy-net \
--name liwy-nginx-2 nginx
如果容器已经存在了,可以使用 docker network connect 命令加入到网络:
# docker network connect <网络ID/名称> <容器ID/名称>
docker network connect \
liwy-net liwy-nginx-1
然后我们查看 liwy-nginx-1 和 liwy-nginx-2 容器的网络信息:
可以看到 liwy-nginx-1 容器的 IP 是 172.18.0.2,liwy-nginx-2 容器的 IP 是 172.18.0.3 。
3. 测试容器间通信
默认的网络(bridge)只能通过 IP 来进行容器间的访问,不能使用容器名访问。而我们创建的自定义网络,Docker 会启用内置的 DNS 服务,允许容器使用服务名称来相互访问。
现在我们进入到 liwy-nginx-1 ,先通过IP确认下能ping的通 liwy-nginx-2,然后我们在使用容器名称试一下:
每个 bridge 模式的网络,由于使用的网络段不同,所以不在同一网络中的容器无法实现通信,从而实现了网络间的隔离。
备注:
容器内安装ip命令:apt update && apt install -y iproute2
容器内安装ping命令:apt update && apt install -y inetutils-ping
相关推荐
- ssh终端xshell日志查看命令(xshell怎么看日志)
-
现在我们云服务器运维较多用的是SSH工具,其中常用的包括PUTTY、XSHELL等,其实大同小异界面UI稍微不同,但是都可以进入远程连接。这里有朋友提到如何查看服务器的日志文件,这个其实和是否使用XS...
- 使用 Fail Ban 日志分析 SSH 攻击行为
-
通过分析`fail2ban`日志可以识别和应对SSH暴力破解等攻击行为。以下是详细的操作流程和关键分析方法:---###**一、Fail2ban日志位置**Fail2ban的日志路径因系统配置...
- 如何高效读取Linux日志文件?这些命令要熟记于心!
-
在Linux系统中,日志文件通常存储在/var/log目录下。比如,/var/log/syslog(或/var/log/messages,视发行版而定)记录系统整体事件,/var/log/a...
- Windows服务器远程登录日志查询方法,linux查看登录日志方法
-
概述本文介绍Windows、Linux服务器查询系统的远程登录日志方法。根据服务器所使用的操作系统不同,有以下两种查询方法。Linux操作系统的登录日志查询通过远程连接登录Linux服务器,使用roo...
- iptables防火墙如何记录日志(防火墙日志查看)
-
例如:记录所有ssh服务的登录的日志首先,我们需要了解如何将所有的iptables的INPUT链数据包记录到/var/log/messages中。如果你已经有一些iptables规则了,那么将记录日志...
- 如何安全管理SSH密钥以防止服务器被入侵
-
SSH密钥安全管理实施指南(2025年更新版)一、密钥生成与存储规范高强度密钥生成bashCopyCodessh-keygen-ted25519-a100#生成ED25519算法密钥(比...
- 在CentOS上安装nginx服务器(centos搭建代理服务器)
-
一、环境描述1.虚拟机配置CPU:单核内存:2GB硬盘:120GBIP:10.24.17.1082.操作系统版本:CentOS6.6x86_64安装方式:Minimal3.虚拟化环境VM...
- CentOS7安全加固的一份整理规划建议
-
◆更新系统:及时更新CentOS7操作系统版本和安全补丁,确保系统以最新状态运行。◆关闭不必要的服务:在运行系统时,应关闭不需要的服务和端口,以减少系统暴露的攻击面。◆安装防火墙:使用iptables...
- 第四十七天-二叉树,centOS安装tomcat,Maven,vsftpd
-
学习笔记:1.Maven是Apache下的一个纯Java开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。Maven...
- Linux远程桌面连接使用教程 Widows终端远程连接Linux服务器
-
一、前言为什么不是远程连接Linux服务器?因为我不会,远程连接window我就用电脑自带的“远程桌面连接”。以下所述都是在CentOS操作系统下的。服务器刚换成Linux的时候很迷茫,感觉无从下手...
- CentOS 安全加固操作,保护你的操作系统
-
系统加固是保障系统安全的重要手段,对于维护企业数据安全、用户隐私以及系统稳定运行具有重要意义。加固后的系统更加健壮和稳定,能够有效减少因安全问题导致的系统故障和停机时间,提高系统的可用性和可靠性。通过...
- Dockerfile部署Java项目(docker如何部署java项目)
-
1、概述本文主要会简单介绍什么是Docker,什么是Dockerfile,如何安装Docker,Dockerfile如何编写,如何通过Dockerfile安装jar包并外置yaml文件以及如何通过do...
- CentOS7云主机部署Fail2ban阻断SSH暴力破解
-
关于Fail2banFail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽)例如:当有人在试探你的HTTP、SSH、SMTP、FTP密...
- 在CentOS7上用源码编译安装PostgreSQL
-
1、新建postgres用户#useraddpostgres&&passwdpostgres2、安装依赖包#yum-yinstallmakegccgcc-c++readline...
- pure-ftpd 使用(ftp prompt命令)
-
pure-ftpd是一个免费的ftp软件,其他介绍就不多说了。我们直接开始主题安装centosyuminstallepel-releaseyuminstallpure-ftpd配置备份原配置...
你 发表评论:
欢迎- 一周热门
-
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
[常用工具] OpenCV_contrib库在windows下编译使用指南
-
Ubuntu系统Daphne + Nginx + supervisor部署Django项目
-
WindowsServer2022|配置NTP服务器的命令
-
WIN11 安装配置 linux 子系统 Ubuntu 图形界面 桌面系统
-
解决Linux终端中“-bash: nano: command not found”问题
-
NBA 2K25虚拟内存不足/爆内存/内存占用100% 一文速解
-
Linux 中的文件描述符是什么?(linux 打开文件表 文件描述符)
-
K3s禁用Service Load Balancer,解决获取浏览器IP不正确问题
-
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)