Django項(xiàng)目部署 Docker(Django-crontab定時任務(wù))

目標(biāo):
1、 將Django項(xiàng)目部署到docker上募疮,相關(guān)數(shù)據(jù)掛載于宿主機(jī)上;
2裂七、使用django-crontab定時模塊域庇,確保定時模塊正常啟動;

我的django項(xiàng)目結(jié)構(gòu)(普普通通闻葵,沒有重點(diǎn))

mysite/
|-- mysite
|   |-- __init__.py
|   |-- settings.py
|   |-- urls.py
|   |-- views.py
|   `-- wsgi.py
`-- manage.py

1理朋、生成項(xiàng)目使用的第三方庫文件requirements.txt

在django項(xiàng)目的虛擬環(huán)境里拉岁,通過下面命令導(dǎo)出項(xiàng)目的第三方庫依賴包名稱
pip freeze > requirements.txt

此外,由于我的爬蟲項(xiàng)目需要走socks5代理(window電腦上的V2ray代理)驶乾,因此還需要在requirements.txt文件中加入庫名pysocks,最終requirements.txt文件內(nèi)容如下:

asgiref==3.3.1
certifi==2020.11.8
chardet==3.0.4
Django==3.1.3
django-crontab==0.7.1
et-xmlfile==1.0.1
idna==2.10
jdcal==1.4.1
lxml==4.6.2
PyMySQL==0.10.1
pytz==2020.4
requests==2.25.0
sqlparse==0.4.1
urllib3==1.26.2
pysocks

2循签、 準(zhǔn)備Dockerfile 鏡像構(gòu)建文件级乐,創(chuàng)建名字Dockerfile的文件,內(nèi)容如下(各命令作用已注釋)

# 環(huán)境python:3.8.6
FROM python:3.8.6

#MAINTAINER 維護(hù)者信息
MAINTAINER 孫思鍇

# 啟動python環(huán)境緩存县匠,可以將print等輸出到控制臺
ENV PYTHONUNBUFFERED 1

# 復(fù)制 第三方庫依賴名稱文件到環(huán)境
COPY requirements.txt /

# 設(shè)置時區(qū)风科;  # 修改apt源為阿里  # 更新apt源  # 安裝cron服務(wù)(用于定時任務(wù))
# 刪除軟件包(減少包鏡像體積)  # 清理apt緩存   # 安裝python第三方庫
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list \
    && apt-get update \
    && apt-get install -y --no-install-recommends cron \
#   && apt-get -y install vim \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get clean \
    && pip install -r /requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

# 暴露8000端口
EXPOSE 8000

# 先啟動cron服務(wù)(項(xiàng)目用到了django-crontab的定時任務(wù),其需要linux的cron服務(wù)來支持)聚唐;再將定時任務(wù)啟動(django-crontab語法要求)丐重,最后再啟動django工程。
CMD sh -c '/etc/init.d/cron start && python /mysite/manage.py crontab add && python /mysite/manage.py runserver 0.0.0.0:8000'

3杆查、 開始構(gòu)建鏡像

Dockerfile文件扮惦、requirements.txt 文件放在同一個目錄下,在該目錄下打開命令行窗口亲桦,執(zhí)行以下命令崖蜜,生成鏡像文件
docker build -t mysite:4.0 .
鏡像名稱mysite,版本4.0客峭,不要漏掉命令最后面一點(diǎn)

4豫领、創(chuàng)建容器

docker run -d --name mysite4 -p 8001:8000 --restart=on-failure:3 -v E:\DockerHouse\Django\mysite:/mysite -w /mysite mysite:4.0

上面命令解釋如下:

-d  后臺運(yùn)行容器,如果需要進(jìn)入容器舔琅,則使用-it命令
--name mysite4 容器命名mysite4
-p 8001:8000 將容器的8000端口映射到主機(jī)8001端口
--restart=on-failure:3 非正常關(guān)閉容器重啟次數(shù)為3等恐,防止宿主機(jī)意外關(guān)閉
-v E:\DockerHouse\Django\mysite:/mysite 文件掛載,/mysite位置是Django項(xiàng)目
-w /mysite 指定工作目錄备蚓,下次進(jìn)入容器才不用頻繁切換目錄

