一、概述
已经写好了一个Django项目,需要将这个项目用docker封装一个镜像,使用k8s发布!
在封装并运行的过程中,发现了很多问题,这里会一一介绍!
二、时区问题
采用的是镜像是 ubuntu:16.04 默认的时区是UTC,比中国时间,晚了8个小时!
那么因此,需要将默认的时区给覆盖掉!
默认是没有安装 tzdata,因此没有 /usr/share/zoneinfo 目录!
安装tzdata,使用命令
1 | apt-get install -y tzdata |
设置时区为 上海,使用以下命令
1 | TZ=Asia/Shanghai |
三、中文乱码问题
默认的系统编码是ascii,因此不支持中文!
需要安装 locales 软件包
1 | apt-get install -y locales |
设置utf-8编码
1 | locale-gen en_US.UTF-8 |
设置全局变量
1 | LANG en_US.UTF-8 |
设置utf-8编码之后,那么在python的print命令,就可以输出中文了,而不会提示
1 | 'ascii' codec can't encode characters in position 8-50: ordinal not in range(128) |
在python文件头部,记得增加一行代码,指定utf-8编码
1 | # coding: utf-8 |
四、任务计划问题
启动问题
在ubuntu:16.04 的镜像中,默认是没有cron包的,所以需要手动安装
1 | 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文件,才能成功!
如果需要在最后一行添加任务计划,可以使用以下命令:
语法:
1 | sed -i '$a需要添加的内容' 文件名 |
比如:
1 | sed -i '$a* * * * * root python3 /messagecenter/cron/voc_receipt.py' /etc/crontab |
五、封装Django项目镜像
新建空目录
1 | mkdir /opt/messagecenter |
目录结构如下:
1 | ./ |
dockerfile
1 | FROM ubuntu:16.04 |
messagecenter.tar 这个是Django项目,已经打成tar包了。在dockerfile中,执行ADD命令时,会自动解压tar包
run.sh
1 | #!/bin/bash |
在Django项目中,有一个python脚本,需要每分钟执行一次!
1 | deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted |
生成镜像
1 | docker build -t messagecenter /opt/messagecenter |
启动镜像
1 | docker run -d -it -p 8000:8000 messagecenter |
访问页面:
1 | http://192.168.0.162:8000 |
就可以访问Django的默认页面了!
本文为作者原创 转载时请注明出处 谢谢
乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站