在现代软件开发和部署中,容器化技术已经成为了一种主流的解决方案。Docker 作为容器化技术的代表,极大地简化了应用程序的打包、分发和部署过程。而 Docker Compose 则是 Docker 生态系统中的一个重要工具,它允许用户使用 YAML 文件来定义和管理多个 Docker 容器的应用。本文将详细介绍如何在 Ubuntu 22 系统上使用 Docker Compose 来管理多容器应用。

一、Ubuntu 22 系统准备

在开始使用 Docker Compose 之前,需要确保你的 Ubuntu 22 系统已经完成了基本的更新和配置。打开终端,执行以下命令来更新系统软件包列表和安装必要的依赖:

sudo apt update
sudo apt upgrade -y
sudo apt install apt-transport-https ca-certificates curl software-properties-common

这些命令会更新系统的软件包索引,将已安装的软件包升级到最新版本,并安装一些必要的传输协议和证书相关的软件包。

二、安装 Docker 引擎

要使用 Docker Compose,首先需要安装 Docker 引擎。可以通过 Docker 官方的存储库来安装最新版本的 Docker。执行以下命令添加 Docker 官方 GPG 密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

接着,添加 Docker 存储库到系统中:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

再次更新软件包列表,并安装 Docker 引擎:

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

安装完成后,验证 Docker 是否安装成功,执行以下命令:

sudo docker run hello-world

如果看到输出信息表明 Docker 已经成功运行,说明 Docker 引擎安装成功。

三、安装 Docker Compose

安装 Docker Compose 可以通过官方的二进制文件进行。首先,下载最新版本的 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

然后,赋予下载的二进制文件执行权限:

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

验证 Docker Compose 是否安装成功,执行以下命令查看版本信息:

docker-compose --version

如果能够正确显示版本号,说明 Docker Compose 已经安装成功。

四、创建 Docker Compose 文件

接下来,我们将创建一个简单的多容器应用示例,使用 Docker Compose 来管理。假设我们要创建一个包含一个 Web 服务器和一个数据库的应用。首先,创建一个项目目录,并在该目录下创建一个名为 docker-compose.yml 的文件:

mkdir myapp
cd myapp
touch docker-compose.yml

使用文本编辑器打开 docker-compose.yml 文件,添加以下内容:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    depends_on:
      - db
  db:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydb
      MYSQL_USER: user
      MYSQL_PASSWORD: password

在这个 YAML 文件中,我们定义了两个服务:webdbweb 服务使用最新版本的 Nginx 镜像,并将容器的 80 端口映射到主机的 80 端口。db 服务使用最新版本的 MySQL 镜像,并设置了数据库的相关环境变量。

五、启动多容器应用

在项目目录下,执行以下命令来启动 Docker Compose 管理的多容器应用:

docker-compose up -d

-d 参数表示以守护进程模式运行容器,即容器在后台运行。Docker Compose 会根据 docker-compose.yml 文件中的配置,自动下载所需的镜像,并启动相应的容器。

可以使用以下命令查看正在运行的容器:

docker-compose ps

如果看到 webdb 容器都处于运行状态,说明应用已经成功启动。

六、访问应用

在浏览器中输入服务器的 IP 地址或域名,就可以访问 Nginx 服务器。由于我们将容器的 80 端口映射到了主机的 80 端口,所以可以直接通过 http://your_server_ip 来访问。

同时,可以使用数据库管理工具(如 MySQL Workbench)来连接到 MySQL 数据库。连接信息如下:

主机:服务器的 IP 地址

端口:3306

用户名:user

密码:password

数据库:mydb

七、停止和删除容器

当需要停止和删除 Docker Compose 管理的多容器应用时,可以执行以下命令:

docker-compose down

该命令会停止并删除所有由 Docker Compose 启动的容器、网络和卷。

八、Docker Compose 的高级用法

除了基本的启动和停止容器,Docker Compose 还有许多高级用法。例如,可以使用 docker-compose build 命令来构建自定义的镜像。假设我们有一个自定义的 Web 应用,需要使用 Dockerfile 来构建镜像。在项目目录下创建一个 Dockerfile:

FROM nginx:latest
COPY ./index.html /usr/share/nginx/html/

docker-compose.yml 文件中修改 web 服务的配置:

version: '3'
services:
  web:
    build: .
    ports:
      - "80:80"
    depends_on:
      - db
  db:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydb
      MYSQL_USER: user
      MYSQL_PASSWORD: password

这里使用 build: . 表示使用当前目录下的 Dockerfile 来构建镜像。然后执行以下命令来构建和启动应用:

docker-compose build
docker-compose up -d

另外,还可以使用 Docker Compose 的环境变量来动态配置应用。在项目目录下创建一个 .env 文件,添加以下内容:

MYSQL_ROOT_PASSWORD=example
MYSQL_DATABASE=mydb
MYSQL_USER=user
MYSQL_PASSWORD=password

然后在 docker-compose.yml 文件中引用这些环境变量:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    depends_on:
      - db
  db:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}

这样可以方便地修改环境变量的值,而不需要直接修改 docker-compose.yml 文件。

九、总结

通过本文的介绍,我们学习了如何在 Ubuntu 22 系统上安装 Docker 引擎和 Docker Compose,并使用 Docker Compose 来管理多容器应用。从系统准备、软件安装,到创建 Docker Compose 文件、启动和停止应用,以及一些高级用法,都进行了详细的阐述。Docker Compose 为我们提供了一种简单、高效的方式来管理复杂的多容器应用,大大提高了开发和部署的效率。

在实际应用中,可以根据具体的需求,进一步扩展和优化 Docker Compose 的配置,例如添加更多的服务、使用自定义的网络和卷等。同时,要注意容器的安全性和资源管理,确保应用的稳定运行。