Yang's blog Yang's blog
首页
Java
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

xiaoyang

编程爱好者
首页
Java
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • System

    • HomeBrew介绍
  • Git

    • Git 命令入门指南
  • shell

    • shell编程中常用的符号
  • docker

    • Docker介绍
    • Dockerfile :构建自己的 Docker 镜像
    • Docker Compose :容器编排工具
      • 1. Docker Compose 简介
      • 2. 为什么需要 Docker Compose?
      • 5. docker-compose.yml 详解
        • 5.1 基本结构
        • 5.2 常用配置项说明
        • 5.21 version
        • 5.22 services
        • 5.23 container_name
        • 5.24 image
        • 5.25 build
        • 5.26 environment
        • 5.27 volumes
        • 5.28 ports
        • 5.29 depends_on
        • 5.30 links
      • 6.下载安装
      • 7. Docker Compose 常用命令
        • 7.1 基本操作
        • 6.2 服务生命周期管理
      • 8. 总结
  • Linux

    • Linux基础知识
    • Linux 文件系统
    • Linux 用户管理
    • Linux 权限与安全
    • Linux 网络管理
    • Linux 进程管理
    • Linux 常用命令
  • 命令手册
  • docker
xiaoyang
2025-02-08
目录

Docker Compose :容器编排工具推荐

# Docker Compose :容器编排工具

# 1. Docker Compose 简介

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过使用 YAML 文件配置应用程序的服务,可以使用单个命令创建和启动所有服务。它大大简化了容器化应用的部署和管理过程。

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

# 2. 为什么需要 Docker Compose?

在实际开发中,一个应用往往由多个服务组成。例如:

  • Web 应用服务器
  • 数据库服务
  • 缓存服务
  • 消息队列
  • 前端服务

手动管理这些容器是非常繁琐的。Docker Compose 提供了一种优雅的方式来管理这些服务,实现了:

  • 服务配置的版本控制
  • 环境变量管理
  • 服务依赖关系处理
  • 网络和数据卷配置的统一管理

# 5. docker-compose.yml 详解

# 5.1 基本结构

version : '3.8'
services:
  easyai-nacos:
    container_name: easyai-nacos
    image: nacos/nacos-server
    build:
      context: ./nacos
    environment:
      - MODE=standalone
    volumes:
      - ./nacos/logs/:/home/nacos/logs
      - ./nacos/conf/application.properties:/home/nacos/conf/application.properties
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9849:9849"
    depends_on:
      - easyai-mysql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 5.2 常用配置项说明

# 5.21 version

version: '3.8'
1
  • 指定 docker-compose 文件的语法版本为 3.8,适用于 Docker 19.03+ 版本。
  • 影响 docker-compose 支持的功能,如 depends_on、volumes、healthcheck 等。

# 5.22 services

services:
  easyai-nacos:
1
2
  • services 定义多个容器服务,easyai-nacos 是其中之一。
  • easyai-nacos 作为 Nacos 注册中心服务。

# 5.23 container_name

container_name: easyai-nacos
1
  • 设置容器名称为 easyai-nacos。
  • 若不指定,则 Docker 会随机生成一个名称。

# 5.24 image

image: nacos/nacos-server
1
  • 指定使用 nacos/nacos-server 官方 Nacos 镜像。
  • 若 build 存在,则 image 会被忽略。

# 5.25 build

build:
  context: ./nacos
1
2
  • 构建自定义 Nacos 镜像:
    • context: ./nacos 指定 Dockerfile 目录,即 ./nacos/Dockerfile。
    • 若 nacos 目录下有 Dockerfile,则 docker-compose 不会拉取官方镜像,而是本地构建。
  • build 与 image 关系:
    • 同时存在时,build 优先,image 仅用于 docker tag 结果。
    • 若无 build,则直接拉取 image 指定的镜像。

# 5.26 environment

environment:
  - MODE=standalone
