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

news2025/1/11 10:56:45

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

docker network create auto

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

docker run --name redis --restart=always -d --network auto -v redis:/data redis:alpine

3、部署数据库

注意数据库账号密码

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

查看网络的服务

docker inspect auto

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

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

3.2安装
进入app目录下

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

在这里插入图片描述
提示更新

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,放在根目录下

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

supervisord -c supervisord.conf

在这里插入图片描述
再次重新执行,
在这里插入图片描述
也可以进行ps 查看进程

4、编写DockerDfile文件

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的步骤写在一个文件内进行一步一步执行)

docker build -t auto_app .

docker images 查看镜像auto_app

5、通过镜像启动容器

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2065072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3+ts+vant4 列表下拉刷新+分页加载

效果图 主要代码&#xff1a; <van-pull-refreshv-model"refreshing"refresh"handleRefresh"pulling-text"下拉释放刷新"loosing-text"下拉释放刷新"loading-text"加载中"><van-listv-model:loading"loading…

DDD精粹速读(一)

1 你需要知道的 - 战略设计 DDD是一种软件设计和构建方法&#xff0c;其重点在于独立于数据持久化等技术问题&#xff0c;准确表达业务规则。 不幸&#xff0c;DDD 对新手来说极具挑战性&#xff0c;部分原因是它有许多独特的概念需要学习。本文我简要介绍这些重要的思想&…

数学建模比赛(国赛)水奖攻略

之前很多同学私聊问我&#xff0c;学校要求参加数模比赛&#xff0c;但是不擅长建模编程&#xff0c;但又不想浪费这个时间该怎么办呢&#xff0c;今天就来给大家讲一下大家都非常感兴趣的内容——数学建模水奖攻略。分享一下博主直接参加比赛时候的经验。 一、选题技巧 有一句…

【QT】学习笔记:关于“初始化列表中的成员变量”

一、问题1 以下代码是什么意思&#xff1f; MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) , ui(new Ui::MainWindow) {ui->setupUi(this); }MainWindow::~MainWindow() {delete ui; } 好的&#xff0c;我来为你解释这段 Qt 代码&#xff1a; 整体概述…

Linux(面试篇)

目录 什么是Linux 什么是Linux内核&#xff1f; Linux的基本组件是什么&#xff1f; Bash和Dos之间基本区别是什么&#xff1f; 什么是Root账户 什么是Bash? 什么时CLI? Linux的目录结构时怎样的&#xff1f; 什么是硬链接和软链接&#xff1f; 什么叫CC攻击&#…

景联文科技:专业人像采集服务,助力人像采集在多领域应用

随着社会的数字化和智能化进程不断推进&#xff0c;人像采集在多个领域中扮演着至关重要的角色&#xff0c;不仅可以提升安全性&#xff0c;还为人们的日常生活带来了更多的便捷。 应用场景&#xff1a; 1. 身份验证与生物识别&#xff1a; 机场、火车站等交通枢纽的身份核验…

docker具体操作

安装docker : 前提 centos 7 64位 centos内核版本3.10以上 1 uname -r 查看内核 2 yum install -y yum-utils device-mapper-persistent-data lvm2 下载依赖包 3 um-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.re…

AI模拟器

一、介绍 基于鸿蒙Next模拟一个ai对话过程二、场景需求 客户服务、数据分析、个性化推荐、图像和视频处理、智能家居、交通管理、教育行业、制造等等。 三、业务步骤 第一步&#xff1a;输入框提出问题&#xff0c;发送问题&#xff0c; 第二部&#xff1a;下次发送&#xff0…

实现BeanPostProcessor

文章目录 1.实现初始化方法1.目录2.InitializingBean.java3.MonsterService.java 实现初始化接口4.SunSpringApplicationContext.java 调用初始化方法5.测试 2.实现后置处理器1.目录2.BeanPostProcessor.java 后置处理器接口3.SunBeanProcessor.java 自定义后置处理器4.SunSpri…

萌啦数据怎么选品,萌啦数据ozon选品怎么选

在当今电商领域&#xff0c;数据已成为商家决策的重要基石。尤其是在跨境电商的广阔舞台上&#xff0c;如何借助数据分析工具精准选品&#xff0c;直接关系到商家在激烈竞争中的生存与发展。萌啦数据&#xff0c;作为业界知名的电商数据分析平台&#xff0c;凭借其强大的数据整…

