Docker Compose:初学者指南
你好,未来的Docker大师们!我很高兴能成为你探索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。下面是如何操作:
- 下载当前稳定版本的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
- 为二进制文件应用可执行权限:
sudo chmod +x /usr/local/bin/docker-compose
- 验证安装:
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:
- 从Python 3.7 Alpine镜像开始
- 设置工作目录为
/code
- 设置Flask的环境变量
- 安装必要的依赖
- 复制并安装Python依赖
- 暴露端口5000
- 复制当前目录到容器中
- 设置运行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