10 分钟上手 Docker Compose:从零到一键部署实战

在容器化技术风靡的今天,Docker Compose 堪称开发者的 “部署神器”。它之所以备受青睐,是因为有着显著的优势。对于开发者而言,Docker Compose 能极大提升开发效率,在本地开发环境中,通过一个配置文件就能快速搭建起包含数据库、缓存、Web 服务等完整的应用栈,避免了手动配置各服务环境的复杂流程;而对运维人员来说,Docker Compose 实现了部署的标准化和自动化,无论在开发、测试还是生产环境,只需执行相同的命令,就能确保应用的一致性部署,有效降低了运维成本和出错概率。此外,它还支持服务的弹性扩展,当应用负载增加时,通过简单的命令即可增加容器实例数量,轻松应对高并发场景。同时,其依赖管理功能可以清晰定义服务间的启动顺序和依赖关系,保障应用稳定运行。无论你是刚接触 Docker 的新手,还是想简化项目部署流程的老司机,10 分钟时间,跟随本文的实战步骤,都能轻松掌握 Docker Compose 的核心用法!

一、Docker Compose 是什么?​

Docker Compose 是 Docker 官方提供的一个用于定义和运行多个 Docker 容器应用的工具。在实际项目中,一个完整的应用往往包含多个服务,比如后端服务器、数据库、缓存等,每个服务都需要独立运行在容器中。Docker Compose 通过 YAML 格式的配置文件,将这些服务的配置、依赖关系、网络设置等进行统一编排,用户只需执行一条命令,就能快速部署和启动整个应用栈,避免了逐个启动容器的繁琐操作。

二、安装 Docker Compose​

在开始实战前,确保你已经安装了 Docker。不同操作系统安装 Docker Compose 的方式略有不同:​

1. Linux 系统​

通过以下命令下载并安装 Docker Compose(以 Ubuntu 为例):​

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

2. macOS 系统​

使用 Homebrew 安装:​

brew install docker-compose

3. Windows 系统​

在 Docker Desktop 安装时,Docker Compose 会自动集成,无需额外安装。​

安装完成后,在命令行输入docker-compose –version验证是否安装成功,若显示版本信息,则安装成功。

三、实战演练:一键部署 Web 应用 + 数据库​

接下来,我们以一个简单的 Web 应用与 MySQL 数据库的组合为例,体验 Docker Compose 的便捷性。​

1. 创建项目目录​

首先,在本地创建一个项目目录,比如my-compose-project,并进入该目录:

mkdir my-compose-project
cd my-compose-project

2. 编写 Docker Compose 配置文件​

在项目目录下创建一个名为docker-compose.yml的文件,使用文本编辑器打开,并输入以下内容:​

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    depends_on:
      - db
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydb

上述配置文件定义了两个服务:​

  • web:基于 Nginx 镜像创建容器,将容器内的 80 端口映射到主机的 8080 端口,并且该服务依赖于db服务。​
  • db:基于 MySQL 8.0 镜像创建容器,设置了数据库的 root 密码和要创建的数据库名称。

3. 启动容器​

在项目目录下,打开命令行终端,执行以下命令启动容器:​

docker-compose up -d

-d参数表示以后台模式运行容器。等待片刻后,Docker Compose 会自动下载所需镜像,并按照配置文件启动两个容器。

4. 验证部署结果​

在浏览器中输入 http://localhost:8080,如果看到 Nginx 的默认欢迎页面,说明 Web 服务已成功启动;同时,MySQL 数据库也在后台正常运行。​

5. 停止和删除容器​

当不再需要这些容器时,可以使用以下命令停止并删除它们:​

docker-compose down

该命令会停止所有由 Docker Compose 启动的容器,并删除相关的网络资源。​

四、进阶技巧​

1. 自定义网络​

默认情况下,Docker Compose 会为项目创建一个专属的网络。如果你需要自定义网络配置,可以在docker-compose.yml中添加networks字段:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    networks:
      - my-network
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydb
    networks:
      - my-network
networks:
  my-network:
    driver: bridge

