首先,app.py必不可少,添加上必要的import引用。
# -*- coding: utf-8 -*-
from flask import Flask,jsonify
from flask import abort
from flask import make_response
from flask import request
import requests, json
app=Flask(__name__)
@app.route('/api/user/login', methods=['POST', 'OPTIONS', 'GET'])
def login():
print("enter login")
if __name__ =='__main__':
app.run(debug = True)
其次,将上一步需要的import 库添加到requirements.txt中。
gunicorn
gevent
flask~=1.1.1
pip~=19.0.3
Jinja2~=2.10.1
Werkzeug~=0.16.1
requests~=2.21.0
添加entrypoint.sh脚本,务必在编译镜像之前,即给其添加可执行权限,比如chmod 755 entrypoint.sh
#!/bin/bash
gunicorn app:app -c /Project/demo/gunicorn.conf.py
否则会出现如下报错
docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "/Project/demo/entrypoint.sh": permission denied: unkn own.
以及gunicorn.conf.py文件
workers = 5
worker_class = "gevent"
bind = "0.0.0.0:1919"
最后是Dockerfile文件
FROM python:3.6
WORKDIR /Project/demo
COPY requirements.txt ./
RUN pip install -r requirements.txt -i https://pypi.douban.com/simple
COPY . .
RUN apt-get update
ENV ORACLE_HOME=/Project/demo/instantclient_11_2
ENV PATH=$ORACLE_HOME:$PATH
ENTRYPOINT ["/Project/demo/entrypoint.sh"]
使用如下两条命令即可分别编译镜像和启动服务。
docker build -t 'dongcaca' .
docker run -d -p 6666:8888 --name name_dongdongqiang dongcaca
则,访问 http://ip:1919/api/user/login 即可。
而如果需要访问数据库,还需要添加db_mg.py文件
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
class DatabaseManagement():
def __init__(self):
self.engine_postgre = create_engine('postgresql+psycopg2://ip.port',connect_args={'sslmode':'require'},echo=True) # 以连接odoo postgre数据库为例
DBsession_postgre = sessionmaker(bind=self.engine_postgre)
self.session_postgre = DBsession_postgre()
并且需要在app.py中添加相应的import导入设置
from db_mg import DatabaseManagement
from sqlalchemy import and_
db_obj = DatabaseManagement()
以及在requirements.txt中添加相关依赖
sqlalchemy
psycopg2
如果为了方便,还需要封装常用的数据库查询语句