概述
在网上看了大部分的博文后,发现有关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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复