本系列文章主要介绍Python的一款轻量化web框架flask的使用,这里使用docker-compose来快速搭建开发环境。由于本人经验有限,文章难免有纰漏之处,还请海涵。
1.安装docker
1 2 3 4 5 6 7 8 9 10 11 12
| sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
2.安装docker-compose
1 2
| curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
|
3.项目文件结构
如下是本篇完成后的项目文件结构:
1 2 3 4 5 6 7 8
| . ├── data │ ├── mysql │ └── redis ├── docker-compose.yml ├── Dockerfile ├── requirements.txt └── wsgi.py
|
4.docker-compose.yml
这里共起了3个服务,分别是web、mysql、redis,将mysql和redis的数据挂载到了宿主机,服务之间通过新建的桥接网络通信。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| version: '2'
networks: backend: driver: bridge
services: web: build: . privileged: true ports: - "5000:5000" networks: - backend depends_on: - mysql - redis
redis: image: redis:5.0 environment: - TZ=Asia/Shanghai privileged: true volumes: - ./data/redis:/data ports: - "6379:6379" networks: - backend restart: always
mysql: image: mysql:5.7 environment: - TZ=Asia/Shanghai - MYSQL_USER=admin - MYSQL_PASSWORD=admin - MYSQL_ROOT_PASSWORD=root privileged: true volumes: - ./data/mysql:/var/lib/mysql ports: - "3306:3306" networks: - backend restart: always
|
5.Dockerfile
这里是web服务的Dockerfile,首先设置了pip源,然后拷贝requirements.txt安装依赖包,最后拷贝项目文件并启动flask自带的服务。
1 2 3 4 5 6 7 8 9 10 11
| FROM python:3.8-alpine
RUN pip config set global.index-url http://mirrors.aliyun.com/pypi/simple RUN pip config set install.trusted-host mirrors.aliyun.com
WORKDIR /code COPY requirements.txt /code/requirements.txt RUN pip install -r requirements.txt
ADD . /code CMD ["python", "wsgi.py"]
|
6.requirements.txt
7.wsgi.py
flask项目的hello world,后面会进行扩展。
1 2 3 4 5 6 7 8 9 10
| from flask import Flask
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST']) def hello_world(): return 'hello_world'
if __name__ == '__main__': app.run('0.0.0.0', 5000)
|
8.测试
我们在两个命令行窗口中分别起服务和发送http请求,预期能打印出hello_world。
1 2 3 4 5 6
| docker-compose up --build
curl 127.0.0.1:5000 hello_world
|