docker compose 是 Docker 官方提供的一个用于定义和运行多容器 Docker 应用程序的工具。它使用 YAML 文件来配置应用程序的服务,并可以一键启动、停止、重建服务。
本文将以一个实际的案例来介绍如何使用 Docker Compose 在一个镜像上运行多个容器实例。我们将创建一个简单的 Web 应用程序,并使用 Docker Compose 来启动多个实例来处理不同的请求。
准备工作
在开始之前,我们需要安装 Docker 和 Docker Compose。可以根据官方文档的说明进行安装。
安装完成后,我们可以通过运行以下命令来验证安装是否成功:
docker --version
docker-compose --version
如果显示了 Docker 和 Docker Compose 的版本信息,则说明安装成功。
创建一个简单的 Web 应用程序
我们将创建一个简单的 Web 应用程序,它使用 Flask 框架来提供一个简单的 "Hello, World!" 页面。我们使用 Python 来编写应用程序的代码。
首先,创建一个名为 app.py
的文件,并将以下代码复制到文件中:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
上述代码创建了一个 Flask 应用程序,并定义了一个路由,当访问根路径时返回 "Hello, World!"。
接下来,我们需要创建一个名为 Dockerfile
的文件,并将以下代码复制到文件中:
FROM python:3.8-slim-buster
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
上述代码定义了一个 Docker 镜像,它基于 Python 3.8 镜像,并将应用程序的代码复制到镜像中。然后,它安装了应用程序所需的依赖,并启动应用程序。
最后,我们需要创建一个名为 requirements.txt
的文件,并将以下代码复制到文件中:
flask
上述代码列出了应用程序所需的依赖库,这里只有 Flask。
编写 Docker Compose 配置文件
现在我们可以编写 Docker Compose 的配置文件了。创建一个名为 docker-compose.yml
的文件,并将以下代码复制到文件中:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
environment:
- FLASK_ENV=development
上述代码定义了一个服务名为 web
的服务。它使用当前目录中的 Dockerfile 来构建镜像,并将容器的 5000 端口映射到主机的 5000 端口。此外,它还定义了一个环境变量 FLASK_ENV
,其值为 development
,用于指定 Flask 运行在开发环境。
启动容器实例
现在,我们可以使用 Docker Compose 来启动容器实例了。在终端中,进入包含 docker-compose.yml
文件的目录,并运行以下命令:
docker-compose up --scale web=3
上述命令将会启动 3 个 web 服务的容器实例,每个实例都将会监听主机的 5000 端口。
验证应用程序
当容器实例启动后,我们可以在浏览器中访问 http://localhost:5000
来验证应用程序是否正常工作。可以多次访问该 URL,观察到不同的实例处理了不同的请求。
此外,我们可以使用 docker ps
命令来查看当前正在运行的容器实例:
docker ps
关系图
下面是一个使用 Docker Compose 运行多个容器实例的关系图:
erDiagram
web --|> container
上述关系图表示 web
服务是由多个容器实例组成的。
状态图
下面是一个使用 Docker Compose 运行多个容器实例的状态图:
stateDiagram
[*] --> Stopped