Docker 核心复盘:从资源限制到企业级高可用实战
很多同学学到 Docker 中后期都会有一种感觉:单跑一个容器不难,难的是把「限制、仓库、编排、存储、网络」串成一套能上生产的体系。这篇博客把 Docker 的五大关键模块拆开讲透,最后附上一个可直接落地的 高可用 WordPress 实战案例,适合复习,也适合直接当企业级参考。
一、为什么一定要做 Docker 资源限制?
Docker 本质上是靠 cgroup 来做资源隔离的,如果不加限制,单个容器很可能把宿主机的 CPU 或内存吃满,影响其他业务。
1️⃣ 内存限制(简单直接)
docker run -m 512m nginx
超过 512MB,容器会被 OOM Kill。
进阶玩法:
docker run -m 1g --memory-swap 2g nginx
👉 内存 + swap 总上限 2G。
2️⃣ CPU 限制(最容易混!)
|
参数 |
作用 |
是否硬限制 |
|---|---|---|
|
|
最多用几个核 |
✅ 是 |
|
|
资源竞争时的权重 |
❌ 否 |
|
|
绑核 |
✅ 是 |
✅ 推荐组合用法:
docker run \
-m 1g \
--cpus 2 \
--cpuset-cpus 1,2 \
--cpu-shares 2048 \
my-java-app
📌 记住一句话:
--cpus管“不能超”,--cpu-shares管“抢不过别人”。
二、企业级私有仓库:Harbor 到底强在哪?
如果你还在用 Docker Hub 放生产镜像,真的该换 Harbor 了。
Harbor 的核心优势
✅ 镜像安全(HTTPS + RBAC)
✅ 镜像扫描(漏洞检测)
✅ 双向复制(多机房高可用)
✅ 支持 Docker / Helm / OCI
快速部署流程(精简版)
tar -xzf harbor-offline-installer-*.tgz
cd harbor
vim harbor.yml
./install.sh
推送镜像示例:
docker login harbor.example.com
docker tag nginx:latest harbor.example.com/library/nginx:latest
docker push harbor.example.com/library/nginx:latest
⚠️ 常见坑
-
HTTPS 证书不匹配 →
x509报错 -
双向复制前先测网络连通性
三、Docker Compose:单机编排的神器
Compose 的核心价值只有一句话:
用一个 YAML 文件定义整个应用栈。
常用命令速记
docker-compose up -d
docker-compose down -v
docker-compose logs -f web
docker-compose config -q
一个典型例子:WordPress + MySQL + Redis
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: rootpass
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:alpine
wordpress:
image: wordpress
depends_on:
- db
- redis
🚨 重点提醒
-
depends_on≠ 服务就绪 -
生产环境一定要加 healthcheck
四、Docker 存储:别让数据跟着容器一起没了
容器是无状态的,数据必须外挂。
四种存储方式对比
|
方式 |
是否推荐 |
说明 |
|---|---|---|
|
命名卷 |
✅ 强烈推荐 |
容器删了数据还在 |
|
匿名卷 |
❌ |
容易丢 |
|
绑定挂载 |
⚠️ |
开发方便,生产慎用 |
|
数据卷容器 |
✅ |
备份/恢复神器 |
数据卷容器备份 MySQL 示例
docker run --volumes-from db_container \
-v $(pwd):/backup ubuntu \
tar cvf /backup/mysql.tar /var/lib/mysql
五、Docker 网络:服务之间怎么“说话”?
五种网络模型(面试常问)
|
网络模式 |
特点 |
|---|---|
|
bridge |
默认,NAT |
|
none |
无网络 |
|
host |
共享主机网络 |
|
container |
Sidecar 模式 |
|
自定义 bridge |
✅ 生产首选 |
✅ 最佳实践
-
永远不要用默认
docker0 -
自定义网络 = 自动 DNS + 隔离
docker network create my_net
docker run --network my_net nginx
六、综合实战:高可用 WordPress 集群 🌐
架构一览
用户
↓
Nginx LB
↓
WordPress 集群(2 实例)
↓
Redis → MySQL
✅ Harbor 存镜像
✅ Compose 编排
✅ 自定义网络
✅ 数据卷持久化
✅ 资源限制全覆盖
完整 docker-compose.yml可直接复用(见原笔记第六部分)。
七、一句话总结(建议背下来)
Docker 学得好不好,就看你能不能把 资源限制 + Harbor + Compose + 存储 + 网络 串起来解决实际问题。
更多推荐
所有评论(0)