服务端2月17日 14:45
Docker 容器文件系统怎么工作?分层和 Copy-on-Write 机制容器里写了一个文件,它到底存在哪里?删掉容器后文件去哪了?为什么镜像层是只读的但容器可以写入?理解 Docker 文件系统的工作原理,这些问题就都清楚了。
## 从镜像到容器:分层文件系统
Docker 镜像不是一个大文件——它是多层只读文件系统的堆叠。每个 Dockerfile 指令产生一层:
```dockerfile
FROM ubuntu:22.04 # 层 1:操作系统基础(~70MB)
RUN apt-get update # 层 2:包索引更新
RUN apt-get install -y python3 # 层 3:Python ...服务端2月17日 14:46
Docker 容器出问题了怎么排查?分层排查流程容器启动失败、运行中崩溃、网络不通、数据丢失——Docker 故障排查有一套固定流程,按层级从外到内逐步缩小范围。
## 排查流程总览
```
容器状态异常?
├── 容器没启动 → 查 docker logs
├── 容器运行但行为异常 → 查 docker logs + docker exec
├── 容器网络不通 → 查 docker network + 端口映射
├── 容器数据问题 → 查 Volume 挂载
└── 宿主机资源不足 → 查 docker stats + 系统资源
```
## 第一步:确认容器状态
```bash
# 查看所有容器(包括停止的)
doc...服务端2月17日 14:46
Docker 容器怎么接入 CI/CD?GitHub Actions 和 GitLab CI 集成代码提交后自动构建镜像、跑测试、部署——这就是 CI/CD 和 Docker 的结合。Docker 让构建环境一致、部署产物标准化,CI/CD 让这一切自动运行。这篇讲 Docker 在主流 CI/CD 平台中的集成方式。
## Docker 在 CI/CD 中的三个角色
1. **构建环境**:CI Runner 本身跑在 Docker 容器里,保证每次构建环境一致
2. **构建产物**:`docker build` 产出镜像,推到 Registry,部署时直接拉镜像
3. **部署目标**:生产环境拉镜像启动容器,不需要在服务器上装运行时
## GitHub Actions ...服务端2月17日 14:49
Docker 存储驱动该选哪个?overlay2 和其他驱动的区别Docker 镜像的每一层怎么存、容器怎么在只读层上写入、不同存储驱动有什么性能差异——理解存储驱动的工作原理,能帮你解决容器写入慢、镜像占磁盘、数据丢失这些问题。
## 容器文件系统的分层结构
Docker 镜像由多个只读层组成,容器启动时在最上面加一层可写层:
```
┌─────────────────────┐
│ 可写层(容器层) │ ← docker run 产生的可写层
├─────────────────────┤
│ 镜像层 3(App) │ ← COPY / RUN 指令产生的层
├─────────────────────┤
│ 镜...服务端2月17日 14:49
Docker 容器资源怎么监控?从 docker stats 到 Prometheus 的完整方案容器跑着跑着内存爆了、CPU 拉满了、磁盘写满了——这些问题的根源都能通过资源监控提前发现。Docker 提供了从命令行到 API 多层级的资源监控手段,这篇按从简单到复杂的顺序讲清楚。
## docker stats:最快上手
```bash
# 查看所有运行中容器的资源使用
docker stats
# 只看特定容器
docker stats myapp
# 只输出一次(不刷新)
docker stats --no-stream
# 只看特定指标
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsag...服务端2月17日 14:53
Docker Desktop 怎么用?安装配置和常见问题Docker Desktop 是在 Mac 和 Windows 上用 Docker 最省事的方式——装一个应用就拥有完整的 Docker 环境,不需要折腾虚拟机或 Linux 双系统。但它不只是个安装包,里面的 WSL2 集成、Kubernetes 支持、资源管理有些门道值得了解。
## Docker Desktop 里装了什么
Docker Desktop 不是 Docker Engine 的 GUI 包装——它是一个完整的开发环境:
| 组件 | 作用 |
|------|------|
| Docker Engine | 容器运行时 |
| Docker CLI | 命令行工...服务端2月17日 14:54
Docker 反向代理该用 Nginx 还是 Traefik?部署和自动发现对比Docker 部署反向代理的核心问题是:容器 IP 每次重启都会变,手动配 upstream 不现实。Nginx 需要手动更新配置,Traefik 能自动发现容器。选哪个取决于你的场景。
## Nginx:手动配置但性能最强
### 基本反向代理
```yaml
# docker-compose.yml
services:
nginx:
image: nginx:1.25
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d:r...服务端2月17日 14:54
Docker 容器怎么监控?Prometheus + Grafana 完整方案容器出问题了,`docker stats` 只能看到 CPU 和内存——磁盘 IO、网络、进程状态全不知道。完整的监控系统需要指标采集、存储、可视化、告警四层。
## Docker 监控的四层架构
```
容器 → 采集器 → 存储后端 → 可视化
cAdvisor Prometheus Grafana
Node Loki
Exporter
```
- **采集层**:从容器和宿主机收集指标数据
- **存储层**:时序数据库存指标,日志库存日志
- **可视化层**:Dashboard 展示趋势、图表
- **告...服务端2月17日 14:54
Docker 容器日志怎么聚合?ELK、Loki 和 EFK 怎么选容器一多,日志分散在各处——`docker logs` 只能看单个容器的输出,排查问题要一个一个翻。日志聚合把所有容器的日志集中到一个地方,搜索、过滤、告警一站搞定。
## Docker 日志驱动:日志的入口
Docker 支持多种日志驱动,决定容器日志的去向:
```bash
# 查看当前日志驱动
docker info --format '{{.LoggingDriver}}'
# 默认是 json-file
```
```yaml
# docker-compose.yml 全局配置
services:
app:
logging:
driver: js...服务端2月17日 14:54
Docker 容器配置怎么管理?环境变量、挂载和配置中心怎么选Docker 容器的配置管理不是把配置写死在镜像里——那样每次改配置都得重新构建。正确做法是配置与镜像分离,容器启动时注入配置,运行时能动态更新。这篇讲清楚 Docker 环境下四种配置管理方式的适用场景和实现方法。
## 环境变量:最简单的配置注入
适合少量、扁平的配置项(数据库地址、端口、开关):
```yaml
# docker-compose.yml
services:
app:
image: myapp:latest
environment:
- DB_HOST=postgres
- DB_PORT=5432
- L...