用 Docker Compose 一键拉起多个服务
平时开发时,一个项目往往不只一个容器。比如常见的 Web 应用,至少有后端 API、数据库、Redis 缓存,可能还有 Nginx 做反向代理。如果一个个手动启动,命令又长又容易出错,还不好管理。
Docker Compose 就是为这种场景设计的。你只需要写个 docker-compose.yml 文件,把所有服务定义清楚,一条命令就能全拉起来。
version: '3.8'
services:
web:
image: myapp:latest
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres:14
environment:
POSTGRES_DB: myapp_db
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
volumes:
- pgdata:/var/lib/postgresql/data
redis:
image: redis:alpine
volumes:
pgdata:写好之后,在文件所在目录运行:
docker-compose up -d三个容器立刻后台启动,依赖关系也自动处理好了。想停?一行命令就行:
docker-compose down批量操作:用脚本控制多个独立容器
有些时候你不需要 Compose,比如运维几台跑不同任务的容器。这时候可以写个简单的 Shell 脚本,统一管理启动逻辑。
比如你有三个微服务容器,名字分别是 api-svc、auth-svc、log-svc,各自监听不同端口。写个 start-services.sh:
#!/bin/bash
docker start api-svc || docker run -d --name api-svc -p 8080:8080 api-image
docker start auth-svc || docker run -d --name auth-svc -p 8081:8081 auth-image
docker start log-svc || docker run -d --name log-svc -p 8082:8082 log-image
echo "所有服务已就绪"加上执行权限:chmod +x start-services.sh,以后只要运行 ./start-services.sh,不管容器是否存在,都能正确启动或创建。
使用容器编排工具:当数量上去了
如果你要管几十上百个容器,比如在生产环境部署微服务集群,那得上 Kubernetes 或 Nomad 这类工具了。它们通过声明式配置管理整个生命周期。
Kubernetes 中可以用一个 Deployment 定义多个副本:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 5
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80执行 kubectl apply -f deployment.yaml,五个 Nginx 容器瞬间启动,还能自动恢复故障实例。
对于日常开发和中小型部署,Docker Compose 最实用;自动化脚本适合简单重复任务;真正大规模场景才考虑 K8s。选对工具,省下的不只是时间,还有排查问题的精力。