至此课蔬,容器創(chuàng)建完畢,容器啟動后先啟動cron服務(wù)郊尝,再將django項(xiàng)目的定時任務(wù)添加到cron二跋,最后才會啟動django項(xiàng)目。

5流昏、補(bǔ)充

1扎即、 步驟4創(chuàng)建容器后,由于我們設(shè)置的是容器在后臺靜默運(yùn)行况凉,如果需要進(jìn)入容器內(nèi)谚鄙,可使用命令: docker exec -it mysite4 bash

2、 mysite4容器啟動后刁绒,django-crontab的定時任務(wù)不會立即啟動襟锐,因?yàn)槠浔举|(zhì)是將任務(wù)交給了linux的cron服務(wù),所以至少要過 1膛锭、2 分鐘后任務(wù)才會被調(diào)用粮坞,如果需要立馬執(zhí)行任務(wù),可以重啟 cron服務(wù)初狰。

django-crontab模塊命令如下:
python manage.py crontab add  # 將任務(wù)添加并生效
python manage.py crontab show  # 顯示當(dāng)前的定時任務(wù) 
python manage.py crontab remove  # 刪除所有定時任務(wù)
補(bǔ)充:django-crontab定時模塊莫杈,需要使用 add 命令才能將任務(wù)添加到cron并生效。
      前面構(gòu)建Dockerfile文件時奢入,已設(shè)置了容器啟動執(zhí)行add命令筝闹,后面就不再執(zhí)行add命令。

linux上的cron服務(wù)命令:
查看狀態(tài): /etc/init.d/cron status
啟動: /etc/init.d/cron start
關(guān)閉: /etc/init.d/cron stop
重啟: /etc/init.d/cron restart
重新載入配置: /etc/init.d/cron reload
列出目前的任務(wù)表:  crontab -l
刪除目前的任務(wù)表:  crontab -r 

2腥光、可使用命令date查看容器使用的時區(qū)(確保定時任務(wù)不會跑偏)
3关顷、window 檢測被占用的端口
netsh interface ipv4 show excludedportrange protocol=tcp

4、查看容器的代理配置

set | grep -i all_proxy  # 查看代理配置
unset all_proxy  # 關(guān)閉代理配置
curl http://pv.sohu.com/cityjson?ie=utf-8   # 查看當(dāng)前ip的地理位置(搜狐接口)

5武福、遇到報錯(已解決)
requests.exceptions.InvalidSchema: Missing dependencies for SOCKS support.
requests不支持SOCKS代理 议双,安裝依賴庫即可 pip install pysocks

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市捉片,隨后出現(xiàn)的幾起案子平痰,更是在濱河造成了極大的恐慌,老刑警劉巖伍纫,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宗雇,死亡現(xiàn)場離奇詭異,居然都是意外死亡莹规,警方通過查閱死者的電腦和手機(jī)赔蒲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來良漱,“玉大人舞虱,你說我怎么就攤上這事≌龋” “怎么了砾嫉?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長窒篱。 經(jīng)常有香客問我焕刮,道長,這世上最難降的妖魔是什么墙杯? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任配并,我火速辦了婚禮,結(jié)果婚禮上高镐,老公的妹妹穿的比我還像新娘溉旋。我一直安慰自己,他們只是感情好嫉髓,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布观腊。 她就那樣靜靜地躺著邑闲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梧油。 梳的紋絲不亂的頭發(fā)上苫耸,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機(jī)與錄音儡陨,去河邊找鬼褪子。 笑死,一個胖子當(dāng)著我的面吹牛骗村,可吹牛的內(nèi)容都是我干的嫌褪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼胚股,長吁一口氣:“原來是場噩夢啊……” “哼笼痛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起信轿,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤晃痴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后财忽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倘核,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年即彪,在試婚紗的時候發(fā)現(xiàn)自己被綠了紧唱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡隶校,死狀恐怖漏益,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情深胳,我是刑警寧澤绰疤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站舞终,受9級特大地震影響轻庆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜敛劝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一余爆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧夸盟,春花似錦蛾方、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拓春。三九已至,卻和暖如春五芝,著一層夾襖步出監(jiān)牢的瞬間痘儡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工枢步, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人渐尿。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓醉途,卻偏偏與公主長得像,于是被迫代替她去往敵國和親砖茸。 傳聞我的和親對象是個殘疾皇子隘擎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容