一、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 使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论