docker版Django

原文地址:http://kekefund.com/2017/03/30/docker-django/ (本人博客)

Django的運(yùn)行是基于python的環(huán)境,加上django包。在docker中運(yùn)行django,實(shí)現(xiàn)方式是從docker下載python鏡像,然后安裝django運(yùn)行所依賴的包呛伴。

https://store.docker.com/images/python?tab=description 中介紹pull鏡像方式有一種叫python:onbuild。
這種鏡像創(chuàng)建方式根據(jù)項(xiàng)目中提供的requirements.txt文件自動(dòng)pip安裝依賴包。大多數(shù)情況潮改,通過(guò)python:onbuild能創(chuàng)建一個(gè)滿足工程所需的獨(dú)立鏡像。

一腹暖、編寫(xiě)requirements.txt

下述的目錄結(jié)構(gòu)是一個(gè)Django Rest Framework例子汇在,其中項(xiàng)目名稱為restful,app名稱為api脏答。

首先我們需要把項(xiàng)目所依賴的包放到requirements.txt中:

Django==1.8
django-bootstrap-toolkit==2.15.0
django-filter==1.0.1
djangorestframework==3.5.4
djangorestframework-jwt==1.10.0
pandas==0.19.2
SQLAlchemy==1.1.4
MySQL-python==1.2.5

二糕殉、編寫(xiě)Dockerfile

本文是基于python2.7制作的,Dockerfile文件如下:

FROM python:2-onbuild
CMD [ "python", "./manage.py", "runserver", "0.0.0.0:8000"]

CMD命令執(zhí)行Django啟動(dòng)程序殖告,0.0.0.0是對(duì)所有IP開(kāi)放阿蝶,監(jiān)聽(tīng)端口8000。
需要說(shuō)明的是CMD中的每個(gè)參數(shù)得單獨(dú)分開(kāi)黄绩,像這樣"runserver 0.0.0.0:8000"是運(yùn)行不成功的赡磅。

2.1 pip 國(guó)內(nèi)鏡像

先創(chuàng)建pip.conf文件,使用阿里云作為鏡像:

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host=mirrors.aliyun.com

在創(chuàng)建Dockerfile:

FROM python:3.5

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY pip.conf /root/.pip/pip.conf
COPY requirements.txt /usr/src/app/
RUN pip install -r /usr/src/app/requirements.txt

RUN rm -rf /usr/src/app
COPY . /usr/src/app

CMD [ "python", "./manage.py", "runserver", "0.0.0.0:8091"]

三宝与、構(gòu)建鏡像

  • $ docker build -t my-python-app .
[cbb@number_api]$ docker build -t number_api_django:0.3 .
Sending build context to Docker daemon 655.9 kB
Step 1/2 : FROM python:2-onbuild
# Executing 3 build triggers...
Step 1/1 : COPY requirements.txt /usr/src/app/
Step 1/1 : RUN pip install --no-cache-dir -r requirements.txt
 ---> Running in 4711187b3011
Collecting Django==1.8 (from -r requirements.txt (line 2))
  Downloading Django-1.8-py2.py3-none-any.whl (6.2MB)
Collecting django-bootstrap-toolkit==2.15.0 (from -r requirements.txt (line 3))
  Downloading django-bootstrap-toolkit-2.15.0.tar.gz
Collecting django-filter==1.0.1 (from -r requirements.txt (line 4))
  Downloading django_filter-1.0.1-py2.py3-none-any.whl (54kB)
Collecting djangorestframework==3.5.4 (from -r requirements.txt (line 5))
  Downloading djangorestframework-3.5.4-py2.py3-none-any.whl (709kB)
Collecting djangorestframework-jwt==1.10.0 (from -r requirements.txt (line 6))
  Downloading djangorestframework_jwt-1.10.0-py2.py3-none-any.whl
Collecting pandas==0.19.2 (from -r requirements.txt (line 7))
  Downloading pandas-0.19.2-cp27-cp27mu-manylinux1_x86_64.whl (17.2MB)
Collecting SQLAlchemy==1.1.4 (from -r requirements.txt (line 8))
  Downloading SQLAlchemy-1.1.4.tar.gz (5.1MB)
Collecting MySQL-python==1.2.5 (from -r requirements.txt (line 9))
  Downloading MySQL-python-1.2.5.zip (108kB)
Collecting PyJWT<2.0.0,>=1.4.0 (from djangorestframework-jwt==1.10.0->-r requirements.txt (line 6))
  Downloading PyJWT-1.4.2-py2.py3-none-any.whl
Collecting pytz>=2011k (from pandas==0.19.2->-r requirements.txt (line 7))
  Downloading pytz-2016.10-py2.py3-none-any.whl (483kB)
Collecting numpy>=1.7.0 (from pandas==0.19.2->-r requirements.txt (line 7))
  Downloading numpy-1.12.1-cp27-cp27mu-manylinux1_x86_64.whl (16.5MB)
