当前位置: 代码网 > 服务器>服务器>云虚拟主机 > Docker Compose 使用实例详解

Docker Compose 使用实例详解

2025年04月24日 云虚拟主机 我要评论
一、docker compose 简介docker compose 是用于定义和运行多容器 docker 应用程序的工具,通过 yaml 文件配置应用程序服务,一键启动所有关联容器。二、安装 dock

一、docker compose 简介

docker compose 是用于定义和运行多容器 docker 应用程序的工具,通过 yaml 文件配置应用程序服务,一键启动所有关联容器。

二、安装 docker compose

linux

sudo curl -l "https://mirrors.tuna.tsinghua.edu.cn/docker/compose/releases/download/v2.32.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

windows/macos
通过 docker desktop 安装(已内置 compose)

验证安装:

docker-compose --version

三、基础配置文件示例(docker-compose.yml)

version: '3.8'  # compose文件格式版本
services:
  web:
    build: .  # 使用当前目录的dockerfile构建
    ports:
      - "8000:80"  # 主机端口:容器端口
    depends_on:
      - db
    environment:
      - db_host=db
    networks:
      - mynetwork
  db:
    image: mysql:8.0
    volumes:
      - db_data:/var/lib/mysql
    environment:
      mysql_root_password: example
      mysql_database: myapp
    networks:
      - mynetwork
    healthcheck:
      test: ["cmd-shell", "mysqladmin ping -h localhost"]
      interval: 30s
      timeout: 10s
      retries: 3
volumes:
  db_data:
networks:
  mynetwork:
    driver: bridge

四、关键配置解析

  • version:指定compose文件格式版本(常用3.x)
  • services:定义服务(容器)
    • build:指定构建上下文路径(含dockerfile)
    • image:直接使用官方镜像
    • ports:端口映射
    • depends_on:服务依赖关系
    • environment:环境变量设置
  • volumes:数据卷定义(持久化存储)
  • networks:自定义网络配置
  • healthcheck:容器健康检查

五、常用命令

启动服务

docker-compose up -d  # 后台启动
docker-compose up --build  # 重新构建后启动

停止服务

docker-compose down  # 停止并删除容器、网络等
docker-compose stop  # 仅停止容器

查看日志

docker-compose logs -f  # 实时查看日志
docker-compose logs web  # 查看指定服务日志

进入容器

docker-compose exec web bash  # 进入web容器

构建镜像

docker-compose build  # 构建所有服务镜像
docker-compose build web  # 仅构建web服务镜像

六、完整项目示例(node.js + mysql + nginx)

项目结构

myapp/
├── docker-compose.yml
├── nginx/
│   ├── nginx.conf
│   └── dockerfile
├── app/
│   ├── package.json
│   ├── server.js
│   └── dockerfile
└── .env

docker-compose.yml

version: '3.8'
services:
  nginx:
    build: ./nginx
    ports:
      - "80:80"
    depends_on:
      - app
    networks:
      - frontend
      - backend
  app:
    build: ./app
    environment:
      - node_env=production
      - db_host=db
    networks:
      - backend
    depends_on:
      db:
        condition: service_healthy
  db:
    image: mysql:8.0
    volumes:
      - db_data:/var/lib/mysql
    environment:
      mysql_root_password_file: /run/secrets/db_root_password
      mysql_database: myapp
    secrets:
      - db_root_password
    networks:
      - backend
    healthcheck:
      test: ["cmd-shell", "mysqladmin ping -h localhost"]
      interval: 30s
      timeout: 10s
      retries: 3
volumes:
  db_data:
networks:
  frontend:
  backend:
secrets:
  db_root_password:
    file: .env

app/dockerfile

from node:18-alpine
workdir /app
copy package*.json ./
run npm install --production
copy . .
cmd ["npm", "start"]

nginx/dockerfile

from nginx:alpine
copy nginx.conf /etc/nginx/conf.d/default.conf

nginx/nginx.conf

server {
    listen 80;
    location / {
        proxy_pass http://app:3000;
        proxy_set_header host $host;
        proxy_set_header x-real-ip $remote_addr;
    }
}

.env

db_root_password=supersecret

七、高级功能

扩展配置

# 扩展服务实例
app:
  deploy:
    replicas: 3
  resources:
    limits:
      cpus: '0.5'
      memory: 512m

多环境配置

# docker-compose.override.yml(开发环境)
version: '3.8'
services:
  app:
    build: ./app
    volumes:
      - ./app:/app  # 挂载代码目录实现热更新
    environment:
      - node_env=development

使用模板文件

# docker-compose.yml
services:
  app:
    image: myapp:${tag}

八、最佳实践

  • 使用.env文件管理敏感信息
  • 为不同环境创建独立的compose文件(如docker-compose.prod.yml)
  • 使用健康检查确保服务启动顺序
  • 对持久化数据使用命名卷
  • 定期清理未使用的镜像和卷:
docker system prune -a

九、调试技巧

查看容器状态:

docker-compose ps

检查网络配置:

docker network inspect mynetwork

验证配置文件:

docker-compose config

到此这篇关于docker compose 使用实例的文章就介绍到这了,更多相关docker compose 使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com