服务端2月17日 14:40
Docker 网络模式有哪些?bridge、host 和 overlay 怎么选?Docker 有四种网络模式:bridge(默认)、host、none、overlay。日常开发用 bridge,性能敏感用 host,集群通信用 overlay。
## bridge:默认模式
每个容器有独立网络栈,通过虚拟网桥(docker0)和宿主机通信。容器之间用服务名互访(同网络内),外部通过端口映射访问容器。
bridge 模式的端口映射(-p 8080:80)有一层 NAT 转换,理论上比 host 慢一点,但隔离性好。
自定义网络让容器间可以通过服务名通信:
## host:直接用宿主机网络
容器不隔离网络,直接用宿主机的网络栈。没有 NAT、没有端口...服务端2月17日 14:40
Docker 镜像和 Dockerfile 是什么?从零构建镜像详解Docker 镜像是容器的模板——只读的文件包,包含运行应用所需的一切(代码、运行时、依赖、配置)。Dockerfile 是构建镜像的脚本——一行一个指令,告诉 Docker 怎么组装镜像。
## 镜像是什么
镜像是一个分层的文件系统。每个指令(RUN、COPY、ADD)创建一层,层层叠加。好处:多个镜像共享相同的基础层,节省磁盘和拉取时间。
镜像本身不可变。运行容器时,Docker 在镜像顶部加一个可写层——容器修改文件只影响这个可写层,不修改镜像。
## Dockerfile 基本结构
逐行解读:
- FROM:基础镜像,你的镜像在此之上构建
- WORKDIR:设...服务端2月17日 14:40
Docker 和虚拟机有什么区别?该用哪个?Docker 和虚拟机都是隔离运行环境的技术,但原理完全不同:虚拟机虚拟整套硬件(含操作系统),Docker 共享宿主机内核只隔离进程。结果:Docker 启动快 10 倍、内存省 5 倍,但隔离性不如虚拟机。
## 核心区别
| 维度 | Docker 容器 | 虚拟机 |
|------|------------|--------|
| 虚拟层级 | 进程级隔离(共享内核) | 硬件级虚拟化(独立内核) |
| 启动时间 | 秒级 | 分钟级 |
| 内存占用 | MB 级 | GB 级 |
| 镜像大小 | MB-Tens of MB | GB 级 |
| 性能损耗 | 接近原...服务端2月17日 14:42
Docker 健康检查怎么配?HEALTHCHECK 和 Compose 健康检查详解Docker 健康检查自动检测容器内应用是否正常——容器运行中不代表应用可用。MySQL 可能在做崩溃恢复,Nginx 可能配置错误 502,但容器状态都是 Up。
## Dockerfile 里配置
参数:
- --interval=30s:每 30 秒检查一次
- --timeout=5s:5 秒内没响应算失败
- --retries=3:连续 3 次失败才标记为 unhealthy
健康状态:starting(启动中)→ healthy(健康)→ unhealthy(不健康)
## docker-compose.yml 里配置
start_period 很重要...服务端2月17日 14:42
Docker 多阶段构建怎么用?减小镜像体积的最佳方法多阶段构建让 Dockerfile 分多个阶段——编译阶段用完整环境构建产物,运行阶段只拷贝最终产物。结果:镜像从 1GB+ 缩小到 50MB 以下。
## 问题:单阶段构建镜像太大
node:20 镜像 1.1GB,加上 node_modules 几百 MB,最终镜像可能 1.5GB。但运行时只需要 dist/ 目录和 node 生产依赖。
## 多阶段构建
--from=builder 从第一阶段拷贝指定目录。node:20-slim 只有 200MB,最终镜像约 300MB——比单阶段小 5 倍。
## Go 应用:极致压缩
Go 编译出单个二进制文件,运行时不...服务端2月17日 14:43
Docker 容器数据怎么备份和恢复?Volume 备份和数据库导出实战Docker 容器的数据在 Volume 里——备份 Volume 就是备份数据。两种方式:直接备份 Volume 文件,或从容器内导出。
## 方法一:备份 Volume 目录
简单粗暴,但要求停掉容器或确保数据一致性(数据库正在写入时备份可能损坏)。
## 方法二:用临时容器备份
不停容器,用 --volumes-from 挂载同一个 Volume:
临时容器挂载 pg_data(只读)和宿主机 /backup 目录,把数据打包到宿主机。
## 数据库导出(推荐)
数据库不适合直接拷文件——文件可能处于不一致状态。用数据库的导出工具:
在容器里执行:
...服务端2月17日 14:43
Docker 容器怎么监控?Prometheus + Grafana 和告警配置实战Docker 监控分两层:容器级(CPU/内存/网络)和应用级(QPS/延迟/错误率)。容器级用 cAdvisor + Prometheus,应用级用代码埋点 + Prometheus。统一在 Grafana 看板和告警。
## 最快上手:docker stats
只适合临时查看,没有历史数据、没有告警、没有可视化。
## Prometheus + cAdvisor:容器级监控
cAdvisor 采集容器的 CPU、内存、网络、磁盘 IO 指标,Prometheus 存储和查询,Grafana 可视化。
cAdvisor 暴露 /metrics 端点,Prometheu...服务端2月17日 14:43
Docker 编排工具怎么选?Docker Compose、Swarm 和 Kubernetes 对比Docker 编排工具解决的是多容器管理问题——手动 docker run 管几个容器还行,几十个就力不从心了。三个主流方案:Compose(开发)、Swarm(小团队)、Kubernetes(生产)。
## Docker Compose:开发环境首选
一条 docker compose up -d 启动所有服务。适合本地开发、CI 测试、小型项目部署。
局限:单机运行,不支持自动扩缩容,没有滚动更新,没有服务发现。服务挂了需要手动重启。
## Docker Swarm:轻量级集群
Swarm 内置在 Docker 里,不需要额外安装。支持多节点集群、滚动更新、服务发现...服务端2月17日 14:46
Docker 容器权限怎么管?rootless 模式、用户映射和安全加固Docker 容器默认以 root 运行——如果容器被攻破,攻击者获得容器内的 root 权限,可能逃逸到宿主机。安全的第一步:不要用 root 跑应用。
## 不要用 root 跑应用
USER appuser 之后的所有操作(CMD、ENTRYPOINT)都以 appuser 身份执行。即使应用有漏洞,攻击者只有普通用户权限。
## docker run 指定用户
如果 Dockerfile 里没有 USER,运行时指定:
覆盖 Dockerfile 里的 USER 指令。UID 1000 通常是宿主机的第一个普通用户。
## 只读文件系统
把容器文件系...