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-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"]
View Code

 

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
View Code

在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
View Code

 

生成鏡像

docker build -t messagecenter /opt/messagecenter

 

啟動鏡像

docker run -d -it -p 8000:8000 messagecenter

 

訪問頁面:

http://192.168.0.162:8000

 

就可以訪問Django的默認頁面了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM