前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker 运行Django项目

docker 运行Django项目

作者头像
py3study
发布2020-02-24 15:21:51
1.2K0
发布2020-02-24 15:21:51
举报
文章被收录于专栏:python3python3

一、概述

已经写好了一个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-8

设置全局变量

LANG en_US.UTF-8
LANGUAGE en_US:en
LC_ALL en_US.UTF-8

设置utf-8编码之后,那么在python的print命令,就可以输出中文了,而不会提示

'ascii' codec can't encode characters in position 8-50: ordinal not in range(128)

在python文件头部,记得增加一行代码,指定utf-8编码

# coding: utf-8

四、任务计划问题

启动问题

在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-8 && \
    pip3 install django requests

# 解决中文乱码问题
#RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

EXPOSE 8000
# 添加启动脚本
ADD run.sh .
RUN chmod 755 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:8000

在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 8000:8000 messagecenter

访问页面:

http://192.168.0.162:8000

就可以访问Django的默认页面了!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 二、时区问题
  • 三、中文乱码问题
  • 四、任务计划问题
    • 启动问题
      • 添加问题
      • 五、封装Django项目镜像
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档