Docker uwsgi django

2021-02-03 18:00:37 浏览数 (1)

Docker服务器安装

代码语言:shell复制
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# curl -sSL https://get.daocloud.io/docker | sh

创建Dockerfile,这里路径在项目外层

代码语言:shell复制
FROM python:3.8
MAINTAINER hello_django
COPY hello_django /hello_django
WORKDIR ./
RUN pip install Django==3.1.5 -i https://mirrors.aliyun.com/pypi/simple/
RUN pip install djangorestframework==3.12.2 -i https://mirrors.aliyun.com/pypi/simple/
RUN pip install uwsgi -i https://mirrors.aliyun.com/pypi/simple/
RUN pip install gunicorn -i https://mirrors.aliyun.com/pypi/simple/
EXPOSE 8080

镜像操作

代码语言:shell复制
# 构建镜像
docker build -t hello_django:1.0 .
# 查看所有容器
docker container ls -a
# 查看已有镜像
docker images
docker image ls -a
# 查看实例
docker ps
# 导出镜像
docker save -o hello_django hello_django:1.0
# 导入镜像
docker load<hello_django
# 停止正在运行的容器
docker stop container-id
# 重启已经停止的容器
docker start container-id
# 不管容器是否启动都直接重启容器
docker restart container-id
# 删除不需要的容器
docker rm container-id
# 删除不需要的镜像
docker image rm image-id
# 运行镜像
docker run -d -p 8080:8080 --rm hello_django:1.0 python ./hello_django/manage.py runserver 0.0.0.0:8080
# 打开页面
open http://localhost:8080
# 进入虚拟空间命令行
docker exec -it PID bash

参考基本操作后,结合uwsgi部署生产环境,uwsgi.ini和Dockerfile都放在项目根目录下

代码语言:text复制
[uwsgi]
http= :8999
procname-prefix-spaced=hello_django
module = hello_django.wsgi:application
chdir = /hello_django/
pidfile = uwsgi.pid
socket = uwsgi.sock
master = true
vacuum = true
thunder-lock = true
enable-threads = true
workers = 5
harakiri = 30
processes = 8
py-autoreload = 1
chmod-socket = 664
post-buffering = 4096

准备容器

代码语言:shell复制
FROM python:3.8
MAINTAINER hello_django
COPY . /hello_django
WORKDIR /hello_django
RUN pip install -r requirements.txt -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple
CMD ["uwsgi", "--ini", "uwsgi.ini"]
EXPOSE 8999
# Django==3.1.5
# djangorestframework==3.12.2
# uwsgi

执行docker生成镜像并运行即可

代码语言:shell复制
# pipreqs ./ --encoding=utf-8 --force
docker build -t hello_django:1.0 .
docker run -it -d -p 8999:8999 hello_django:1.0

注意路径,都是容器内部路径,日志路径daemonize 保证进程自守护。在这个选项中通常会配置一个文件地址,日志会写入这个地址。如果不配置 daemonize,uWSGI 会在前台运行,日志输入到 STDOUT。这种情况下,建议用 Supervisor 来管理 uWSGI 进程。 因为 Sueprvisor 要求被管理的程序必须运行在非守护模式。当使用了 Supervisor 来管理进程后,uWSGI 输入到 STDOUT 的日志会被 Supervisor 的日志系统接管。

如果使用asgi异步网关

代码语言:shell复制
FROM python:3.8
MAINTAINER hello_django
COPY . /hello_django
WORKDIR /hello_django
RUN pip install -r requirements.txt -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple
CMD ["uvicorn","--host","0.0.0.0","--port","8080", "hello_django.asgi:application"]
EXPOSE 8080

注意地址和端口

0 人点赞