🗃️

自建 MySQL 数据库服务

用 Docker 运行 MySQL 8.0,Volume 持久化数据,配置资源限制和安全管理

MySQL 8.0 Volume 安全配置
初级

📄 docker-compose.yml

services:
  mysql:
    image: mysql:8.0
    container_name: mysql-server
    restart: unless-stopped
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=your_root_password
      - MYSQL_DATABASE=testdb
      - MYSQL_USER=appuser
      - MYSQL_PASSWORD=app_password
    volumes:
      - mysql-data:/var/lib/mysql
      - ./mysql-init:/docker-entrypoint-initdb.d  # 初始化脚本
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    deploy:
      resources:
        limits:
          memory: 512M
          cpus: "1.0"
    logging:
      driver: "json-file"
      options:
        max-size: "20m"
        max-file: "3"

volumes:
  mysql-data:

🛠️ 部署步骤

  1. 创建 mysql-init/ 目录,放入 .sql 初始化脚本(可选)
  2. 修改 MYSQL_ROOT_PASSWORD 为强密码
  3. 执行 docker compose up -d
  4. 验证:docker compose logs mysql 查看是否启动成功
  5. 连接测试:mysql -h 127.0.0.1 -P 3306 -u root -p
⚠️ 安全提醒:如果不需要外部访问,把 ports 改为 "127.0.0.1:3306:3306" 仅限本地连接。生产环境务必使用强密码,并通过 .env 文件管理。
💡 学习要点:Volume 持久化、资源限制、环境变量配置、初始化脚本。
🌐

搭建 WordPress 博客

Docker Compose 编排 MySQL + WordPress,验证多服务通信和依赖管理

WordPress MySQL Compose 编排 多服务通信
中级

📄 docker-compose.yml

services:
  db:
    image: mysql:8.0
    container_name: wp-db
    restart: unless-stopped
    volumes:
      - wp-db-data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=rootpass123
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wpuser
      - MYSQL_PASSWORD=wppass123
    networks:
      - wp-net

  wordpress:
    image: wordpress:latest
    container_name: wp-app
    restart: unless-stopped
    ports:
      - "8081:80"
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=wpuser
      - WORDPRESS_DB_PASSWORD=wppass123
      - WORDPRESS_DB_NAME=wordpress
    volumes:
      - wp-content:/var/www/html/wp-content
    depends_on:
      - db
    networks:
      - wp-net

volumes:
  wp-db-data:
  wp-content:

networks:
  wp-net:
    driver: bridge

🛠️ 部署步骤

  1. 创建 docker-compose.yml 并修改密码
  2. docker compose up -d
  3. 等待 MySQL 初始化完成(约30秒):docker compose logs db
  4. 浏览器访问 http://服务器IP:8081
  5. 按向导完成 WordPress 安装
  6. 想让外网访问?在 Caddyfile 里加一条反向代理记录
💡 学习要点:多服务编排、depends_on 依赖管理、自定义网络(容器通过服务名互访)、数据持久化两层分离。
⚠️ WordPress 比较吃内存,建议给 db 限制 512M、wordpress 限制 256M。1.8G 服务器跑这个有点吃紧,学完可以 docker compose down -v 清理。
📦

私有 Docker Registry

搭建私有镜像仓库,配置基础认证,学习镜像推送和拉取流程

Registry HTTP 认证 镜像管理
中级

📄 docker-compose.yml

services:
  registry:
    image: registry:2
    container_name: private-registry
    restart: unless-stopped
    ports:
      - "5000:5000"
    environment:
      - REGISTRY_HTTP_SECRET=your-secret-here
      - REGISTRY_STORAGE_DELETE_ENABLED=true
    volumes:
      - registry-data:/var/lib/registry
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

volumes:
  registry-data:

🛠️ 部署步骤

  1. docker compose up -d
  2. 推送镜像测试:docker tag nginx:alpine localhost:5000/nginx:alpine && docker push localhost:5000/nginx:alpine
  3. 拉取验证:docker pull localhost:5000/nginx:alpine
  4. 查看仓库内容:curl http://localhost:5000/v2/_catalog

🔒 添加基础认证(可选)

  1. 安装 htpasswd:yum install httpd-tools -y
  2. 创建密码文件:mkdir auth && htpasswd -Bc auth/htpasswd admin
  3. 在 compose 中挂载:- ./auth:/auth
  4. 添加环境变量:REGISTRY_AUTH=htpasswd
💡 学习要点:私有镜像仓库搭建、docker tag / push / pull 完整流程、Registry API 探索、基础认证配置。
🔍

SearXNG 隐私搜索引擎

回顾服务器正在运行的服务 —— 部署 SearXNG 元搜索引擎,理解实际生产配置

SearXNG Caddy Redis 生产部署
高级

🛠️ 当前运行状态

你的阿里云 ECS 上已经跑着 SearXNG,通过 docker run 手动启动(端口 8080,仅本地访问)。这也是一个很好的 Docker 学习案例。

分析与改进方向

  • 当前用 docker run 启动,建议改为 Compose 统一管理
  • SearXNG 默认配 Redis 做缓存(需额外容器),当前是单实例模式
  • 通过 Caddy 反向代理暴露到公网(如 search.dockerlab.online
  • 配置 settings.yml 定制搜索引擎列表和界面
💡 实战任务:把当前的 docker run 命令改写成 Compose 文件,加上 Redis 容器和日志限制。这是从 "能用" 到 "规范" 的典型升级。

📄 改进后的 Compose 参考

services:
  searxng:
    image: searxng/searxng:latest
    container_name: searxng
    restart: unless-stopped
    ports:
      - "127.0.0.1:8080:8080"   # 仅本地
    volumes:
      - ./searxng:/etc/searxng
    environment:
      - SEARXNG_BASE_URL=https://search.dockerlab.online/
    logging:
      driver: "json-file"
      options:
        max-size: "10m"

  # Redis 缓存(可选)
  redis:
    image: redis:alpine
    container_name: searxng-redis
    restart: unless-stopped
    command: redis-server --save 60 1 --loglevel warning
    volumes:
      - redis-data:/data
⚠️ SearXNG + Redis 会额外占用约 100-200MB 内存,在 1.8G 服务器上要算好资源。可先不加 Redis,只用单实例模式。