1
2

设置环境变量,传递给容器:

  • MODE=standalone 让 Nacos 以单机模式运行,而不是集群模式。

# 5.27 volumes

volumes:
  - ./nacos/logs/:/home/nacos/logs
  - ./nacos/conf/application.properties:/home/nacos/conf/application.properties
1
2
3
  • 数据持久化,将宿主机目录映射到容器内部:
  • Nacos 的日志存放到宿主机 ./nacos/logs/,防止容器销毁后丢失日志。
  • 覆盖 Nacos 配置文件,允许使用自定义 application.properties。

# 5.28 ports

ports:
  - "8848:8848"
  - "9848:9848"
  - "9849:9849"
1
2
3
4
  • 端口映射:宿主机端口:容器端口

    格式:

    1. 8848:8848 → Nacos 控制台(http://localhost:8848/nacos)。
    2. 9848:9848 → gRPC 端口,用于集群间通信(单机模式无用)。
    3. 9849:9849 → gRPC over TLS 端口。

# 5.29 depends_on

depends_on:
  - easyai-mysql
1
2

定义容器间的依赖关系:

  • 确保 easyai-mysql 先启动,再启动 easyai-nacos。
  • 注意:depends_on 仅控制启动顺序,不保证 easyai-mysql完全就绪。
    • 可能 Nacos 仍然需要等待 MySQL 启动完成 才能连接数据库。
    • 可以使用 healthcheck 确保数据库完全启动后再运行 Nacos。

depends_on 与 links 的区别

depends_on仅控制启动顺序,不创建容器间的网络连接:

depends_on:
  - easyai-redis
  - easyai-mysql
1
2
3

easyai-nacos 在 easyai-redis 和 easyai-mysql 启动后才会启动。

# 5.30 links

提供额外的网络可见性,但已被 networks取代:

links:
  - easyai-redis
  - easyai-mysql
1
2
3

使easyai-nacos能通过容器名称直接访问easyai-redis和 easyai-mysql如:

mysql -h easyai-mysql -u root -p
1
  • links 适用于旧版 docker-compose,但 networks 更推荐。

depends_on vs. links 总结

特性 depends_on links
控制启动顺序 ✅ 是 ❌ 否
影响网络通信 ❌ 否 ✅ 是
推荐使用 ✅ 是 ❌ 否(已被 networks 取代)

# 6.下载安装

  1. 使用 curl 下载官方 docker-compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
1
  1. 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
1
  1. 验证安装
docker-compose --version
1

# 7. Docker Compose 常用命令

# 7.1 基本操作

# 启动所有服务
docker-compose up

# 后台运行
docker-compose up -d

# 停止服务
docker-compose down

# 查看服务状态
docker-compose ps

# 查看服务日志
docker-compose logs

# 进入服务容器
docker-compose exec service_name bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 6.2 服务生命周期管理

# 构建服务
docker-compose build

# 重启服务
docker-compose restart

# 暂停服务
docker-compose pause

# 恢复服务
docker-compose unpause

# 删除服务(包括数据卷)
docker-compose down -v
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 8. 总结

Docker Compose 是一个强大的工具,它简化了多容器应用的管理和部署。通过合理使用 Docker Compose,可以:

  • 标准化开发环境
  • 简化部署流程
  • 提高开发效率
  • 实现基础设施即代码

掌握 Docker Compose 对于现代应用开发和部署来说是必不可少的技能。通过持续学习和实践,你可以更好地利用这个工具来优化你的开发工作流程。

编辑 (opens new window)
#docker
上次更新: 2025/04/01, 01:48:12

← Dockerfile :构建自己的 Docker 镜像 Linux基础知识→

最近更新
01
操作系统
03-18
02
Nginx
03-17
03
后端服务端主动推送消息的常见方式
03-11
更多文章>
Theme by Vdoing | Copyright © 2023-2025 xiaoyang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式