当前位置: 首页 > news >正文

如何用 Docker Compose 管理多个容器

概述

你有没有试过用 docker run 启动一个包含多个服务的应用?

比如一个典型的 Web 项目:

  • 前端(Nginx)
  • 后端(Node.js)
  • 数据库(MySQL)
  • 缓存(Redis)

你可能写了这样一堆命令:

docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:8.0
docker run -d --name redis -p 6379:6379 redis:alpine
docker run -d --name backend -p 3000:3000 --link mysql --link redis my-backend:1.0
docker run -d --name frontend -p 80:80 --link backend nginx:alpine

不仅命令长,还容易出错,重启一次就得重新敲一遍……

别担心,Docker Compose 就是来解决这个问题的!

什么是 Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。

你只需要写一个 docker-compose.yml 文件,描述所有服务,然后运行:

docker compose up

所有容器自动启动、联网、配置完成

安装Docker Compose的方法

在Linux系统上安装

确保已安装Docker,且系统版本为64位。运行以下命令下载Docker Compose的二进制文件:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

赋予二进制文件可执行权限:

sudo chmod +x /usr/local/bin/docker-compose

验证安装是否成功:

docker-compose --version

在Windows或macOS上安装

对于Windows和macOS用户,Docker Compose通常作为Docker Desktop的一部分自动安装。安装Docker Desktop后,Docker Compose将直接可用。

验证安装:

docker-compose --version

通过Python pip安装

如果系统已安装Python和pip,可以通过以下命令安装:

pip install docker-compose

注意:此方法可能因Python环境问题导致兼容性错误,推荐优先使用官方二进制文件安装。

升级Docker Compose

如需升级到最新版本,先卸载旧版本再重新安装:

sudo rm /usr/local/bin/docker-compose

随后按上述步骤重新下载和安装最新版本。Docker Compose

编写你的第一个 docker-compose.yml

我们以一个简单的 Node.js + MySQL 应用为例。

项目结构

my-app/
├── docker-compose.yml
├── backend/
│   ├── app.js
│   └── package.json
└── mysql/└── init.sql

创建 docker-compose.yml

version: '3.8'services:# 后端服务backend:build: ./backendports:- "3000:3000"environment:- DB_HOST=mysql- DB_USER=root- DB_PASSWORD=123456depends_on:- mysqlnetworks:- app-network# 数据库服务mysql:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: 123456ports:- "3306:3306"volumes:- ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql- mysql-data:/var/lib/mysqlnetworks:- app-network# 可选:前端 Nginxnginx:image: nginx:alpineports:- "80:80"volumes:- ./nginx.conf:/etc/nginx/nginx.confdepends_on:- backendnetworks:- app-network# 定义网络
networks:app-network:driver: bridge# 定义持久化卷
volumes:mysql-data:

我们逐项解释一下 docker-compose.yml:

字段说明
version: '3.8'Compose 文件格式版本
services定义所有服务
build: ./backend从 Dockerfile 构建镜像
image: mysql:8.0使用现成镜像
ports端口映射
environment环境变量
volumes挂载数据卷(持久化数据)
depends_on声明启动顺序(先启动 mysql,再启动 backend)
networks自动创建网络,服务间可通过服务名通信

服务之间通过服务名(如 mysql)即可通信,无需手动配置 IP

启动整个应用

my-app 目录下运行:

docker compose up
  • 第一次会自动构建 backend 镜像
  • 所有服务按顺序启动
  • 日志集中输出,便于调试

想后台运行?加 -d

docker compose up -d

常用命令

命令说明
docker compose up启动所有服务
docker compose up -d后台启动
docker compose down停止并删除容器
docker compose down -v删除容器和卷(慎用)
docker compose logs查看日志
docker compose ps查看运行中的服务
docker compose build仅构建镜像

Docker Compose 的优点

优势说明
一键启动一条命令启动所有服务
配置集中化所有配置在 docker-compose.yml
服务互联自动创建网络,服务名即主机名
依赖管理depends_on 控制启动顺序
开发利器本地环境快速搭建,团队统一配置

最佳实践

  1. 为每个项目创建独立的 docker-compose.yml
  2. 使用 .env 文件管理环境变量
    MYSQL_ROOT_PASSWORD=123456
    DB_PASSWORD=123456
    
    docker-compose.yml 中引用:
    environment:MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    
  3. 不同环境使用不同配置文件
    • docker-compose.yml(通用)
    • docker-compose.dev.yml(开发)
    • docker-compose.prod.yml(生产)

总结

传统方式Docker Compose
多条 docker run 命令一个 docker-compose.yml
手动管理网络和卷自动创建和连接
容易出错、难维护配置即代码,易于共享和版本控制

Docker Compose 是管理多容器应用的必备工具,尤其适合本地开发、测试和微服务架构

http://www.dtcms.com/a/499215.html

相关文章:

  • 《C++ STL 基础入门》教案
  • 基于对数灰关联度的IOWGA算子最优组合预测模型
  • VGW 技术解析:构建 Windows 平台的虚拟路由网关中枢
  • 内容安全优化:基于Redis实现分级反爬虫策略
  • 生成式设计案例:MG AEC利用Autodesk AEC Collection推进可持续建筑设计
  • 物流网站源代码修改wordpress后台文字
  • 【HTML】网络数据是如何渲染成HTML网页页面显示的
  • 做门图网站产品品牌推广公司
  • linux学习笔记(38)mysql索引详解
  • M1安装RocketMQ消息队列
  • 广西壮族自治区住房和城乡建设厅网站网站内页制作
  • PDFium导出pdf 图像
  • C++11标准 上 (万字解析)
  • Java基础语法—字面量、变量详解、存储数据原理
  • 手工视频制作网站移动网站建设初学视频教程
  • 【shell】每日shell练习(系统服务状态监控/系统性能瓶颈分析)
  • Swift 下标脚本
  • Spring Boot 3零基础教程,WEB 开发 默认页签图标 Favicon 笔记28
  • php 网站部署杭州企业自助建站系统
  • IntelliJ IDEA 2023中为 Spring Boot 项目添加注释模板
  • Java Web安全防护:SQL注入、XSS攻击的预防与处理
  • leetcode 912.排序数组
  • 个人网站可以做商城吗seo三人行网站
  • 第3讲:Go垃圾回收机制与性能优化
  • Mac 桌面动态壁纸软件|Live Wallpaper 4K Pro v19.7 安装包使用教程(附安装包)
  • 简易网站开发网站建设的各个环节
  • 用 Selenium 搞定动态网页:模拟点击、滚动、登录全流程
  • VBA数据结构抉择战:Dictionary与Collection谁才是效率王者?
  • macos虚拟机-演示篇三配置clover引导
  • 【小白笔记】岛屿的周长(Island Perimeter)