一、Docker 五大网络模式(详解 + 实操)
Docker 内置五种网络模式,默认使用 bridge 网桥模式,所有网络资源均可通过 docker network 系列命令统一管理,不同网络模式的隔离性、通信规则、使用场景差异较大。
1.1 Bridge 网桥模式(默认模式)
Docker 安装完成后,会自动创建 docker0 虚拟网桥。同一网桥下的容器可以相互通信,不同网桥的容器相互隔离,每个容器都拥有独立的虚拟网卡与独立 IP 地址。
核心特点:
- Docker 默认网络模式,新建容器默认接入 docker0 网桥
- 容器拥有独立网络栈、独立 IP、独立端口,网络隔离基础完善
- 支持端口映射,可将容器服务暴露到外网,对外提供访问
- 不支持 DNS 自动解析,容器之间仅可通过 IP 互访,无法通过容器名称通信
实操命令:
bash
运行
# 手动指定bridge模式启动nginx容器
docker run -d --network bridge --name bridge-nginx nginx
1.2 None 无网络模式
该模式会彻底禁用容器的所有网络功能,容器无网卡、无 IP 地址、无独立网络栈,实现完全的网络隔离。
核心特点:
- 容器无法访问外网,也无法与其他容器建立通信
- 网络安全性极高,仅适用于本地独立计算、无需联网的业务场景
实操命令:
bash
运行
# 无网络隔离模式启动容器
docker run -d --network none --name none-test nginx
1.3 Host 主机模式
该模式下容器不会创建独立网络栈,直接完整复用宿主机的网络配置,共享宿主机 IP、网卡、端口及网络协议栈。
核心特点:
- 无需端口映射,宿主机端口即为容器服务端口
- 省去网桥转发环节,网络传输性能最优
- 无网络隔离性,容器直接暴露在宿主机局域网中,安全性较低
实操命令:
bash
运行
# 共享宿主机网络启动容器
docker run -d --network host --name host-nginx nginx
1.4 Container 容器互联模式
该模式为网络共享模式,新创建的容器不会初始化独立网络环境,直接复用已运行容器的网络栈、IP 和端口。
核心特点:
- 两个容器共用同一 IP 和端口,端口资源相互占用,不能冲突
- 容器之间通信无需网络转发,传输效率极高
- 依赖父容器运行状态,父容器停止或删除,子容器网络直接失效
实操命令:
bash
运行
# 1.先启动基础父容器
docker run -d --name base-nginx nginx
# 2.新容器复用父容器网络
docker run -d --network container:base-nginx --name follow-nginx nginx
1.5 自定义网桥模式
自定义网桥是增强版的 Bridge 网桥模式,区别于默认 docker0 网桥,自带内置 DNS 解析服务,是企业开发生产首选网络模式。
核心特点:
- 支持容器通过容器名称直接互访,无需记录 IP
- 可自定义网段、网关,网络规划更灵活
- 网络隔离性优于默认 bridge,适配多项目容器集群部署
网络全套实操命令:
bash
运行
# 查看本地所有Docker网络
docker network ls
# 创建自定义网络(指定网段、网关)
docker network create --subnet=172.16.0.0/16 --gateway=172.16.0.1 mynetwork
# 查看网络详细信息
docker network inspect mynetwork
# 将已有容器加入自定义网络
docker network connect mynetwork 容器名
# 将容器退出自定义网络
docker network disconnect mynetwork 容器名
# 删除无用自定义网络
docker network rm mynetwork
容器名称互访实操:
bash
运行
# 创建自定义网络
docker network create mynet
# 启动两个容器并加入自定义网络
docker run -d --name web1 --network mynet nginx
docker run -d --name web2 --network mynet nginx
# 容器之间可直接通过名称通信
docker exec -it web1 ping web2
二、Dockerfile 全套核心指令(详解 + 案例)
Dockerfile 是构建自定义镜像的脚本文件,指令从上至下顺序执行,每条指令都会生成独立镜像层,是制作自定义镜像的核心文件。
2.1 FROM 基础镜像指令
必须为 Dockerfile 首行指令,用于指定当前镜像依赖的基础环境,优先读取本地镜像,本地无镜像则自动从远程仓库拉取。
dockerfile
# 基于轻量版nginx镜像构建
FROM nginx:1.24-alpine
2.2 MAINTAINER 作者信息(废弃)
用于标注镜像作者与联系方式,新版本 Docker 已废弃,推荐使用 LABEL 替代。
dockerfile
# 旧写法(淘汰)
MAINTAINER test <test@163.com>
# 新规范写法
LABEL author="test"
2.3 RUN 构建执行指令
仅在镜像构建阶段执行,主要用于安装软件、配置环境、初始化系统,多条 RUN 会生成多层镜像,建议合并编写缩小镜像体积。
dockerfile
# 不推荐:分层过多,镜像体积大
RUN yum install wget -y
RUN yum install nginx -y
# 推荐:合并指令+清理缓存,精简镜像
RUN yum clean all && yum install -y wget nginx && rm -rf /var/cache/yum/*
2.4 CMD 容器启动指令
在容器运行阶段执行,定义容器默认启动程序,多个 CMD 仅最后一个生效,可在容器启动时被命令覆盖替换。
dockerfile
# shell写法
CMD echo "容器启动成功"
# 生产推荐exec写法(常驻进程,容器不退出)
CMD ["nginx","-g","daemon off;"]
启动覆盖方式:docker run 镜像名 自定义启动命令
2.5 ENTRYPOINT 入口指令
定义容器固定启动入口,优先级高于 CMD,无法被 docker run 命令直接覆盖,多用于容器初始化脚本、固定启动程序。
dockerfile
# 先执行初始化脚本,再启动业务服务
ENTRYPOINT ["/bin/sh","/start.sh"]
CMD ["nginx"]
2.6 COPY 文件拷贝指令
仅支持本地文件、目录拷贝至镜像内部,无网络下载、无自动解压功能,安全稳定,是生产环境首选拷贝指令。
dockerfile
# 拷贝本地页面文件至nginx站点目录
COPY index.html /usr/share/nginx/html/
# 批量拷贝静态资源目录
COPY ./static /usr/local/nginx/static/
2.7 ADD 高级拷贝指令
兼容本地拷贝 + 远程 URL 下载,可自动识别并解压本地压缩包文件,功能强大但存在文件覆盖风险,日常文件拷贝优先使用 COPY。
dockerfile
# 本地压缩包自动解压至指定目录
ADD test.tar.gz /usr/local/
# 远程下载文件至镜像
ADD 远程文件链接 /tmp/
2.8 ARG 构建变量指令
仅在镜像构建阶段生效,容器运行后失效,用于构建时自定义传参,灵活适配不同构建版本。
dockerfile
# 定义默认版本变量
ARG VERSION=1.24
2.9 ENV 全局环境变量
构建阶段、容器运行阶段全程永久生效,用于配置系统环境、定义全局参数。
dockerfile
# 配置全局系统路径
ENV PATH=/usr/local/bin:$PATH
2.10 EXPOSE 端口声明指令
用于声明镜像对外提供服务的端口,仅为标识声明作用,不会自动开放端口,端口映射需配合 docker run -p 实现。
dockerfile
# 声明容器对外80服务端口
EXPOSE 80
2.11 WORKDIR 工作目录指令
设置镜像构建、容器登录后的默认工作路径,目录不存在则自动创建,后续所有指令的相对路径均基于该目录。
dockerfile
# 容器默认工作目录为/app
WORKDIR /app
2.12 USER 用户降权指令
指定容器运行的系统用户,默认 root 用户,生产环境通过该指令切换普通用户运行程序,实现容器降权,提升安全性。
dockerfile
# 指定普通用户运行容器程序
USER admin
三、Docker 轻量镜像优化方案
企业生产环境要求镜像体积尽可能小,镜像越小,部署越快、漏洞越少、传输成本越低,核心优化方式:
- 选用极简基础镜像:优先使用 alpine、busybox、scratch 轻量化镜像
- 合并 RUN 指令,减少镜像分层,避免冗余层堆积
- 构建过程中及时清理 yum 缓存、日志、无用依赖包
- 杜绝安装冗余工具、无用依赖,精简运行环境
四、Docker 与 VM 虚拟机核心区别
- 架构差异:虚拟机模拟完整硬件设备,独立运行完整操作系统;Docker 共享宿主机内核,仅打包应用与运行依赖
- 性能差异:虚拟机体积大、启动慢、资源占用高;Docker 镜像体积小、秒级启动、资源损耗极低
- 隔离差异:虚拟机是系统级完全隔离,安全性极高;Docker 是应用级轻量隔离,隔离性弱于虚拟机
- 适用场景:虚拟机适合部署独立系统服务;Docker 适合微服务、批量容器化部署
五、Docker 镜像构建命令
bash
运行
# 标准构建:-t 指定镜像名与版本,末尾 . 为构建上下文
docker build -t mynginx:v1 .
# 自定义Dockerfile文件名构建:-f 指定脚本文件
docker build -t mynginx:v1 -f mydockerfile .
六、Docker 存储核心说明
- 镜像层:只读分层存储,多层镜像可共享复用,无法修改
- 容器层:基于镜像生成的可读写临时层,容器删除后数据丢失
- 数据卷:独立持久化存储,脱离容器生命周期,容器删除数据不丢失,用于业务数据持久化
七、Docker 高频核心命令
bash
运行
# 查看本地所有镜像
docker images
# 查看正在运行容器,-a 查看所有容器(含停止状态)
docker ps
docker ps -a
# 容器启停重启
docker start 容器名
docker stop 容器名
docker restart 容器名
# 删除容器、删除镜像
docker rm 容器名
docker rmi 镜像名
# 进入容器终端
docker exec -it 容器名 /bin/bash