很多同学学到 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 限制(最容易混!)

参数

作用

是否硬限制

--cpus

最多用几个核

✅ 是

--cpu-shares

资源竞争时的权重

❌ 否

--cpuset-cpus

绑核

✅ 是

推荐组合用法

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 + 存储 + 网络​ 串起来解决实际问题。

更多推荐