Centos Docker搭建 NGINX+Gunicorn+Flask

使用docker打包flask项目,并使用nginx运行。所以程序放在一个镜像

1.Centos安装好docker  :yum -y install docker

2.代码目录,主程序是book.py:

docker-book/
├── book
│   ├── app_config.py
│   ├── book.py
│   ├── db
│   ├── gunicorn.conf.py
│   ├── log
│   ├── model
│   ├── requirements.txt
│   ├── static
│   ├── templates
│   └── util
├── Dockerfile
├── nginx-book.conf
├── nginx.conf
└── build.sh

说明:

gunicorn.conf.py是gunicorn运行时候的配置:

import gevent.monkey
gevent.monkey.patch_all()
import multiprocessing

bind = '0.0.0.0:9009'
# workers = multiprocessing.cpu_count() * 1 + 1
backlog = 2048
workers=1
worker_class = 'gunicorn.workers.ggevent.GeventWorker'
proc_name = 'gunicorn.proc'
pidfile = 'log/gunicorn.pid'
errorlog = 'log/gun_err.log'
accesslog ='log/gun_access.log'
loglevel = 'info'
daemon = True
#debug = True

nginx-book.conf是nginx运行的配置

server {
    listen 80;
    server_name book.yzf.net; # 这是HOST机器的外部域名,用地址也行

    location / {
        proxy_pass http://127.0.0.1:9009; # 这里是指向 gunicorn host 的服务地址
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

  }


3.Dockerfile如下是给nginx单独启动的docker,直接引用了现成的docker,替换下我们自己的配置文件

#nx-gunicorn-flask with python2
FROM centos:7

LABEL author="guoyouchun"
LABEL purpose = 'install yzf book management system'


ENV PYTHONIOENCODING=utf-8

#指定容器目录
RUN mkdir -p /home/yzfbook/
WORKDIR /home/yzfbook

#把源码拷贝过来,不需要book目录
COPY book .

#安装NGINX
COPY nginx-release-centos-7-0.el7.ngx.noarch.rpm .
RUN rpm -Uvh ./nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN rm -f ./nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN  yum install -y nginx
RUN rm -f /etc/nginx/conf.d/*
COPY nginx.conf /etc/nginx/nginx.conf
COPY ngin-book.conf /etc/nginx/conf.d/

#安装python依赖
COPY setuptools-40.8.0 ./setuptools-40.8.0
COPY pip-19.0.3 ./pip-19.0.3
WORKDIR /home/yzfbook/setuptools-40.8.0
RUN python setup.py install
WORKDIR /home/yzfbook/pip-19.0.3  
RUN python setup.py install
RUN rm -rf /home/yzfbook/setuptools-40.8.0 /home/yzfbook/pip-19.0.3

WORKDIR /home/yzfbook
RUN pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

# 安装 gunicorn
RUN pip install gunicorn -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

#启动:
RUN chmod +x ./start.sh
CMD ["./start.sh"]

4.start.sh是运行脚本。发现nginx在容器里面启动不来,还没找出为啥原因,只能手动启动

#!/bin/sh
cd /home/yzfbook/
gunicorn -c gunicorn.conf.py book:app
nginx

 

5.全量的build.sh脚本如下::

#!/bin/sh
#删除镜像,重新打包
docker ps -a |grep mybook|awk -F ' ' '{print $1}'|xargs docker stop
docker ps -a |grep mybook|awk -F ' ' '{print $1}'|xargs docker rm
docker image list |grep mybook|awk -F ' ' '{print $3}'|xargs docker image rm
docker build -f Dockerfile -t mybook:v1 .

#解决权限问题 setenforce 0
#在主机建立好映射的目录 mkdir -p /data/log/{nginx,book}


docker run -p 80:80 -v /data/log/nginx:/var/log/nginx -v /data/log/yzfbook:/home/yzfbook/log --name mybook -d mybook:v1

#这个为了解决nginx在容器没法执行
myid=`docker ps|grep mybook|awk -F ' ' '{print $1}' `
docker exec -it $myid /bin/bash
nginx

6.访问80端口

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值