赞
踩
在前面例子中我们使用了Django了自带的runserver命令启动了测试服务器,但实际生成环境中你应该需要使用支持高并发的uwsgi服务器来启动Django服务。尽管本节标题是把uwsgi加入到Django容器中,但本身这句话就是错的,因为我们Django的容器是根据django_docker_img:v1这个镜像生成的,我们的镜像里并没有包含uwsgi相关内容,只是把uwsgi.ini配置文件拷入到Django容器是不会工作的。
所以这里我们需要构建新的Dockerfile并构建新的镜像和容器。为了方便演示,我们创建了一个名为mysite2的项目,项目结构如下所示:
- firstweb
- ├── db.sqlite3
- ├── Dockerfile # 构建docker镜像所用到的文件
- ├── manage.py
- ├── mysite2
- │ ├── asgi.py
- │ ├── __init__.py
- │ ├── settings.py
- │ ├── urls.py
- │ └── wsgi.py
- ├── pip.conf
- ├── requirements.txt # 两个依赖:django==3.0.5 uwsgi==2.0.18
- ├── start.sh # 进入容器后需要执行的命令,后面会用到
- └── uwsgi.ini # uwsgi配置文件
编写dockerfile
- FROM python:3.7
-
- MAINTAINER bnq
-
- ENV PYTHONUNBUFFERED 1
-
- COPY pip.conf /root/.pip/pip.conf
-
- RUN mkdir -p /var/www/html/firstweb
-
- RUN apt-get update && apt-get install net-tools
- RUN apt-get update && apt-get install vim -y
-
- WORKDIR /var/www/html/firstweb
-
- ADD . /var/www/html/firstweb
-
- RUN pip3 install -r requirements.txt
-
- RUN chmod +x ./start.sh
编写pip.conf
- [global]
- index-url = https://mirrors.aliyun.com/pypi/simple/
- [install]
- trusted-host=mirrors.aliyun.com
编写uwsgi.ini
- [uwsgi]
- http=0.0.0.0:8000 #端口号
- chdir=/var/www/html/firstweb/ #uwsgi.ini所在位置
- wsgi-file=/var/www/html/firstweb/firstweb/wsgi.py #uwsgi.py文件所在位置
- master=true
- processes=1
- #static-map=/static=/home/bu/market/static #项目静态文件所在位置
- vacuum=true
- buffer-size=65535
-
- #设置一个请求的超时时间(秒),如果一个请求超过了这个时间,则请求被丢弃
- harakiri=60
- #当一个请求被harakiri杀掉会,会输出一条日志
- harakiri-verbose=true
编写start.sh
- #!/bin/bash
- #1.生成数据库迁移文件
- python3 manage.py makemigrations&& \r
- #2.根据数据库迁移文件来修改数据库
- python3 manage.py migrate&& \r
- #3.用uwsgi启动django服务,不再使用python3 manage.py runserver \r
- uwsgi --ini /var/www/html/firstweb/uwsgi.ini
这边需要注意(出现inux下执行Shell脚本出现$‘\r‘: command not found解决方法)
- vim start.sh
- :set ff=unix
- :wq
第一步:生成名为django_uwsgi_img:v1的镜像
sudo docker build -t django_uwsgi_img:v1 .
第二步:启动并运行mysite2的容器
- # 启动并运行mysite2的容器
- sudo docker run -it -d --name mysite2 -p 84:8000 django_uwsgi_img:v1
第三步:进入mysite2的容器内部,并运行脚本命令start.sh
- # 进入容器,如果复制命令的话,结尾千万不能有空格。
- sudo docker exec -it mysite2 /bin/bash
- # 执行脚本命令
- sh start.sh
以上两句命令也可以合并成一条命令
sudo docker exec -it mysite2 /bin/bash start.sh
执行后效果如下所示。当你看到最后一句[uWSGI]时,说明uwsgi配置并启动完成。
测试:虚拟机登陆网站查看 0.0.0.0:84
主机登录虚拟机ip:80查看(192.168.33.136:84)
1.将market项目放到/home/zhu文件夹下
将requirements.txt文件夹内所有组件的版本号全部删除,修改如下
- asgiref
- click
- colorama
- cycler
- Django
- django-simpleui
- django-tinymce
- django-utils-six
- et-xmlfile
- Flask
- fonttools
- itsdangerous
- Jinja2
- kiwisolver
- MarkupSafe
- matplotlib
- numpy
- openpyxl
- packaging
- pandas
- Pillow
- pyparsing
- python-dateutil
- pytz
- six
- sqlparse
- terminaltables
- tzdata
- Werkzeug
添加如下文件:
pip.conf
- [global]
- index-url = https://mirrors.aliyun.com/pypi/simple/
- [install]
- trusted-host=mirrors.aliyun.com
- FROM python:3.7
-
- MAINTAINER bnq
-
- ENV PYTHONUNBUFFERED 1
-
- COPY pip.conf /root/.pip/pip.conf
-
- RUN mkdir -p /var/www/html/market
-
- RUN apt-get update && apt-get install net-tools
- RUN apt-get update && apt-get install vim -y
-
- WORKDIR /var/www/html/market
-
- ADD . /var/www/html/market
-
- RUN pip3 install -r requirements.txt
-
- RUN chmod +x ./start.sh
编写uwsgi.ini.文件
- [uwsgi]
- #端口号
- http=0.0.0.0:8001
- #uwsgi.ini所在位置
- chdir=/var/www/html/market/
- #uwsgi.py文件所在位置
- wsgi-file=/var/www/html/market/market/wsgi.py
- master=true
- processes=1
- #项目静态文件所在位置
- static-map=/static=/var/www/html/market/static
- vacuum=true
- buffer-size=65535
-
- #设置一个请求的超时时间(秒),如果一个请求超过了这个时间,则请求被丢弃
- harakiri=60
- #当一个请求被harakiri杀掉会,会输出一条日志
- harakiri-verbose=true
编写start.sh
- #!/bin/bash
- #1.生成数据库迁移文件
- python3 manage.py makemigrations&&
- #2.根据数据库迁移文件来修改数据库
- python3 manage.py migrate&&
- #3.用uwsgi启动django服务,不再使用python3 manage.py runserver
- uwsgi --ini /var/www/html/market/uwsgi.ini
利用Dockerfile创建镜像
- # 创建名为django_docker_img的镜像,版本为v1
- sudo docker build -t market_docker_img:v1 .
-
- # 查看创建的镜像
- [root@192 market]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 62b496670228 market_uwsgi_img:v1 "python3" 29 minutes ago Up 29 minutes 0.0.0.0 :85->8001/tcp, :::85->8001/tcp mysite4
-
-
- [root@192 market]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- market_uwsgi_img v1 340c3575df4d 32 minutes ago 1.43GB
利用镜像生成容器并后台运行,容器名为mysite4
-
- docker run -it -d --name mysite4 -p 85:8001 market_uwsgi_img:v1
-
- # 查看所有容器状态
- [root@hdp01 firstweb]# docker ps
- [root@192 market]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 62b496670228 market_uwsgi_img:v1 "python3" 29 minutes ago Up 29 minutes 0.0.0.0 :85->8001/tcp, :::85->8001/tcp mysite4 Up About an hour 0.0.0.0:8080->8000/tcp, :::8080->8000/tcp firstweb
进入容器
- sudo docker exec -it mysite4 /bin/bash
-
- root@62b496670228:/var/www/html/market# sh start.sh
- No changes detected
- Operations to perform:
- Apply all migrations: admin, auth, contenttypes, df_cart, df_goods, df_order, df_user, sessions
- Running migrations:
- No migrations to apply.
- [uWSGI] getting INI configuration from /var/www/html/market/uwsgi.ini
- [uwsgi-static] added mapping for /static => /var/www/html/market/static
- *** Starting uWSGI 2.0.23 (64bit) on [Thu Jan 11 06:20:19 2024] ***
- .....
测试:虚拟机登陆网站查看 0.0.0.0:85
主机登录虚拟机ip:80查看(192.168.33.136:85)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。