compose
10
总安装量
5
周安装量
#31086
全站排名
安装命令
npx skills add https://github.com/chaterm/terminal-skills --skill compose
Agent 安装分布
claude-code
5
opencode
4
github-copilot
3
windsurf
3
antigravity
3
gemini-cli
3
Skill 文档
Docker Compose ç¼æ
æ¦è¿°
å¤å®¹å¨ç¼æãç¯å¢åéãç½ç»é ç½®çæè½ã
åºç¡å½ä»¤
# å¯å¨æå¡
docker compose up
docker compose up -d # åå°è¿è¡
docker compose up --build # éæ°æå»º
# 忢æå¡
docker compose down
docker compose down -v # åæ¶å é¤å·
docker compose down --rmi all # åæ¶å é¤éå
# æ¥çç¶æ
docker compose ps
docker compose ps -a
# æ¥çæ¥å¿
docker compose logs
docker compose logs -f # 宿¶è·è¸ª
docker compose logs service_name
# æ§è¡å½ä»¤
docker compose exec service_name sh
docker compose run service_name command
# é坿å¡
docker compose restart
docker compose restart service_name
# æ©ç¼©å®¹
docker compose up -d --scale web=3
é ç½®æä»¶
åºç¡ç»æ
# docker-compose.yml
version: "3.9"
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- api
api:
build: ./api
environment:
- DATABASE_URL=postgres://db:5432/mydb
depends_on:
- db
db:
image: postgres:15
volumes:
- db_data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: secret
volumes:
db_data:
networks:
default:
driver: bridge
æå¡é 置详解
build
services:
app:
# ç®åå½¢å¼
build: ./app
# 宿´å½¢å¼
build:
context: ./app
dockerfile: Dockerfile.prod
args:
- VERSION=1.0
target: production
cache_from:
- myapp:cache
ports
services:
web:
ports:
- "80:80" # HOST:CONTAINER
- "443:443"
- "8080-8090:8080-8090" # 端å£èå´
- "127.0.0.1:3000:3000" # ç»å®ç¹å® IP
volumes
services:
app:
volumes:
# å½åå·
- data:/var/lib/data
# ç»å®æè½½
- ./config:/etc/app/config:ro
# å¿åå·
- /var/lib/data
volumes:
data:
driver: local
environment
services:
app:
environment:
- NODE_ENV=production
- DATABASE_URL=postgres://localhost/db
# æä½¿ç¨æ å°å½¢å¼
environment:
NODE_ENV: production
DATABASE_URL: postgres://localhost/db
# 仿件å è½½
env_file:
- .env
- .env.local
depends_on
services:
web:
depends_on:
- db
- redis
# 带æ¡ä»¶
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
healthcheck
services:
web:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
deployï¼Swarm 模å¼ï¼
services:
web:
deploy:
replicas: 3
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
ç½ç»é ç½®
èªå®ä¹ç½ç»
services:
frontend:
networks:
- frontend
backend:
networks:
- frontend
- backend
db:
networks:
- backend
networks:
frontend:
driver: bridge
backend:
driver: bridge
internal: true # å
é¨ç½ç»ï¼æ å¤é¨è®¿é®
ç½ç»å«å
services:
db:
networks:
backend:
aliases:
- database
- postgres
ç¯å¢åé
.env æä»¶
# .env
POSTGRES_VERSION=15
POSTGRES_PASSWORD=secret
APP_PORT=3000
# docker-compose.yml
services:
db:
image: postgres:${POSTGRES_VERSION}
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
app:
ports:
- "${APP_PORT}:3000"
å¤ç¯å¢é ç½®
# docker-compose.override.ymlï¼å¼åç¯å¢ï¼èªå¨å è½½ï¼
# docker-compose.prod.ymlï¼ç产ç¯å¢ï¼
# 使ç¨å¤ä¸ªé
ç½®æä»¶
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
# docker-compose.ymlï¼åºç¡é
ç½®ï¼
services:
app:
image: myapp:latest
# docker-compose.override.ymlï¼å¼åè¦çï¼
services:
app:
build: .
volumes:
- .:/app
environment:
- DEBUG=true
# docker-compose.prod.ymlï¼ç产è¦çï¼
services:
app:
restart: always
environment:
- DEBUG=false
常è§åºæ¯
åºæ¯ 1ï¼Web åºç¨æ
version: "3.9"
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- app
app:
build: .
environment:
- DATABASE_URL=postgres://postgres:secret@db:5432/mydb
- REDIS_URL=redis://redis:6379
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
db:
image: postgres:15-alpine
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: secret
POSTGRES_DB: mydb
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:
åºæ¯ 2ï¼å¼åç¯å¢çéè½½
version: "3.9"
services:
app:
build:
context: .
target: development
volumes:
- .:/app
- /app/node_modules # æé¤ node_modules
environment:
- NODE_ENV=development
command: npm run dev
ports:
- "3000:3000"
åºæ¯ 3ï¼æ°æ®åºåå§å
services:
db:
image: postgres:15
volumes:
- postgres_data:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
environment:
POSTGRES_PASSWORD: secret
åºæ¯ 4ï¼æ¥å¿é ç½®
services:
app:
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
æ éææ¥
# æ¥çé
ç½®
docker compose config
# æ¥çæå¡æ¥å¿
docker compose logs service_name --tail=100
# è¿å
¥å®¹å¨
docker compose exec service_name sh
# æ¥çç½ç»
docker network ls
docker network inspect project_default
# é建æå¡
docker compose up -d --force-recreate service_name
| é®é¢ | ææ¥æ¹æ³ |
|---|---|
| æå¡æ æ³å¯å¨ | docker compose logs, æ£æ¥ä¾èµ |
| ç½ç»ä¸é | æ£æ¥ç½ç»é ç½®ãæå¡å |
| å·æè½½é®é¢ | æ£æ¥è·¯å¾ãæé |
| ç¯å¢åéæªçæ | docker compose config éªè¯ |