2. 数据持久化​

为了防止容器删除后数据丢失,可以使用volumes字段将容器内的数据挂载到主机目录:​

version: '3'
services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydb
    volumes:
      -./data:/var/lib/mysql

上述配置会将主机当前目录下的data目录与容器内的/var/lib/mysql目录进行挂载,保证数据的持久存储。​

五、常见 Docker Compose 部署场景​

1. 全栈 Web 应用开发​

在全栈开发场景中,一个应用通常包含前端、后端、数据库和消息队列等多个服务。例如,使用 Vue.js 搭建前端界面,Node.js 开发后端 API,搭配 MongoDB 数据库和 RabbitMQ 消息队列。通过 Docker Compose,可将这些服务分别配置在不同容器中,定义好端口映射和数据卷挂载,实现本地开发环境与生产环境的高度一致,方便团队成员快速启动项目,减少环境配置带来的问题。​

2. 微服务架构部署​

对于采用微服务架构的项目,如电商系统中订单服务、库存服务、支付服务等相互独立又需要通信协作的微服务。Docker Compose 能够轻松编排这些微服务容器,通过自定义网络实现服务间的安全通信,并利用scale命令根据业务流量动态扩展服务实例,确保系统在高并发下的稳定性和可扩展性。​

3. 开发测试一体化环境​

在持续集成 / 持续交付(CI/CD)流程中,Docker Compose 可以用来快速搭建测试环境。开发人员提交代码后,CI 工具可通过 Docker Compose 启动包含应用、数据库、测试框架等容器的完整测试环境,自动执行单元测试、集成测试,保证代码质量,加速开发迭代。​

4. 数据分析与处理平台​

在大数据分析场景下,Docker Compose 可用于部署 Hadoop、Spark、Hive 等大数据组件。通过配置文件,将各个组件的容器进行合理编排,实现数据的存储、处理和分析功能。例如,使用 HDFS 存储数据,Spark 进行分布式计算,Hive 提供数据查询服务,方便数据科学家和工程师快速搭建和管理数据分析平台。​

5. 个人博客系统部署​

假设我们要部署一个基于 WordPress 的个人博客系统,该系统需要一个 Web 服务器、数据库和 WordPress 应用三个服务协同工作。

  1. 创建项目目录:在本地新建文件夹wordpress-blog,并进入该目录。​
  1. docker-compose.yml文件
version: '3'
services:
  webserver:
    image: httpd:latest
    ports:
      - "80:80"
    volumes:
      -./html:/var/www/html
    depends_on:
      - db
      - wordpress
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: mysecretpassword
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpressuser
      MYSQL_PASSWORD: wordpresspass
    volumes:
      - db_data:/var/lib/mysql
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpressuser
      WORDPRESS_DB_PASSWORD: wordpresspass
      WORDPRESS_DB_NAME: wordpress
    volumes:
      -./wp-content:/var/www/html/wp-content
    depends_on:
      - db

volumes:
  db_data:

在上述配置中,webserver使用 Apache 镜像,将主机的./html目录挂载到容器内用于存放静态文件;db使用 MySQL 5.7 镜像,并设置数据库相关账号密码,同时通过数据卷db_data实现数据持久化;wordpress服务则依赖数据库,并将主机的./wp-content目录挂载到容器内,用于保存 WordPress 的插件和主题数据。​

启动服务:在项目目录下的命令行中执行docker-compose up -d,Docker Compose 会自动下载所需镜像并启动三个容器。​

访问博客系统:在浏览器中输入 http://localhost,即可进入 WordPress 的安装配置页面,按照提示完成安装后,就能拥有一个属于自己的个人博客系统。

通过以上步骤和常见部署场景的介绍,你已经掌握了 Docker Compose 的核心用法。从简单的多容器部署到复杂的业务场景应用,Docker Compose 能满足各类项目需求。后续你可以尝试将其应用到自己的开发项目中,进一步探索它的强大功能。​

未经允许不得转载:云端研习社 » 10 分钟上手 Docker Compose:从零到一键部署实战