一、概述

已经写好了一个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项目的更多相关文章

  1. pycharm配置运行django项目步骤

    1:在django项目的跟目录下执行:这是直接在Linux系统中直接运行 python manage.py runserver 0:8000 然后在浏览器中输入IP端口即可访问 pycharm配置运行 ...

  2. Docker 部署Django项目

    使用docker部署django项目也很简单,挺不错,分享下 环境 默认你已安装好docker环境 django项目大概结构 (p3s) [root@opsweb]# tree opsweb opsw ...

  3. docker 部署django项目(nginx + uwsgi +mysql)

    最近在学习用docker部署Django项目,经过百折不挠的鼓捣,终于将项目部署成功,爬过好多坑,也发现很多技能需要提高.特此写下随笔与小伙伴们分享,希望能对大家有所启发. docker的理论我就不赘 ...

  4. django第8天(在测试文件中运行django项目|单表操作)

    django第8天 在测试文件中运行django项目 1.将项目配置文件数据库该为mysql,修改配置信息 PORT = '127.0.0.1' DATABASES = { 'default': { ...

  5. pytharm运行django项目

    pytharm运行django项目 安装Django  下载Django包,解压缩. CMD 进入解压路径下. 执行: python setup.py install 增加环境变量: C:\Pytho ...

  6. 使用docker运行springboot项目

    本文主要讲的是使用docker运行springboot项目 获取一个springboot项目 这里我没有重新构建,用的之前写的一个项目,直接从github上下载下来,地址:https://github ...

  7. 云服务器上利用Docker部署Django项目

    转载别人的,请看下面链接 云服务器上利用Docker部署Django项目

  8. 03 Linux下运行Django项目

    1.安装windows和linux传输文件的工具 pip install lrzsz 提供两个命令 一个是上传一个是下载 rz 接收 直接rz sz 上传 直接sz 或者直接拖拽 2.在线下载资源的命 ...

  9. Docker部署Django项目+Nginx+Fluend日志收集 和redis、memcached、RabbitMQ、Celery

    前言 一.docker 1.docker是什么? Docker的英文本意是“搬运工”,Docker搬运的是集装箱(Container)可以成为容器,我可以把写的Django的WEB应用以及Python ...

随机推荐

  1. 3、Python-字符串

    下标 name = 'abcdef' print(name[0]) print(name[1]) print(name[2]) # a # b # c 切片 # 切片的语法:[起始:结束:步长] na ...

  2. 超哥带你学GIT

    git入门 git安装 git基础 git分支 github与gitlab与git三个基佬的故事 gitlab与pycharm结合 github使用 git超清技能图 学习git站点: git官网 廖 ...

  3. Java编程思想 学习笔记1

    一.对象导论 1.抽象过程 Alan Kay曾经总结了第一个成功的面向对象语言.同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了纯粹的面向对象程序设计方式 1)万物皆 ...

  4. oozie JAVA Client 编程提交作业

    1,eclipse环境搭建 在eclipse中新建一个JAVA工程,导入必要的依赖包,目前用到的有: 其次编写JAVA 程序提交Oozie作业,这里可参考:oozie官方参考文档 在运行提交程序前,首 ...

  5. This dependency was not found: * !!vue-style-loader!css-loader?

    npm install stylus-loader css-loader style-loader --save-dev 猜测这两个组件发布时是不需要的,所以要加上-dev

  6. MHA-Failover(GTID,Auto_Position=0)

    最近一位同学遇到的案例:凌晨数据库意外宕机,要求在一主两从的基础上,搭建MHA做故障切换.在部署测试中遇到一些问题找到我,交流的过程挖出一些之前忽略的坑,感谢这位同学无私分享!• GTID环境,KIL ...

  7. oracle_数据库对象

  8. java 多线程四

    java 多线程一 java 多线程二 java 多线程三 java 多线程四 一个生产者,消费者的例子: import java.util.Stack; /** * Created by root ...

  9. Cpp读文件、CString转String、String转CString

    场景 C++读取文件 技术点 读取文件 fstream提供了三个类,用来实现c++对文件的操作.(文件的创建.读.写). ifstream -- 从已有的文件读入 ofstream -- 向文件写内容 ...

  10. Linux 查看CPU信息,机器型号,内存等信息