Docker-compose部署Python应用
目录结构
/app # python应用文件夹 api.py # API入口脚本文件 /docker # docker文件夹 docker-compose.yml # docker compose脚本文件 requirements.txt # python第三方依赖 run.sh # 容器启动执行脚本文件
api.py
from flask import Flask, request # 创建一个服务,赋值给APP app = Flask(__name__) # 指定接口访问的路径,支持什么请求方式get,post @app.route('/HelloWorld', methods=['post', 'get']) # 请求后直接拼接入参方式 def get_ss(): # 使用request.args.get方式获取拼接的入参数据 name = request.args.get('name') # 输出结果 return 'Hello World! ' + name app.run(host='0.0.0.0', port=8880, debug=True) # 这个host:windows就一个网卡,可以不写,而liux有多个网卡,写成'0.0.0.0'可以接受任意网卡信息
docker-compose.yml
version: "3" # docker-compose版本 services: docker-python-demo: # docker-compose编排名称,一般同微服务名称,注意不要与其他服务重名 image: "python:3.7.0b4" # docker镜像名及版本 hostname: docker-python-demo # docker容器主机名 container_name: docker-python-demo # docker容器名 volumes: # 挂载目录 - ../app:/app # 项目相关 - ../docker:/docker # docker相关 ports: # 端口映射 - "8880:8880" environment: # 配置环境变量 - TZ=Asia/Shanghai # 设置时区 command: bash /docker/run.sh # 设置启动命令 network_mode: bridge # 网络模式:host、bridge、none等,一般bridge restart: unless-stopped # 自动启动:unless-stopped、always等,unless-stopped为非正常停止则自动启动 # external_links: # 外链其他服务,此处名称为docker-compose编排名 # - mongodb
requirements.txt
flask
requests
run.sh
#!/bin/bash # 使用阿里云源安装必须组件 pip install -i https://mirrors.aliyun.com/pypi/simple/ -r /docker/requirements.txt # 运行API入口脚本 python /app/api.py
补充:
如果使用dockerfile进行环境定义,而以上配置没有dockerfile文件,也可以使用dockerfile文件进行构建,在docker目录下添加dockerfile文件:
# 基于镜像基础 FROM python:3.7.04b # 创建代码文件夹工作目录 /code RUN mkdir /code # 复制当前代码文件到容器中 /code COPY . /code # 安装所需的包 RUN pip install -r /code/requirements.txt -i https://pypi.douban.com/simple # 指定cmd的工作目录 /code WORKDIR /code CMD ["python", "/app/api.py"]
docker-compose.yml修改为如下(简单示例):
version: '3' services: docker-python-demo: build: . ports: - "8880:8880"
# redis: # image: "redis:alpine"
运行
在docker目录执行下面命令,如需后台运行,加参数 -d:
docker-compose up
其他常用命令:
在后台运行服务: $ docker-compose up -d 查看当前运行服务: $ docker-compose ps 查看web服务在使用的环境变量: $ docker-compose run web env 停止服务: $ docker-compose stop 停止并删除容器,网络,允许和卷 $ docker-compose down --volumes
验证服务
在浏览器中访问:
http://127.0.0.1:8880/HelloWorld?name=2021