1、搭建合理的项目架构
防止产生循环导入
# 例如这样,一个最基础的架构示例
# 然后配置日志等等
/
├── application/ # 项目主要逻辑代码保存目录
| ├── apps # 存放蓝图
| ├── settings/ # 项目配置存储目录
│ │ ├ dev.py # 开发阶段的配置文件
│ │ ├ prop.py # 生产阶段的配置文件
| ├──templates # 模版
│ ├── __init__.py # 项目初始化文件
├── manage.py # 项目的终端管理脚本文件
├──logs/ # 存放日志文件
├──docs/ # 存放文档文
2、编写dockerfile
a、首先需要准备好项目的依赖文件 requirements.txt
b、编写gunicorn.py
from gevent import monkey
import multiprocessing
monkey.patch_all()
# port
bind = "0.0.0.0:你的端口"
# 启动的进程数
workers = multiprocessing.cpu_count()
worker_class = 'gevent'
c、编写Dockerfile
# 挑选基础镜像
FROM ichpan/ubuntu-python38:v1
ADD ./ /chronus
WORKDIR /chronus
ENV TZ=Asia/Shanghai
RUN DEBIAN_FRONTEND="noninteractive" apt -y install tzdata
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN pip install -r requirements.txt
EXPOSE 5000
# gunicorn启动项目
# gunicorn -c gunicorn.py manage:app
ENTRYPOINT ["gunicorn", "-c", "gunicorn.py", "manage:app"]
d、打包镜像
docker build -t 生成的包名 .
e、启动镜像
docker run -d -p 宿主机端口:容器端口 镜像名
!!!项目搭建完毕
3、项目中有mysql和Redis的时候怎么连接?
使用方案:容器内连接宿主机服务
首先:ifconfig查看本机IP
a、容器内访问redis服务
在项目中修改redis的port、host为上面的port 和host
关闭redis的保护模式(即会阻挡外部网址访问), 首先打开redis的配置文件redis.conf, 然后找到protected-mode yes一行将yes改为no,当然如果你本身就是no就不用修改了
确保redis监听的本地所有地址,而不只是127.0.0.1地址(默认只监听这个地址) . 还是找到redis.conf文件找到绑定地址指令一般为bind 127.0.0.1 :1 , 在这行前将#, 将其注释掉, 那么他会监听本地所有地址.
b、容器内访问mysql
首先我们先看一下MySQL默认指定的my.cnf路径,使用命令
mysql --help|grep 'my.cnf'
# /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
# 这是四个默认的指定路径,MySQL从第一个路径依次去找my.cnf配置的文件
c、将编写好的mysql配置文件拷贝到 /etc下,然后修改权限
sudo chmod 664 my.cnf
d、修改权限
# 登录到MySQL服务,并连接到mysql库,输入命令
use mysql
# 将用户名为 root 的host修改为匹配所有的Host
update user set host='%' where user='root';
然后就可以访问到本地mysql了。
至此项目搭建完毕!!!