Docker部署Python项目

简介

软件开发最大的麻烦事之一就是环境配置,操做系统设置,各类库和组件的安装。只有它们都正确,软件才能运行。若是从一种操做系统里面运行另外一种操做系统,一般咱们采起的策略就是引入虚拟机,好比在 Windows 系统里面运行 Linux 系统。这种方式有个很大的缺点就是资源占用多、冗余步骤多、启动慢。目前最流行的 Linux 容器解决方案之一就是Docker,它最大优势就是轻量、资源占用少、启动快。本文从什么是Docker?Docker解决什么问题?有哪些好处?如何去部署实现去全面介绍。html

docker部署项目优点

设想这样一个真实案例,假如咱们要部署一个Python应用程序,要作哪些工做?首先须要python运行环境,好比部署的是python3,而机器上是python2。先装个python3,还要装各类依赖包,机器一些可能的冲突。装完python以后,发现还要装mysql或者redis。继续下载安装配置。啥?服务器不用了,须要换一台服务器?那从新来一遍吧。啥?基础应用作的太好要进行推广,须要指导其余厂商部署?这怎么办?能够看出,在 Docker 以前软件行业的运维存在着如下这些痛点:python

# 1. 软件的发布和部署低效又繁琐,并且老是须要人工介入
# 2. 环境的一致性难移保证
# 3. 在不一样环境之间迁移的成本较高

在完成Docker部署安装以前,咱们仍是先认识下Docker的优势:mysql

# 1. 软件构建容易,分发简单
# 2. 应用获得隔离,依赖被解除
# 3. 能够完美地用于 CI/CD
# 4. 快速部署,测试完之后销毁也方便

方式一: 基于Python基础镜像

# 准备数据目录
mkdir myproject
cd myproject
docker run -di --name=myproject -p 8080:8080 -v /home/myproject:/home python:3.6

# 将你的项目上传到服务器挂载的存储卷上
scp django.tar.gz 149.129.38.117:
cp /root/django.tar.gz /home/myproject/
tar xvf django.tar.gz

# 进入容器安装相关依赖
pip install -r requirement.txt
apt-get update
apt-get install vi

# setting.py 改为下面
ALLOWED_HOSTS = ['*']
# 运行项目(wsgiref)
python manage.py runserver 0.0.0.0:8080

uwsgi运行项目nginx

pip3 install uwsgi

# 在项目根路径下建立一个uwsgi.ini 文件,写入

[uwsgi]
#配置和nginx链接的socket链接
socket=0.0.0.0:8080
#也可使用http
#http=0.0.0.0:8080
#配置项目路径,项目的所在目录
chdir=/home/django_test
#配置wsgi接口模块文件路径
wsgi-file=django_test/wsgi.py
#配置启动的进程数
processes=4
#配置每一个进程的线程数
threads=2
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件
pidfile=uwsgi.pid
#配置dump日志记录
daemonize=uwsgi.log


#启动,中止,重启,查看
uwsgi --ini uwsgi.ini #启动
lsof -i :8001    #按照端口号查询
ps aux | grep uwsgi   #按照程序名查询
kill -9 13844       #杀死进程

uwsgi --stop uwsgi.pid      #经过uwsg中止uwsgi
uwsgi --reload uwsgi.pid  #重启

# nginx转发

mkdir -p nginx/conf nginx/html nginx/logs

# 在conf目录下新建nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
          #uwsgi_pass 149.129.38.117:8080;
          proxy_pass http://149.129.38.117:8080;
        }  
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

docker run --name nginx -id -p 80:80 -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/html:/etc/nginx/html -v /home/nginx/logs:/var/log/nginx nginx

# 在 python的docker中用uwsgi跑起项目来便可

# 外部访问:http://149.129.38.117/
相关文章
相关标签/搜索