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:

image

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;
    }
}

 

posted @ 2025-11-03 14:22  wangssd  阅读(11)  评论(0)    收藏  举报