Docker Compose:初学者指南

你好,未来的Docker大师们!我很高兴能成为你探索Docker Compose世界的向导。作为多年教授计算机科学的教师,我见过许多学生在容器化概念上挣扎。但别担心!在本教程结束时,你将能够像专业人士一样编排容器。

Docker - Compose

什么是Docker Compose?

在我们开始之前,让我们从基础开始。想象你正在计划一个大型派对(因为谁不喜欢一个好的类比呢?)你需要协调食物、饮料、音乐和装饰。Docker Compose就像是你的派对策划工具,但用于容器!

从技术术语上讲,Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。它允许你使用YAML文件来配置应用程序的服务、网络和卷,然后通过一个命令创建和启动所有服务。

Docker Compose - 安装

现在,让我们在你的系统上安装Docker Compose。这个过程就像馅饼一样简单(mmm... 馅饼)。

对于Windows和Mac用户

如果你已经安装了Docker Desktop,恭喜你!你已经有了Docker Compose。它与安装一起打包。你可以跳到下一节去跳个快乐的舞蹈。

对于Linux用户

对于我们的Linux朋友,你需要单独安装Docker Compose。下面是如何操作:

  1. 下载当前稳定版本的Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. 为二进制文件应用可执行权限:
sudo chmod +x /usr/local/bin/docker-compose
  1. 验证安装:
docker-compose --version

如果你看到了版本号,那么你已经准备好了!

创建你的第一个Docker-Compose文件

现在我们安装了Docker Compose,让我们创建我们的第一个docker-compose.yml文件。这个文件就像你的应用程序的食谱 - 它告诉Docker你需要哪些配料(服务)以及如何准备它们。

让我们使用Python Flask和Redis创建一个简单的Web应用程序。如果你不熟悉这些技术 - 别担心!我们会尽量保持简单!

为你的项目创建一个新目录并进入其中:

mkdir my_first_compose_project
cd my_first_compose_project

现在,让我们创建我们的docker-compose.yml文件:

version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"

让我们分解一下:

  • version: '3':这指定了我们使用的Docker Compose文件格式的版本。
  • services:这个部分定义了我们想要运行的容器。
  • web:这是我们的Flask应用程序服务。
  • build: .:这告诉Docker从当前目录中的Dockerfile构建一个镜像。
  • ports: - "5000:5000":这映射了主机上的端口5000到容器中的端口5000。
  • redis:这是我们的Redis服务。
  • image: "redis:alpine":这告诉Docker使用Docker Hub上的官方Redis镜像。

创建Flask应用程序

现在,让我们创建一个简单的Flask应用程序。创建一个名为app.py的文件:

from flask import Flask
from redis import Redis

app = Flask(__name__)
redis = Redis(host='redis', port=6379)

@app.route('/')
def hello():
redis.incr('hits')
return f'你好世界!我已经被访问了{redis.get("hits").decode("utf-8")}次。'

if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)

这个简单的应用程序每次访问页面时都会在Redis中增加一个计数器。

创建Dockerfile

接下来,我们需要创建一个Dockerfile来构建我们的Flask应用程序。创建一个名为Dockerfile的文件:

FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

这个Dockerfile:

  1. 从Python 3.7 Alpine镜像开始
  2. 设置工作目录为/code
  3. 设置Flask的环境变量
  4. 安装必要的依赖
  5. 复制并安装Python依赖
  6. 暴露端口5000
  7. 复制当前目录到容器中
  8. 设置运行Flask的命令

创建需求文件

最后,我们需要指定我们的Python依赖。创建一个名为requirements.txt的文件:

flask
redis

运行你的Docker Compose应用程序

现在是激动人心的部分 - 运行你的应用程序!在终端中,运行:

docker-compose up

你应该会看到Docker Compose构建你的镜像并启动你的服务。完成后,打开浏览器并访问http://localhost:5000。你应该会看到你的"Hello World"消息,并且每次刷新页面时计数器都会增加。

Docker Compose命令

以下是一些常见的Docker Compose命令的便捷表格:

命令 描述
docker-compose up 创建并启动容器
docker-compose down 停止并移除容器、网络、镜像和卷
docker-compose ps 列出容器
docker-compose logs 查看容器的输出
docker-compose build 构建或重建服务
docker-compose start 启动服务
docker-compose stop 停止服务

结论

恭喜你!你刚刚使用Docker Compose创建并运行了你的第一个多容器应用程序。我们只是触及了Docker Compose的表面,但我希望这个教程为你提供了一个坚实的基础。

记住,学习Docker和容器化就像学习烹饪一样 - 它需要练习,但一旦你掌握了它,你将能够迅速制作出复杂的多容器食谱!

快乐的创作,未来的Docker厨师们!

Credits: Image by storyset