DHCP协议-CSP认证

文章目录 DHCP协议 DHCP协议 stringstream的用法 应用实践 #include<bits/stdc.h>using namespace std;signed main() {string s"wo shi wwl, also wlw";stringstream ss;ss<<s;while(ss>>s){if(s[s.size()-1],) s[s.size()-1] ;cout<<s<…

128-域横向移动IPCATSC命令Impacket套件CS插件全自动

因为只有一台云服务器而且开不起台多的虚拟机只能只用几台进行演示&#x1f62d;&#x1f62d;&#x1f62d; 小迪的环境 上线之后先做的事情&#xff1a; IPC方式进行横向移动 at schtasks 他这里第三条命令有问题换成这个可以执行 schtasks /create /s 172.16.3.128 /U a…

证书学习(二)搞懂 keystore、jks、p12、pfx、crt、csr、pem文件的区别

目录 一、背景二、文件格式的区分2.1 .keystore / .jks 文件2.2 .p12 / .pfx 文件2.3 .crt 文件2.4 csr 文件2.5 .pem 文件 三、总结 一、背景 我们在日常的开发过程中&#xff0c;经常会见到各种各样的证书相关类型的文件&#xff0c;错综复杂。 其实 keystore、jks、p12、p…

濮阳示范区党工委书记杨行玉一行莅临超维机器人参观考察

8月20日&#xff0c;濮阳示范区党工委书记杨行玉带队赴郑州开展招商活动&#xff0c;并莅临超维机器人参观考察。此次考察旨在加快濮阳示范区产业升级步伐&#xff0c;推动高科技项目引进和落地&#xff0c;为区域经济高质量发展注入新动能。区三级调研员张立春、区招商局负责人…

外挂系统 -减少SAP用户许可数, 多点操作及时同步SAP

用过SAP 的人都知道SAP 是按照用户数来计算项目费用和年维护费的,所以很多公司设置了共同账号,外挂程序,WDA程序等,各种各样的规避方式。 当然SAP 标准的功能也相对简单化,要实现一些自定义的功能来满足各企业实际业务,那需要进行二次开发,有些顾问公司则通过在SAP 中开…

云计算实训33——高并发负载均衡项目(eleme)

一、配置一主两从mysql服务器&#xff08;mysql5.7&#xff09; 1.主服务器master 下载mysql5.7的包 [rootMysql ~]# rz -E rz waiting to receive. [rootMysql ~]# ls anaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz #解压 [rootMysql ~]# tar -zxf mysql-5…

用TensorFlow实现线性回归

说明 本文采用TensorFlow框架进行讲解&#xff0c;虽然之前的文章都采用mxnet&#xff0c;但是我发现tensorflow提供了免费的gpu可供使用&#xff0c;所以果断开始改为tensorflow&#xff0c;若要实现文章代码&#xff0c;可以使用colaboratory进行运行&#xff0c;当然&#…

ZooKeeper入门及核心知识点整理

什么是Zookeeper Zookeeper简称zk&#xff0c;先从字面意思上去理解&#xff0c;那就是动物园管理员。其实zk是大数据领域中的一员&#xff0c;为整个分布式环境提供了协调服务&#xff0c;主要可以用于存储一些配置信息&#xff0c;同时也可以基于zk实现集群。它是一个apache…

RabbitMQ的基础概念介绍

MQ的三大特点&#xff1a;削峰、异步、解耦 1.RabblitMQ概念介绍 1.1概念 RabbitMQ是由erlang语言开发&#xff0c;基于AMQP&#xff08;Advanced Message Queue 高级消息队列协议&#xff09;协议实现的消息队列&#xff0c;它是一种应用程序之间的通信方法&#xff0c;消息…

【docker】使用docker-compose的时候如何更新镜像版本

使用docker-compose的时候如何更新镜像版本。之前总是会忘记怎么操作&#xff0c;每次都得百度搜&#xff0c;干脆记录一下。 说明 我有一个memos是用docker-compose部署的&#xff0c;memos更新的挺频繁的&#xff0c;新版本的功能也不错&#xff0c;更新一下没啥问题。 注…