跳至主要內容

Docker 进阶 - Docker Compose

bsfc.tech大约 3 分钟DockerDocker Compose

Docker Compose 是 Docker 官方推出的一个工具,用于定义和运行多容器 Docker 应用程序。它通过一个 YAML 文件(默认为 docker-compose.yml)来配置所有的服务,使得定义、部署和管理相关联的多个容器变得简单高效。下面是对 Docker Compose 的详细解析:

1. 安装 Docker Compose

Docker Compose 通常是随着 Docker Desktop 自动安装的,对于Linux系统,可以从Docker的官方网站下载或通过pip安装。安装完成后,你可以通过 docker-compose --version 命令来检查版本。

[root@bsfc-tech ~]# sudo curl -L "https://github.com/docker/compose/releases/download/v2.22.20/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100     9  100     9    0     0      9      0  0:00:01 --:--:--  0:00:01     9
[root@bsfc-tech ~]# sudo chmod +x /usr/local/bin/docker-compose
[root@bsfc-tech ~]# docker-compose version
Docker Compose version v2.23.3

2. Docker Compose YAML 文件

Docker Compose 配置文件是使用 YAML 语法编写的,它定义了服务、网络和卷等组件。一个基本的 docker-compose.yml 文件可能如下所示:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  mysql:
    image: mysql:latest

这个例子中定义了两个服务:一个是使用最新 Nginx 镜像的 Web 服务器,另一个是使用最新 mysql 镜像的数据库。

3. 网络配置

Docker Compose 可以为服务自动创建网络,并让服务间的通信变得简单。默认情况下,每个服务都在一个独立的网络中,并且服务名可以作为主机名互相访问。

4. 环境变量

可以在 environment 部分定义环境变量,这些变量会被设置到容器的环境中。这对于配置数据库密码、API密钥等非常有用。

5. 卷挂载

通过 volumes 配置可以实现宿主机与容器间的数据共享或持久化存储。例如:

volumes:
  - ./data:/var/lib/mysql/data

这会将主机的 ./data 目录挂载到容器的 /var/lib/mysql/data,使得数据库的数据可以在容器之外被持久化。

6. 服务扩展与负载均衡

Docker Compose 支持服务的扩展,只需增加服务副本的数量即可实现水平扩展。例如:

services:
  web:
    deploy:
      replicas: 3

这样,Web服务将会部署为3个副本,Docker会自动进行负载均衡。

7. 常用命令

  • 启动服务docker-compose up
  • 停止并删除服务docker-compose down
  • 查看服务状态docker-compose ps
  • 构建服务:如果服务使用的镜像是本地不存在的自定义镜像,可以使用 docker-compose build 命令构建。

Docker Compose 提供了一种声明式的、易于理解的方式,帮助开发者和运维人员更高效地管理多容器应用的生命周期,极大地简化了微服务架构的部署和管理流程。

目前 Docker 官方用 GO 语言 重写 了 Docker Compose,并将其作为了 docker cli 的子命令,称为 Compose V2。 只要将熟悉的 docker-compose 命令替换为 docker compose,即可使用 Docker Compose。


以上是本篇文章的全部内容,如对你有帮助帮忙点赞 + 转发 + 收藏。