docker手动部署django项目Dockerfile编排-后端发布

1、首先创建一个桥接网络

docker network create auto

2、部署redis,提供celery的消息队列服务

bash 复制代码
docker run --name redis --restart=always -d --network auto -v redis:/data redis:alpine

3、部署数据库

注意数据库账号密码

bash 复制代码
docker run --name mariadb --restart=always -d --network auto -v mariadb:/var/lib/mysql -e MARIADB_ROOT_PASSWORD=123456789 -e TZ=Asia/Shanghai -p 3309:3306 -e MARIADB_DATABASE=apiauto mariadb:latest

查看网络的服务

bash 复制代码
docker inspect auto

3.1(可以忽略,手动部署,查看问题)

bash 复制代码
docker run --name app -it --network auto -v /diyauto/djangoapp:/app -p 9191:8000 python:3.8-alpine /bin/sh

3.2安装

进入app目录下

bash 复制代码
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt

提示更新

bash 复制代码
python3 -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple/ 

再次安装pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt

提示报错

图片这个alpine内核装mysqlclient比较困难

3.3解决办法:

sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories

apk update

apk upgrade

apk add tzdata mariadb-dev gcc libc-dev

python3 -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple/

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r reqirements.txt

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r reqiremensts.txt

再次下载第一个命令行。即可成了

3.4准备文件gunicorn.conf.py,放在根目录下

python 复制代码
bind = '0.0.0.0:8000'                               # 绑定地址和端口
reload = False
pidfile = '/app/logs/gunicorn.pid'                  # 进程id文件
accesslog = '/app/logs/gunicorn_acess.log'          # 通过日志
errorlog = '/app/logs/gunicorn_error.log'           # 启动,错误日志

执行文件命令

gunicron -c gunicorn.conf.py apiauto.wsgi

这是走到了开发环境,有错。

解决办法:查看环境变量,

export ENV=production
gunicorn -c gunicorn.conf.py apiauto.wsgi

手动启动容器,只对当前的进程5有用,1234窗口需要重新配置环境变量ENV=pro

3.5,迁移数据库(代码写数据库ip地址)。写mariadb报错。

migrate 创建超管。

3.6执行supervisord.conf,配置celery和wsgi执行

unix_http_server

file=/tmp/supervisor.sock ; the path to the socket file

supervisord

logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log

logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB

logfile_backups=10 ; # of main logfile backups; 0 means none, default 10

loglevel=info ; log level; default info; others: debug,warn,trace

pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid

nodaemon=true ; start in foreground if true; default false

silent=false ; no logs to stdout if true; default false

minfds=1024 ; min. avail startup file descriptors; default 1024

minprocs=200 ; min. avail process descriptors;default 200

rpcinterface:supervisor

supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

supervisorctl

serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket

program:gunicorn

command=gunicorn -c gunicorn.conf.py djangoapp.wsgi

program:celery_worker

command=celery -A djangoapp worker -l info

program:celery_beat

command=celery -A djangoapp beat -l info

bash 复制代码
supervisord -c supervisord.conf

再次重新执行,

也可以进行ps 查看进程

4、编写DockerDfile文件

bash 复制代码
FROM python:3.8-alpine
# 给镜像打上一些标签,信息
LABEL maintainer='xiaoyong'
LABEL description='Django project'
WORKDIR /app
# 拷贝代码到镜像中
# COPY使用相对路径
# 第一个路径是相对的是宿主机dockerfile所在的目录
# 第二个路径相对的是构建命令所在的目录
COPY . .
# 安装必要的库 shell命令
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && \
    apk update && \
    apk upgrade && \
    apk add --no-cache tzdata mariadb-dev gcc libc-dev && \
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip && \
    pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r reqiremensts.txt &&\
    chmod 777 ./entrypoint.sh
VOLUME /app/logs
# 暴露监听端口,注意它不会自动映射,只是标注
EXPOSE 8000
# CMD 容器启动的时候要执行的命令
# CMD supervisord -c supervisord.conf
# 执行入口脚本
# 把容器要执行的复杂命令写到一个shell脚本中
ENTRYPOINT ["./entrypoint.sh"]

构建镜像,在DockerDfile所在目录

(就是把3的步骤写在一个文件内进行一步一步执行)

bash 复制代码
docker build -t auto_app .

docker images 查看镜像auto_app

5、通过镜像启动容器

bash 复制代码
docker run --name app --network auto -p 9292:8000 -e TZ=Asia/Shanghai -e ENV="production" -d --restart=always -v auto_logs:/app/logs auto_app:latest
相关推荐
MX_93591 分钟前
SpringMVC静态资源访问、annotation-driven的使用原理及数据响应模式
java·后端·spring
MoRanzhi12033 分钟前
scikit-learn 决策树分类详解:从原理、可视化到剪枝实战掌握 DecisionTreeClassifier
python·决策树·机器学习·数学建模·分类·scikit-learn·剪枝
财经资讯数据_灵砚智能7 分钟前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年4月5日
大数据·人工智能·python·信息可视化·自然语言处理·ai编程
luom010212 分钟前
诊疗室技术文章大纲
python·beautifulsoup·tornado·dash
飞翔的SA17 分钟前
MLX‑VLM :Mac本地跑通多模态大模型的开源项目!让图片、音频、视频理解一键上手
人工智能·python·macos·音视频
无籽西瓜a17 分钟前
【西瓜带你学设计模式 | 第十二期 - 装饰器模式】装饰器模式 —— 动态叠加功能实现、优缺点与适用场景
java·后端·设计模式·软件工程·装饰器模式
南山乐只20 分钟前
Java并发工具:synchronized演进,从JDK 1.6 锁升级到 JDK 24 重构
java·开发语言·后端·职场和发展
无籽西瓜a21 分钟前
【西瓜带你学设计模式 | 第十三期 - 组合模式】组合模式 —— 树形结构统一处理实现、优缺点与适用场景
java·后端·设计模式·组合模式·软件工程
极梦网络无忧10 小时前
OpenClaw 基础使用说明(中文版)
python
codeJinger10 小时前
【Python】操作Excel文件
python·excel