Collecting python-dateutil (from pandas==0.19.2->-r requirements.txt (line 7))
  Downloading python_dateutil-2.6.0-py2.py3-none-any.whl (194kB)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python2.7/site-packages (from python-dateutil->pandas==0.19.2->-r requirements.txt (line 7))
Installing collected packages: Django, django-bootstrap-toolkit, django-filter, djangorestframework, PyJWT, djangorestframework-jwt, pytz, numpy, python-dateutil, pandas, SQLAlchemy, MySQL-python
  Running setup.py install for django-bootstrap-toolkit: started
    Running setup.py install for django-bootstrap-toolkit: finished with status 'done'
  Running setup.py install for SQLAlchemy: started
    Running setup.py install for SQLAlchemy: finished with status 'done'
  Running setup.py install for MySQL-python: started
    Running setup.py install for MySQL-python: finished with status 'done'
Successfully installed Django-1.8 MySQL-python-1.2.5 PyJWT-1.4.2 SQLAlchemy-1.1.4 django-bootstrap-toolkit-2.15.0 django-filter-1.0.1 djangorestframework-3.5.4 djangorestframework-jwt-1.10.0 numpy-1.12.1 pandas-0.19.2 python-dateutil-2.6.0 pytz-2016.10
Step 1/1 : COPY . /usr/src/app
 ---> 712a54b6b923
Removing intermediate container df33c056f7c0
Removing intermediate container 4711187b3011
Removing intermediate container 6220af43bf96
Step 2/2 : CMD python ./manage.py runserver 0.0.0.0:8000
 ---> Running in 53c0cf32d840
 ---> 17c97bc704d9
Removing intermediate container 53c0cf32d840
Successfully built 17c97bc704d9

[cbb@number_api]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
number_api_django   0.3                 17c97bc704d9        23 seconds ago      868 MB

這樣就成功創(chuàng)建了鏡像number_api_django:0.3

四焚廊、運(yùn)行容器

  • docker run
[cbb@number_api]$ docker run -it --rm -p 8080:8000 --name api1 number_api_django:0.3
Performing system checks...

System check identified no issues (0 silenced).
March 30, 2017 - 07:34:03
Django version 1.8, using settings 'restful.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

這樣就啟動(dòng)了django程序。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末习劫,一起剝皮案震驚了整個(gè)濱河市咆瘟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诽里,老刑警劉巖袒餐,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡灸眼,警方通過(guò)查閱死者的電腦和手機(jī)卧檐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)焰宣,“玉大人霉囚,你說(shuō)我怎么就攤上這事∝盎” “怎么了盈罐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)闪唆。 經(jīng)常有香客問(wèn)我盅粪,道長(zhǎng),這世上最難降的妖魔是什么悄蕾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任票顾,我火速辦了婚禮,結(jié)果婚禮上帆调,老公的妹妹穿的比我還像新娘奠骄。我一直安慰自己,他們只是感情好贷帮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布戚揭。 她就那樣靜靜地躺著诱告,像睡著了一般撵枢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上精居,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天锄禽,我揣著相機(jī)與錄音,去河邊找鬼靴姿。 笑死沃但,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的佛吓。 我是一名探鬼主播宵晚,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼维雇!你這毒婦竟也來(lái)了淤刃?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤吱型,失蹤者是張志新(化名)和其女友劉穎逸贾,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铝侵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年灼伤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咪鲜。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狐赡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嗜诀,到底是詐尸還是另有隱情猾警,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布隆敢,位于F島的核電站发皿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拂蝎。R本人自食惡果不足惜穴墅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望温自。 院中可真熱鬧玄货,春花似錦、人聲如沸悼泌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)馆里。三九已至隘世,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鸠踪,已是汗流浹背丙者。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留营密,地道東北人械媒。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像评汰,于是被迫代替她去往敵國(guó)和親纷捞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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

  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,482評(píng)論 6 427
  • Docker — 云時(shí)代的程序分發(fā)方式 要說(shuō)最近一年云計(jì)算業(yè)界有什么大事件被去?Google Compute Engi...
    ahohoho閱讀 15,532評(píng)論 15 147
  • docker基本概念 1. Image Definition 鏡像 Image 就是一堆只讀層 read-only...
    慢清塵閱讀 8,748評(píng)論 1 21
  • 今天要開(kāi)始日常吐槽咯主儡! 首先,就是今天早上看書(shū)看到一半编振,然后突然想起來(lái)要更新一下我的小青春缀辩,然后臭埋。就覺(jué)得寫(xiě)了那么多...
    黑煤餡的小姐姐閱讀 160評(píng)論 0 0
  • 送你,美麗的衣裳臀玄;看你瓢阴,對(duì)鏡貼花黃。
    黃貍閱讀 162評(píng)論 0 0