目录
1. docker network create 常用选项及示例
(二)挂载主机文件 / 多目录案例(以 nginx 容器为例 )
一、Docker 容器的网络模式
1. Bridge 模式
-
含义:
Docker 创建的虚拟网络交换机(docker0
),容器通过veth pair
虚拟网卡接入隔离子网。 -
特点:
-
容器获得独立私有 IP(如
172.17.0.2
) -
默认启用 NAT 地址转换
-
同网络内容器互通,跨网络隔离
-
-
作用:
-
容器网络隔离:避免与宿主机网络冲突
-
便捷互通:同一 Bridge 网络内自动 DNS 解析
-
访问外网:通过 iptables MASQUERADE 规则实现出向流量伪装
-
-
配置:
# 创建自定义Bridge网络(解决默认网络无DNS问题) docker network create \ --driver bridge \ # 网络驱动类型 --subnet 192.168.5.0/24 \ # 明确子网范围(防IP冲突) --gateway 192.168.5.1 \ # 指定网关地址 my-bridge # 网络名称 # 容器接入自定义网络 docker run -d \ --name web \ --network my-bridge \ # 绑定网络 --ip 192.168.5.10 \ # 固定IP(可选) nginx
2. Host 模式
-
含义:
容器直接共享宿主机的网络命名空间,使用宿主机 IP 和端口资源。 -
特点:
-
无独立网络栈(
ifconfig
显示宿主机网卡) -
无 NAT 转发层
-
-
作用:
-
网络零损耗:消除 NAT 性能开销(延迟降低 10%~15%)
-
直接暴露服务:省去端口映射步骤
-
-
配置:
docker run -d \ --network host \ # 启用Host模式 nginx # 容器直接监听宿主机80端口
3. Container 模式
-
含义:
新容器共享指定容器的网络命名空间(共用 IP、端口、MAC 等)。 -
特点:
-
多容器共享同一网络身份
-
通过
localhost
直接互访
-
-
作用:
-
进程协同:实现 Sidecar 模式(如日志收集器监控应用容器)
-
零延迟通信:容器间直接环回接口通信
-
-
配置:
# 启动目标容器(提供网络栈) docker run -d --name web nginx # 新容器共享web容器的网络 docker run -it \ --network container:web \ # 绑定目标容器 alpine \ wget -qO- http://localhost # 直接访问web容器的服务
4. None 模式
-
含义:
容器无任何网络接口(仅保留lo
环回)。 -
特点:
-
极致网络隔离
-
需手动配置网络栈
-
-
作用:
-
安全沙箱:禁止所有网络通信(金融级数据处理)
-
自定义网络:用户手动添加复杂网络配置
-
-
配置:
docker run -it \ --network none \ # 禁用网络 alpine ip addr # 仅显示lo接口
5. Overlay 模式
-
含义:
基于 VXLAN 隧道封装的跨主机虚拟网络,用于集群环境。 -
特点:
-
大二层网络抽象
-
支持 TLS 加密通信
-
-
作用:
-
跨主机直连:不同物理机上的容器互通如局域网
-
服务发现:内置分布式 KV 存储(Swarm 集群)
-
-
配置:
# 初始化Swarm集群(必需) docker swarm init --advertise-addr <宿主机IP> # 创建加密Overlay网络 docker network create \ -d overlay \ --subnet 10.11.0.0/16 \ --opt encrypted \ # 启用数据加密 swarm-net
6. Macvlan 模式
-
含义:
为容器分配真实 MAC 地址,使其作为独立设备接入物理网络。 -
特点:
-
容器直连物理网络
-
需手动管理 IP
-
-
作用:
-
物理网络集成:容器直接获取物理网段 IP
-
绕过 NAT:外部设备可直接访问容器
-
-
配置:
docker network create \ -d macvlan \ --subnet 192.168.1.0/24 \ --gateway 192.168.1.1 \ -o parent=eth0 \ # 绑定物理网卡 -o macvlan_mode=bridge \ # MACVLAN模式 macvlan-net docker run -d \ --network macvlan-net \ --ip 192.168.1.105 \ # 必须指定未用IP nginx
7. 自定义网络模式
-
含义:
用户根据需求创建的定制化网络,支持多种驱动(Bridge/Overlay/Macvlan等)。 -
特点:
-
可定义子网/IP范围
-
支持自动 DNS 服务发现
-
网络策略精细化控制
-
-
作用:
-
隔离环境:创建逻辑隔离的网络域
-
服务发现:容器名自动解析为 IP
-
跨主机通信:Overlay 驱动支持集群
-
-
配置:
# 创建自定义Bridge网络 docker network create \ --driver bridge \ # 网络驱动类型 --subnet 10.7.0.0/16 \ # 自定义子网 --gateway 10.7.0.1 \ # 网关地址 --ip-range 10.7.1.0/24 \ # IP分配范围 --attachable \ # 允许运行中容器接入 my-network # 网络名称 # 容器加入自定义网络 docker run -d --name web --network my-network nginx
二、端口映射
1. 端口映射
-
含义:建立宿主机端口与容器端口的流量转发通道。
-
特点:
-
基于 iptables DNAT 规则
-
支持 TCP/UDP 协议
-
-
作用:
-
暴露容器服务到外部网络
-
解决容器网络隔离导致的访问限制
-
2. 随机映射端口
-
含义:由 Docker 自动分配宿主机可用端口。
-
作用:
-
避免端口冲突
-
快速测试多实例服务
-
-
配置:
# 映射所有EXPOSE声明的端口 docker run -d -P nginx # 大写P参数 # 查看映射关系 docker port <容器名> # 输出示例:80/tcp -> 0.0.0.0:32768 #查看进程状态 docker ps -a
3. 指定映射端口
docker run 用于创建并启动新的容器,通过-p可以指定容器端口到宿主机端口的映射
(1)固定端口
本质:将宿主机指定端口永久绑定到容器端口。
配置:
# 基础语法:-p <宿主机端口>:<容器端口>[/协议]
docker run -d -p 8080:80 nginx # 宿主机8080 → 容器80
# 绑定特定IP(仅该IP可访问)
docker run -d -p 192.168.1.100:8080:80 nginx
# 多协议支持
docker run -d \
-p 80:80/tcp \ # TCP协议
-p 53:53/udp # UDP协议
dns-server
# 端口范围映射
docker run -d -p 8000-8010:8000-8010 port-app
(2)宿主机随机端口
本质:由 Docker 自动分配宿主机可用端口。
配置:
# 随机绑定宿主机端口到容器指定端口
docker run -d -p 80 nginx # 查看端口:docker port <容器名>
# 随机绑定TCP和UDP端口
docker run -d -p 80/tcp -p 53/udp dual-protocol-app
# 批量随机映射(容器EXPOSE的所有端口)
docker run -d -P nginx # 大写P参数
查看映射:
docker port my-container
# 输出:80/tcp -> 0.0.0.0:32768
# 443/tcp -> 0.0.0.0:32769
三、容器互联
容器互联(Container Networking) 是 Docker 中实现容器间通信的核心机制,其核心逻辑为:
通过虚拟网络层,使多个容器在隔离环境中安全、高效地交换数据,无需依赖物理网络配置。
1. 使用 --link 选项
-
含义:在容器间建立单向网络连接。
-
特点:
-
自动更新 /etc/hosts 文件
-
注入环境变量
-
-
作用:
-
实现容器间基础通信
-
提供简单的服务发现
-
(1)创建源容器
docker run -dit --name web01 centos:7
(2)创建接收容器
docker run -dit --name web02 --link web01:myweb01 centos:7
(3)测试容器互联
#登录
docker exec -it web02 /bin/bash
#查看
cat /etc/hosts
#测试
ping myweb01
四、容器间通信实现案例
因 --link
选项渐被弃用,推荐用 Docker 网络实现容器互联,docker network create
用于创建自定义网络,支撑容器间及容器与外部通信。
1. docker network create
常用选项及示例
(一)--driver, -d
指定网络驱动程序,默认 bridge
,常见驱动:
bridge
:单 Docker 主机容器间通信,示例 :docker network create -d bridge my_bridge_network
host
:容器用宿主机网络接口,无网络隔离overlay
:多 Docker 主机跨主机网络,用于 Docker Swarm 集群macvlan
:给容器分配 MAC 地址,模拟独立物理设备
(二)--subnet
指定网络子网,用 CIDR 表示法,示例 :docker network create --subnet=172.18.0.0/16 my_subnet_network
(三)--gateway
指定网络网关 IP 地址,示例 :
docker network create \
--subnet=172.19.0.0/16 \
--gateway=172.19.0.1 \
my_gateway_network
(四)--ip-range
指定容器可用 IP 地址范围,示例 :
docker network create \
--subnet=172.20.0.0/16 \
--gateway=172.20.0.1 \
--ip-range=172.20.1.0/24 \
my_ip_range_network
(五)--internal
设为内部网络,容器无法访问外部网络,示例 :docker network create --internal my_internal_network
(六)--attachable
允许独立容器(非服务器容器 )连入网络,示例 :docker network create --attachable my_attachable_network
2. 容器间通信步骤
(一)创建自定义网络
执行 docker network create my_net
,先构建容器通信的网络基础。
(二)创建一个不在此自定义网络的容器
docker run -dit --name web03 centos:7
(三)创建两个容器,并加入自定义网络
docker run -dit --name pc01 --net=my_net centos:7
docker run -dit --name pc02 --net=my_net centos:7
(四)登录到容器,测试通信结果
docker exec -it pc01 /bin/bash
ping pc02 #通
ping web03 #不通
五、数据持久化技术
一、数据卷基础概念
Docker 数据卷(Data Volumes)是实现容器与宿主机数据持久化存储、共享的机制。它是供一个或多个容器使用的特殊目录,绕过容器文件系统,直接关联宿主机目录 / 文件,容器删除后数据卷数据仍留存,保障数据持久化 。
二、数据卷的作用
-
数据持久化:容器生命周期短暂,内部文件系统数据随容器删除消失,数据卷将数据存宿主机,避免因容器删除丢失 。
-
数据共享:多个容器可挂载同一数据卷,实现配置文件、日志等数据共享,适配需共享数据的场景 。
-
数据备份和恢复:数据存于宿主机,便于对数据卷执行备份、恢复操作 。
-
分离数据和应用:数据存数据卷,让容器镜像更轻巧(仅含应用程序),提升容器可移植性与可维护性 。
三、数据卷创建与使用
(一)匿名数据卷
创建容器时用 -v
或 --volume
参数创建、挂载。如:
docker run -dit -v /data1 -v /data2 --name web04 centos:7
会在容器内建 /data1
、/data2
数据卷,宿主机对应存储目录为 /var/lib/docker/volumes/
下自动分配的目录,容器删除后宿主机数据仍在 。可进入容器(docker exec -it web04 /bin/bash
)验证数据卷目录。
(二)具名数据卷
- 创建:通过
docker volume create my_volume
命令,创建名为my_volume
的具名数据卷,便于管理识别 。 - 挂载使用:创建容器时挂载,如
docker run -d -v my_volume:/data --name my_container nginx
,先建具名卷,再挂载到容器/data
目录 。
四、数据卷共享
- 借助
--volumes-from
参数,让新容器挂载已有容器的数据卷,实现数据共享。示例:docker run -dit --volumes-from web04 --name web05 centos:7 /bin/bash
新容器
web05
会挂载web04
已挂载的数据卷,即便web04
删除,只要数据卷未删,web05
仍能访问数据;且多个容器共享数据卷时,数据修改会影响所有挂载该卷的容器 。
五、挂载主机目录 / 文件作为数据卷
(一)挂载主机目录案例(以 httpd 容器为例 )
docker run -dit -p 8080:80 -v /data1:/usr/local/apache2/htdocs --name web06 httpd
将宿主机 /data1
目录挂载到容器 /usr/local/apache2/htdocs
目录,可在宿主机 /data1
建测试文件(如 echo "ni hao">/data1/index.html
),通过 curl 192.168.10.101:8080
访问验证 。
(二)挂载主机文件 / 多目录案例(以 nginx 容器为例 )
-
准备工作:在宿主机建挂载目录(
mkdir -p /www/{conf,html}
),将 nginx 配置文件放/www/conf
,网页代码放/www/html
。 -
创建容器挂载:
docker run -d -p 9090:80 \ -v /www/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /www/html:/www/html \ -v /www/nginx/log:/var/log/nginx \ --name web07 nginx /bin/bash -c "nginx"
或简化启动命令(利用 nginx 默认启动指令 ):
docker run -d -p 9090:80 \ -v /www/conf/nginx.conf:/etc/nginx/nginx.conf \ -v /www/html:/www/html \ -v /www/nginx/log:/var/log/nginx \ --name web08 nginx "nginx"
实现主机文件、多目录挂载到 nginx 容器对应位置,需注意挂载文件时,宿主机要先有对应文件,否则会创建同名目录致容器内无法正常使用文件 。
数据卷通过灵活的创建、挂载、共享等操作,满足 Docker 容器在数据持久化、共享协作等场景的需求,是 Docker 数据管理的核心手段之一 。
六、Docker 数据管理注意事项总结
在 Docker 进行数据管理时,需从多维度保障数据有效管理,具体注意事项如下:
-
类型适配场景:依据需求选数据卷类型,匿名卷(创建简,管不便 )存临时中间数据(如编译文件 );具名卷(易管理共享 )存持久化高频使用数据(如数据库 );挂载主机目录卷适配主机交互场景(共享配置、数据 )。
-
路径规范使用:挂载主机目录作数据卷,务必用绝对路径,否则挂载失败。
-
数据卷定期清理:借
docker volume ls
查数据卷,用docker volume rm
清理不用的匿名 / 具名卷,释放磁盘空间。 -
容器数据持久化:容器文件系统数据易失,需持久化的数据(尤其是数据库、日志等关键数据 )存数据卷;多容器挂载同卷要处理并发,可在应用层设同步机制(锁、事务 );关键数据(如 MySQL 数据目录
/var/lib/mysql
)绑定数据卷,保障可恢复 。