mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-08-10 16:37:34 +00:00
§7.3 of this book explicitly recommends COPY over ADD for simple
file copies ("在大多数情况下,你应该使用 COPY,而不是 ADD"). The intro
Compose example showed ADD without needing tar extraction or URL
download, contradicting the canonical guidance. Switched to COPY
so the first Dockerfile readers see matches the rule the book
teaches a few chapters later.
2.2 KiB
2.2 KiB
11.3 使用
本节将通过一个具体的 Web 应用案例,介绍 Docker Compose 的基本概念和常用操作。
11.3.1 术语
首先介绍几个术语。
-
服务 (
service):一个应用容器,实际上可以运行多个相同镜像的实例。 -
项目 (
project):由一组关联的应用容器组成的一个完整业务单元。
可见,一个项目可以由多个服务 (容器) 关联而成,Compose 面向项目进行管理。
11.3.2 准备示例
下面创建一个由 web 和 redis 组成的简单示例项目。
应用代码
新建文件夹,在该目录中编写 app.py 文件
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def hello():
count = redis.incr('hits')
return 'Hello World! 该页面已被访问 {} 次。\n'.format(count)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
Dockerfile
编写 Dockerfile 文件,内容为
FROM python:3.12-alpine
COPY . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]
compose.yaml
编写 compose.yaml 文件,这是 Compose 推荐使用的主模板文件 (也兼容 docker-compose.yml 等历史文件名)。
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
11.3.3 启动与验证
启动项目
$ docker compose up
此时访问本地 5000 端口,每次刷新页面,计数就会加 1。
按下 Ctrl-C 停止项目。
后台运行与停止
$ docker compose up -d
$ docker compose stop
查看日志
$ docker compose logs -f
进入服务
$ docker compose exec redis sh
/data # redis-cli
127.0.0.1:6379> get hits
"9"
11.3.4 常用命令
构建与重建
$ docker compose build
$ docker compose start
运行一次性命令
$ docker compose run web python app.py
验证与清理
$ docker compose config
$ docker compose down
💡
docker compose down默认会删除容器和网络,但 保留数据卷。如需同时删除数据卷,请使用docker compose down -v。