docker-compose
docker安装:https://blog.csdn.net/Cike___/article/details/146415836
最新版本的docker安装完成后,会自带docker-compase
docker version
docker compose version
Docker Compose.yml 是 Docker Compose 工具的核心配置文件
Docker Compose 主要不是用来构建镜像的,也不是专门用来拉取镜像的,而是用来编排和运行多容器应用的。
1. 多容器应用管理
核心作用:定义和运行多个相互关联的 Docker 容器
version: '3.8' services: web: image: nginx depends_on: - app - database app: build: . depends_on: - database database: image: postgres:13
2. 服务依赖和启动顺序
services: database: image: postgres healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] backend: build: ./backend depends_on: database: condition: service_healthy # 等待数据库健康后再启动
3. 网络配置
创建容器间的专用网络,实现服务发现和内部通信
services: web: image: nginx networks: - frontend - backend app: build: . networks: - backend networks: frontend: driver: bridge backend: driver: bridge
4. 数据持久化
services: database: image: postgres volumes: - db_data:/var/lib/postgresql/data # 命名卷 - ./init.sql:/docker-entrypoint-initdb.d/init.sql # 主机挂载 volumes: db_data: # 声明数据卷
5. 环境配置管理
services: app: build: . environment: - DATABASE_URL=postgresql://user:pass@db:5432/app - DEBUG=false env_file: - .env.production # 从文件加载环境变量
6. 端口映射和访问控制
services: web: image: nginx ports: - "80:80" # 主机端口:容器端口 - "443:443" expose: - "8080" # 仅对链接的容器暴露
7. 资源限制
services: app: image: myapp deploy: resources: limits: cpus: '1.0' memory: 512M reservations: cpus: '0.5' memory: 256M
docker compose常用指令
# 拉取服务所需的镜像(不启动容器) docker compose pull # 构建服务镜像(如果配置了 build) docker compose build # 启动所有服务(会自动拉取或构建镜像) docker compose up -d # 重新构建并启动 docker compose up --build
# 启动所有服务
docker compose up
docker compose up -d # 后台运行
docker compose up service1 # 启动特定服务
# 停止服务
docker compose down # 停止并移除容器
docker compose down -v # 停止并移除容器和卷
# 重启服务
docker compose restart
docker compose restart service1
docker compose start # 启动已存在的服务
docker compose stop # 停止服务
docker compose pause # 暂停服务
docker compose unpause # 恢复暂停的服务
docker compose kill # 强制停止服务
docker compose rm # 删除已停止的容器
docker compose ps # 查看服务状态
docker compose logs # 查看所有服务日志
docker compose logs service1 # 查看特定服务日志
docker compose logs -f # 实时查看日志
docker compose top # 查看运行进程
docker compose images # 查看使用的镜像
docker compose pull # 拉取服务镜像
docker compose build # 构建服务镜像
docker compose push # 推送服务镜像
docker compose exec service1 bash # 在服务中执行命令
docker compose exec -it service1 sh # 交互式执行
docker compose run --rm service1 command # 一次性运行命令
docker compose config # 验证和查看组合配置
docker compose config --services # 列出所有服务
docker compose config --volumes # 列出所有卷
docker compose up --scale service1=3 # 扩展服务实例数量
docker compose scale service1=5 # 伸缩服务实例
docker compose events # 查看实时事件
docker compose port service1 80 # 查看服务的端口绑定
# 开发环境
docker compose -f docker-compose.dev.yml up -d
# 生产环境
docker compose -f docker-compose.prod.yml up -d
# 测试环境
docker compose -f docker-compose.test.yml up -d
| 方面 | ports 映射 | volumes 映射 |
|---|---|---|
| 作用对象 | 网络端口 | 文件系统 |
| 映射关系 | 主机端口 ↔ 容器端口 | 主机目录 ↔ 容器目录,两者目录共享 |
| 数据流向 | 网络流量双向转发 | 文件数据双向同步 |
| 持久化 | 不涉及数据存储 | 数据持久化在主机 |
| 典型用途 | 服务访问、API暴露 | 配置文件、日志、数据存储 |
e.g:

version: '3'
services:
# MySQL 数据库服务
mysql:
image: mysql:8.0
container_name: mysql-db
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: mac123
MYSQL_DATABASE: lu_tale
MYSQL_USER: winter
MYSQL_PASSWORD: 1111
volumes:
- "./mysql/data:/var/lib/mysql"
- "./mysql/init:/docker-entrypoint-initdb.d"
- "./mysql/conf:/etc/mysql/conf.d"
networks:
- app-network
# 应用服务
delay-server:
container_name: my-site
image: winterchen/my-site
restart: always
# 移除外部端口映射,通过 Nginx 访问
ports:
- "8089:8089"
volumes:
- "./tmp:/tmp"
environment:
SPRING_DATASOURCE_DRUID_URL: jdbc:mysql://mysql:3306/lu_tale?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
SPRING_DATASOURCE_DRUID_USERNAME: root
SPRING_DATASOURCE_DRUID_PASSWORD: 1111
QINIU_ACCESSKEY: ""
QINIU_SERECTKEY: ""
QINIU_BUCKET: ""
QINIU_CDN_URL: ""
depends_on:
- mysql
networks:
- app-network
# Nginx 反向代理服务
nginx:
image: nginx:alpine
container_name: nginx-proxy
restart: always
ports:
- "80:80"
- "443:443" # 如果需要 HTTPS
volumes:
- "./nginx/conf.d:/etc/nginx/conf.d" # Nginx 配置文件
- "./nginx/logs:/var/log/nginx" # 日志文件
- "./nginx/html:/usr/share/nginx/html" # 静态文件
depends_on:
- delay-server
networks:
- app-network
# 定义网络
networks:
app-network:
driver: bridge
nginx配置:
./nginx/conf.d/default.conf
server { listen 80; server_name localhost; # 静态文件处理 location /static/ { alias /usr/share/nginx/html/static/; expires 30d; } # API 和动态请求转发到应用服务 location / { proxy_pass http://delay-server:8089; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 超时设置 proxy_connect_timeout 30s; proxy_send_timeout 30s; proxy_read_timeout 30s; } # 健康检查 location /health { proxy_pass http://delay-server:8089/health; access_log off; } }

浙公网安备 33010602011771号