docker 运行Django项目
一、概述
已经写好了一个Django项目,需要将这个项目用docker封装一个镜像,使用k8s发布!
在封装并运行的过程中,发现了很多问题,这里会一一介绍!
二、时区问题
采用的是镜像是 ubuntu:16.04 默认的时区是UTC,比中国时间,晚了8个小时!
那么因此,需要将默认的时区给覆盖掉!
默认是没有安装 tzdata,因此没有 /usr/share/zoneinfo 目录!
安装tzdata,使用命令
apt-get install -y tzdata
设置时区为 上海,使用以下命令
TZ=Asia/Shanghai
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
三、中文乱码问题
默认的系统编码是ascii,因此不支持中文!
需要安装 locales 软件包
apt-get install -y locales
设置utf-8编码
locale-gen en_US.UTF-
设置全局变量
LANG en_US.UTF-
LANGUAGE en_US:en
LC_ALL en_US.UTF-
设置utf-8编码之后,那么在python的print命令,就可以输出中文了,而不会提示
'ascii' codec can't encode characters in position 8-50: ordinal not in range(128)
在python文件头部,记得增加一行代码,指定utf-8编码
# coding: utf-
四、任务计划问题
启动问题
在ubuntu:16.04 的镜像中,默认是没有cron包的,所以需要手动安装
apt-get install -y cron
那么启动任务计划时,不能使用命令 /etc/init.d/cron start 以及 service cron start
在dockerfile中,会启动不成功的。
必须使用 /usr/sbin/cron 命令,才能启动成功!
添加问题
一般来讲,添加任务计划,直接修改 /etc/crontab 文件即可。
在dockerfile 中,不能使用echo EOF 等命令修改/etc/crontab文件
必须使用 sed 命令修改/etc/crontab文件,才能成功!
如果需要在最后一行添加任务计划,可以使用以下命令:
语法:
sed -i '$a需要添加的内容' 文件名
比如:
sed -i '$a* * * * * root python3 /messagecenter/cron/voc_receipt.py' /etc/crontab
五、封装Django项目镜像
新建空目录
mkdir /opt/messagecenter
目录结构如下:
./
├── dockerfile
├── messagecenter.tar
├── run.sh
└── sources.list
dockerfile
FROM ubuntu:16.04
# 修改更新源为阿里云
ADD sources.list /etc/apt/sources.list
ADD messagecenter.tar /
# 时区为上海
ENV TZ Asia/Shanghai # 设置时区,设置utf-8编码,安装django,添加任务计划
RUN apt-get update && apt-get install -y tzdata locales python3-pip cron && apt-get clean all && \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
locale-gen en_US.UTF- && \
pip3 install django requests # 解决中文乱码问题
#RUN locale-gen en_US.UTF-
ENV LANG en_US.UTF-
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF- EXPOSE
# 添加启动脚本
ADD run.sh .
RUN chmod run.sh
ENTRYPOINT [ "/run.sh"]
messagecenter.tar 这个是Django项目,已经打成tar包了。在dockerfile中,执行ADD命令时,会自动解压tar包
run.sh
#!/bin/bash # 启动任务计划
/usr/sbin/cron # 最后一行增加任务计划
sed -i '$a* * * * * root python3 /messagecenter/cron/voc_receipt.py' /etc/crontab # 启动django项目
cd /messagecenter/
python3 manage.py runserver 0.0.0.0:
在Django项目中,有一个python脚本,需要每分钟执行一次!
sources.list
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu xenial-security main restricted
deb http://mirrors.aliyun.com/ubuntu xenial-security universe
deb http://mirrors.aliyun.com/ubuntu xenial-security multiverse
生成镜像
docker build -t messagecenter /opt/messagecenter
启动镜像
docker run -d -it -p : messagecenter
访问页面:
http://192.168.0.162:8000
就可以访问Django的默认页面了!
docker 运行Django项目的更多相关文章
- pycharm配置运行django项目步骤
1:在django项目的跟目录下执行:这是直接在Linux系统中直接运行 python manage.py runserver 0:8000 然后在浏览器中输入IP端口即可访问 pycharm配置运行 ...
- Docker 部署Django项目
使用docker部署django项目也很简单,挺不错,分享下 环境 默认你已安装好docker环境 django项目大概结构 (p3s) [root@opsweb]# tree opsweb opsw ...
- docker 部署django项目(nginx + uwsgi +mysql)
最近在学习用docker部署Django项目,经过百折不挠的鼓捣,终于将项目部署成功,爬过好多坑,也发现很多技能需要提高.特此写下随笔与小伙伴们分享,希望能对大家有所启发. docker的理论我就不赘 ...
- django第8天(在测试文件中运行django项目|单表操作)
django第8天 在测试文件中运行django项目 1.将项目配置文件数据库该为mysql,修改配置信息 PORT = '127.0.0.1' DATABASES = { 'default': { ...
- pytharm运行django项目
pytharm运行django项目 安装Django 下载Django包,解压缩. CMD 进入解压路径下. 执行: python setup.py install 增加环境变量: C:\Pytho ...
- 使用docker运行springboot项目
本文主要讲的是使用docker运行springboot项目 获取一个springboot项目 这里我没有重新构建,用的之前写的一个项目,直接从github上下载下来,地址:https://github ...
- 云服务器上利用Docker部署Django项目
转载别人的,请看下面链接 云服务器上利用Docker部署Django项目
- 03 Linux下运行Django项目
1.安装windows和linux传输文件的工具 pip install lrzsz 提供两个命令 一个是上传一个是下载 rz 接收 直接rz sz 上传 直接sz 或者直接拖拽 2.在线下载资源的命 ...
- Docker部署Django项目+Nginx+Fluend日志收集 和redis、memcached、RabbitMQ、Celery
前言 一.docker 1.docker是什么? Docker的英文本意是“搬运工”,Docker搬运的是集装箱(Container)可以成为容器,我可以把写的Django的WEB应用以及Python ...
随机推荐
- elasticsearch-head安装及启动
head是用于监控Elasticsearch状态的客户端插件,包括数据可视化,增删改查工具,es语句的可视化等等. 5.0之后的安装方式如下: git clone git://github.com/m ...
- PHP composer-setup安装遇到的openssl extension is missing
问题描述: 安装完成php-7.1.17后,安装composer出现以下错误 [root@localhost src]# curl -sS https://getcomposer.org/instal ...
- 解决编译安装php时报错:Please reinstall the iconv library
编译安装php7时报错“Please reinstall the iconv library”,也就是让重新安装iconv库.但yum安装又提示“No package libiconv availab ...
- 详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()【转】【补】
一,$.get(url,[data],[callback]) 说明:url为请求地址,data为请求数据的列表(是可选的,也可以将要传的参数写在url里面),callback为请求成功后的回调函数,该 ...
- nginx配置url中带问号的rewrite跳转
今天收到一个需求,要将一个带查询参数的url跳转到另外一个静态url,安装常规的rewrite规则,如: rewrite ^/a.html?id=67$ http://zt.epython.cn/20 ...
- JMS学习(八)-ActiveMQ Consumer 使用 push 还是 pull 获取消息
ActiveMQ是一个消息中间件,对于消费者而言有两种方式从消息中间件获取消息: ①Push方式:由消息中间件主动地将消息推送给消费者:②Pull方式:由消费者主动向消息中间件拉取消息.看一段官网对P ...
- Photoshop的辅助线
其它功能: 1.在拖动参考线时,按下Alt键能在垂直和水平参考线之间进行切换.按下Alt键,点击当前垂直的水平线就能够将其改变为一条水平的参考线,反之亦然. 2.按下Shift键拖动参考线能够强制它们 ...
- 三、内存管理单元---MMU
3.1 MMU介绍 3.1.1 MMU 特性 内存管理单元(Memory Management Unit)简称MMU,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查.现在的多用户多进 ...
- GET和POST有什么区别?及为什么网上多数答案都是错的(转载)
这仅仅是我认为比较好的关于get和post区别的解答,然后把作者的一些文字踢除留下比较干的部分. 作者:南柯之石链接:http://www.cnblogs.com/nankezhishi/archiv ...
- JavaScript学习 - 基础(二) - 基础类型/类型转换
基础类型 - 数字类型(Number) 1.最基本的数据类型 2.不区分整型数值和浮点型数值 3.所有数字采用64位浮点格式存储,相当于Java和C语言中double格式 4.能表示的最大值 +- 1 ...