Files
docker_practice/11_compose/11.3_usage.md
T

122 lines
2.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 11.3 使用
本节将通过一个具体的 Web 应用案例介绍 Docker Compose 的基本概念和常用操作
### 11.3.1 术语
首先介绍几个术语
* 服务 (`service`)一个应用容器实际上可以运行多个相同镜像的实例
* 项目 (`project`)由一组关联的应用容器组成的一个完整业务单元
可见一个项目可以由多个服务 (容器) 关联而成`Compose` 面向项目进行管理
### 11.3.2 准备示例
下面创建一个由 `web` `redis` 组成的简单示例项目
#### 应用代码
新建文件夹在该目录中编写 `app.py` 文件
```python
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` 文件内容为
```docker
FROM python:3.12-alpine
ADD . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]
```
#### compose.yaml
编写 `compose.yaml` 文件这是 Compose 推荐使用的主模板文件 (也兼容 `docker-compose.yml` 等历史文件名)
```yaml
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
```
### 11.3.3 启动与验证
#### 启动项目
```bash
$ docker compose up
```
此时访问本地 `5000` 端口每次刷新页面计数就会加 1
按下 `Ctrl-C` 停止项目
#### 后台运行与停止
```bash
$ docker compose up -d
$ docker compose stop
```
#### 查看日志
```bash
$ docker compose logs -f
```
#### 进入服务
```bash
$ docker compose exec redis sh
/data # redis-cli
127.0.0.1:6379> get hits
"9"
```
### 11.3.4 常用命令
#### 构建与重建
```bash
$ docker compose build
$ docker compose start
```
#### 运行一次性命令
```bash
$ docker compose run web python app.py
```
#### 验证与清理
```bash
$ docker compose config
$ docker compose down
```
> 💡 `docker compose down` 默认会删除容器和网络 **保留数据卷**如需同时删除数据卷请使用 `docker compose down -v`