Docker 运行 Caddy
卷挂载 Caddyfile、证书持久化。
25 分钟
Docker 运行 Caddy
在容器中运行 Caddy 时,需挂载 Caddyfile、证书数据卷 与(可选)静态目录。对照 docker-compose 与 Nginx 容器化,Caddy 证书持久化到 /data 尤为关键。
学习目标
- 编写 Compose 服务定义与端口映射
- 持久化 ACME 证书,避免容器重建重复申请
- 在 Docker 网络中用服务名作 upstream
核心内容
docker-compose.yml 示例
services:
caddy:
image: caddy:2-alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./deploy/caddy/Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
- ./admin/dist:/var/www/admin/dist:ro
depends_on:
- backend
- platform
networks:
- web
backend:
build: ./backend
expose:
- "8080"
networks:
- web
platform:
build: ./platform
expose:
- "3000"
networks:
- web
volumes:
caddy_data:
caddy_config:
networks:
web:
caddy_data 存 Let's Encrypt 证书;删卷会导致重新 ACME 申请(注意速率限制)。
Caddyfile(Compose 网络)
www.coderoadmap.cn {
handle /api/* {
uri strip_prefix /api
reverse_proxy backend:8080
}
handle {
reverse_proxy platform:3000
}
}
服务名解析见 docker-network。生产 CodeRoadMap 仍用宿主机 Nginx;此 Compose 适合本地全栈或 CI 冒烟。
重载与调试
docker compose up -d caddy
docker compose exec caddy caddy validate --config /etc/caddy/Caddyfile
docker compose exec caddy caddy reload --config /etc/caddy/Caddyfile
docker compose logs -f caddy
修改 Caddyfile 后 reload,无需重建镜像。DNS 需将域名指宿主机公网 IP(dns-records)。
与 K8s 过渡
Compose 验证拓扑后,可迁移至 kubernetes-essentials Ingress;Caddy 亦可用作 Ingress Controller(caddy-k8s)。
练习
- 用 Compose 启动 Caddy + backend + platform 并完成
curl /api/tracks