服务端2月17日 14:41
Docker Swarm 怎么用?集群部署和运维命令Docker Swarm 是 Docker 自带的容器编排工具——不需要额外安装,几条命令就能把多台服务器组成集群,部署高可用服务。和 Kubernetes 比,Swarm 简单得多,适合中小规模部署。
## Swarm vs Kubernetes:怎么选
| 维度 | Docker Swarm | Kubernetes |
|------|-------------|------------|
| 复杂度 | 低(几条命令) | 高(概念多、配置复杂) |
| 学习成本 | 半天 | 几周 |
| 适用规模 | 3-50 节点 | 10-10000+ 节点 |
| 自动扩缩容 | ...服务端2月17日 14:42
Docker 怎么限制容器资源?CPU、内存和磁盘 IO 配置不限制容器资源,一个失控的容器就能吃光宿主机内存,拖垮同一台机器上的所有服务。Docker 提供了 CPU、内存、磁盘 IO 的精细限制手段,核心是 `docker run` 的资源参数和 docker-compose 的 `deploy.resources` 配置。
## 内存限制:最常用也最重要
```bash
# 限制最大内存 4GB
docker run -d --name myapp --memory=4g myapp:latest
# 限制内存 + 禁用 swap
docker run -d --name myapp --memory=4g --memory-swap=...服务端2月17日 14:43
Docker 私有仓库怎么搭建?Registry 和 Harbor 选型Docker Hub 是公开的,你的私有镜像不想让外人看到。企业内部需要一个私有 Registry 存放自己的镜像,CI/CD 推送镜像到私有仓库,生产服务器从私有仓库拉取。
## 最简方案:Docker 官方 Registry
Docker 官方提供了一个极简的 Registry 镜像,几分钟就能跑起来:
```bash
# 启动私有仓库
docker run -d -p 5000:5000 --name registry registry:2
```
```bash
# 推送镜像
docker tag myapp:latest localhost:5000/myapp:lat...服务端2月17日 14:43
Docker 容器日志怎么管理?轮转、结构化和聚合方案容器日志管理不只是 `docker logs` ——那只能看单个容器的标准输出。生产环境需要日志轮转防止磁盘撑满、日志聚合实现集中查询、结构化日志方便检索。这篇从本地管理到集中式方案逐步展开。
## docker logs 的局限
```bash
docker logs myapp # 查看日志
docker logs -f myapp # 实时跟踪
docker logs --tail 100 myapp # 最近 100 行
```
问题:
- 容器删了日志就没了
- 多容器没法一起搜
- 没有日志轮转,磁盘会被撑满
- 没有结构化字段,搜...服务端2月17日 14:43
Docker 容器间怎么通信?同一项目、跨项目和跨主机方案两个容器要互相访问,怎么连通?同一个 compose 项目的容器用服务名直接访问,不同项目的容器需要共享网络,跨主机通信就得用 Overlay 网络。这篇按场景从简单到复杂讲清楚。
## 同一 docker-compose 项目:默认网络
Docker Compose 自动为每个项目创建一个网络,项目内的容器可以互相用服务名访问:
```yaml
# docker-compose.yml
services:
api:
image: myapp-api
ports:
- "3000:3000"
redis:
image: redis:7
...服务端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...