我是靠谱客的博主 温柔小笼包,最近开发中收集的这篇文章主要介绍构建nginx+django+uwsgi的dockerfile,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在网上看了大部分的博文后,发现有关nginx+django+uwsgi+mysql的dockerfile没有一个人完整的放出来,大多数都是需要手动pull下来,也许是我操作的姿势不对。在尝试的pull了几个别人的镜像都不行后就决定还是自己写dockerfile了。我在这里放出来给大家分享。如果尝试过有用的话可以评论告诉大家呢

 

dockerfile如下:

FROM centos:7
MAINTAINER gdut_hjx
RUN yum install -y gcc gcc-c++ make vim git       #安装应用运行所需要的工具依赖
openssl-devel pcre-devel gd-devel 
iproute net-tools telnet wget curl initscripts psmisc && 
yum clean all && 
rm -rf /var/cache/yum/*                        #清除yum的缓存,缩小镜像大小

RUN wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz &&      #安装python3
tar -xvJf  Python-3.6.2.tar.xz && 
cd Python-3.6.2 && 
./configure prefix=/usr/local/python3 && 
make && make install && 
cd .. && rm -rf /Python-3.6.2* && 
rm -rf /usr/bin/python && 
ln -s /usr/local/python3/bin/python3 /usr/bin/python &&           #建立python3跟pip3的软链接
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
RUN set -ex                                                       
    && sed -i "s#/usr/bin/python#/usr/bin/python2.7#" /usr/bin/yum    #yum需要python2的环境
    && sed -i "s#/usr/bin/python#/usr/bin/python2.7#" /usr/libexec/urlgrabber-ext-down 
    && yum install -y deltarpm 
    && pip install --upgrade pip

RUN cd /usr/local && 
    wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm &&    #下载安装mysql配置源,注意我的这个镜像
    rpm -ivh mysql-community-release-el7-5.noarch.rpm &&         #并没有安装mysql,下载它的配置源是为了后面安装mysql-devel
    yum -y install mysql-devel

RUN pip install django==2.0 &&                  #安装django的依赖
    pip install setuptools && 
    pip install supervisor && 
    pip install uwsgi && 
    ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi && 
    pip install mysqlclient                       #安装mysqlclient的前提是安装mysql-devel
RUN mkdir usr/project &&                         #新建一个目录,下面会创建一个django的测试项目
    cd /usr/project &&                           
    ln -s /usr/local/python3/bin/django-admin /usr/bin/django-admin && 
    ../local/python3/bin/django-admin.py startproject testproject &&    
    cd testproject && touch uwsgi.ini                 
       
RUN wget http://nginx.org/download/nginx-1.15.5.tar.gz &&     #安装nginx
tar zxf nginx-1.15.5.tar.gz && 
cd nginx-1.15.5 && 
./configure --prefix=/usr/local/nginx 
--with-http_ssl_module 
--with-http_stub_status_module && 
make -j 4 && make install && 
cd / && rm -rf nginx-1.15.5* && 
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime      #做时区的重定向软链

    
ENV PATH $PATH:/usr/local/nginx/sbin          #做一个环境变量,方便在里面直接使用nginx命令
WORKDIR /usr/local/nginx                      #设置工作目录
EXPOSE 80                                     #声明80端口
CMD ["nginx","-g","daemon off;"]              #新建容器就开启nginx

大家在构建镜像时记得把注释去掉,否则会报错

然后在当前你编写的dockerfile目录下运行  docker build -t Image_name -f Dockerfile_name .   注意 . 表示的是当前目录下寻找Dockerfile   来建立自己的镜像

然后通过docker run -d --name Mycentos -p 8001:80 -p 9000:9000 centos:v5来构建一个容器,容器的名字可以自己取

然后输入docker ps -a来检查自己的容器是否挂起,若没有挂起,通过docker logs centos5来查看原因

需要跟大家说明的是我这个容器只是只是用来运行django+nginx+uwsgi的,mysql用的是另外一个容器。若想要把mysql也集成进来,请戳这里

 

 

此时在输入主机名+8001端口应该就能访问到nginx的欢迎页面了

然后先进入到容器里面docker exec -it Mycentos /bin/bash

进入到我们的测试项目里面,修改我们的settings.py文件

1.修改ALLOWED_HOSTS

2.修改database设置,改为mysql  注意我们容器里是没有安装mysql的,我这里借助的是另外的一个容器来运行mysql服务,数据库“sys”是  mysql自带的,这里只是用来测试。HOST改为你的主机名。不知道如何通过远程连接上容器的mysql可以查看我的这篇文章的第一部分

修改完成后保存退出

然后返回上一级目录(也就是与manage.py同级的目录下) 执行python manage.py migrate && python manage.py runserver 0.0.0.0:9000命令运行django

 

此时访问我们的服务器名加9000端口,就能出现django的欢迎界面了

 

但是现在我们按ctrl+C退出之后django就没能工作了。因此我们要配置好我们的uwsgi.ini和nginx.conf文件

注意uwsgi文件里不能带有注释,有的话要先删除,否则会报错!

[uwsgi]
socket = :8000
chdir = /usr/project/testproject
module =testproject.wsgi
master =true
process =4
threads = 2
buffer-size = 65536
vacuum =true
daemonize= /var/log/testproject_uwsgi.log

然后输入  uwsgi --ini uwsgi.ini   来重启uwsgi

显示 [uWSGI] getting INI configuration from uwsgi.ini 表明uwsgi运行成功。

注意  uwsgi --ini uwsgi.ini   运行时后面别带空格,否则会报错 

接下来编写nginx.conf文件

给nginx配置一个9000端口  注意这里的localhost指的是我们容器的ip   

uwsgi_pass中的端口号要与uwsgi里的socket一致,并且不能与listen监听的端口号重复!否则会报400错误!

保存退出后输入 nginx -s reload  重启nginx

再次访问9000端口就可以了

 

 

下一篇文章我将部署真实的项目到此容器上,戳这里

最后

以上就是温柔小笼包为你收集整理的构建nginx+django+uwsgi的dockerfile的全部内容,希望文章能够帮你解决构建nginx+django+uwsgi的dockerfile所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部