Docker+gunicorn+flask+adb环境搭建
1.准备配置文件
Dockerfile:
FROM python:3.8
MAINTAINER cq-safone
LABEL version="3.0" describe='yk'
WORKDIR /cq-safone/smart-home
COPY requirements.txt ./
RUN pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN apt-get update -y && apt-get install
RUN apt-get install android-tools-adb -y
RUN apt-get install default-jre -y
RUN apt-get install default-jdk -y
RUN adb devices
COPY . .
ENV LANG C.UTF-8
CMD ["gunicorn", "main:app", "-c", "./gunicorn.conf.py"]
gunicorn.conf.py
# gunicorn配置
import logging
import logging.handlers
from logging.handlers import WatchedFileHandler
import os
import multiprocessing
bind = '0.0.0.0:1236' # 绑定ip和端口号
backlog = 512 # 监听队列
timeout = 30 # 超时
worker_class = 'gevent' # 使用gevent模式,还可以使用sync 模式,默认的是sync模式
workers = multiprocessing.cpu_count() * 2 + 1 # 进程数
threads = 2 # 指定每个进程开启的线程数
loglevel = 'info' # 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"' # 设置gunicorn访问日志格式,错误日志无法设置
accesslog = "./log/gunicorn_access.log" # 访问日志文件
errorlog = "./log/gunicorn_error.log" # 错误日志文件
requirements.txt
PyYAML
uiautomator2
Flask
PyMySQL
gunicorn
gevent
numpy
pandas
greenlet
eventlet
main.py
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/', methods=['POST', 'GET'])
def aa():
print('hello world!!')
return jsonify(code='200')
if __name__ == '__main__':
app.run()
当前目录有如下几个文件
[root@VM-0-2-centos a]# docker --version # docker版本
Docker version 20.10.21, build baeda1f
2. 制作docker images
sudo docker build -t smarthome:4.0 .
3. 创建镜像
sudo docker run -it --name=smart -p 1236:1236 --privileged=true -v /dev/bus/usb:/dev/bus/usb -v /root/a/log:/cq-safone/smart-home/log smarthome:4.0
# --name 是给你创建的容器起一个名字,在后续进行容器操作的时候可以直接使用名字,而不是使用id
# -p 讲寄主机的端口映射到容器中,前一个是本机的端口,后一个是容器的端口
# -v 目录挂载,冒号前一个是本机的路径,后面是容器中的路径
# 在创建容器的过程中可能会卡着。这时候就需要结束容器,然后在重新启动
# ctrl+c 结束容器
# 重新启动容器
sudo docker start smart
# 在本机中检测镜像是否创建成功
ll log/
# 你会发现多了两个日志文件
# 查看本机是否有docker容器的端口
sudo netstat -anpt|grep 1236
- 查看容器内的adb命令是否可用
sudo docker exec -it smart adb devices
- 进入容器
sudo docker exec -it smart bash
- 寄主机文件复制到容器中
-sudo docker stop smart
-sudo docker cp 主机路径 smart:容器路径
由于该服务器没有adb设备,所以使用adb devices 没办法查看到设备列表,还有值得注意的是寄主机也需要安装adb和Java环境。