Docker Compose使用实例

Docker Compose 是 Docker 官方推出的一个用于定义和运行多个 Docker 容器的工具。它使用 YAML 文件来配置多个容器之间的关系和依赖,并且可以通过简单的命令来启动、停止和重新构建这些容器。

本文将以一个简单的web应用为例,使用 Docker Compose 来管理容器的部署和运行。通过这个示例,你将了解到 Docker Compose 的基本用法和常用命令。

准备工作

在开始之前,我们需要安装 Docker 和 Docker Compose。

安装 Docker

首先,我们需要安装 Docker。请根据你的操作系统类型,选择对应的安装方式。你可以在 Docker 官方网站上找到相应的安装指南。安装完成后,通过运行以下命令来验证安装是否成功:

docker version

如果安装成功,你将看到 Docker 客户端和服务器的版本信息。

安装 Docker Compose

接下来,我们需要安装 Docker Compose。你可以在 Docker Compose 的官方 GitHub 页面上找到安装指南。根据你的操作系统类型,选择对应的安装方式进行安装。安装完成后,通过运行以下命令来验证安装是否成功:

docker-compose version

如果安装成功,你将看到 Docker Compose 的版本信息。

创建示例应用

我们的示例应用是一个简单的 web 服务,由两个容器组成:一个用于运行 web 服务器的容器,一个用于运行数据库的容器。我们使用 Python 和 Flask 来实现 web 服务器,使用 MySQL 来作为数据库。

创建项目目录

首先,我们需要创建一个项目目录,用于存放应用的所有文件。在终端中运行以下命令:

mkdir myapp
cd myapp

创建 Dockerfile

在项目目录中,我们创建一个名为 Dockerfile 的文件,用于构建 web 服务器容器。Dockerfile 是一个文本文件,包含了一系列的指令,告诉 Docker 如何构建一个镜像。以下是一个简单的 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" ]

上述 Dockerfile 文件的内容解释如下:

  • FROM 指令指定了一个基础镜像,本示例中使用的是 Python 3.8 的 slim-buster 版本。
  • WORKDIR 指令设置了容器的工作目录。
  • COPY 指令将本地的 requirements.txt 文件复制到容器中。
  • RUN 指令执行了 pip install 命令,安装了 requirements.txt 中指定的所有依赖。
  • COPY 指令将当前目录中的所有文件都复制到容器中。
  • CMD 指令定义了容器启动时要执行的命令。

创建 requirements.txt

在项目目录中,我们创建一个名为 requirements.txt 的文件,用于指定应用的依赖。在本示例中,我们只需要 Flask 和 pymysql 两个依赖。requirements.txt 的内容如下:

Flask==2.0.1
pymysql==1.0.2

创建 app.py

在项目目录中,我们创建一个名为 app.py 的文件,用于实现 web 服务器。以下是一个简单的示例:

from flask import Flask
from flask import jsonify
import pymysql

app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False

@app.route('/')
def hello():
    return 'Hello, Docker Compose!'

@app.route('/users')
def get_users():
    conn = pymysql.connect(host='db', user='root', password='password', db='mydb')
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM users')
    users = cursor.fetchall()
    cursor.close()
    conn.close()
    return jsonify(users)

if __name__ == '__main__':
    app.run(host='0.0.0.0')

上述 app.py 文件使用 Flask 构建了一个简单的 web 服务器,并提供了两个路由。/ 路由返回一个简单的欢迎消息,`/users