基于Docker搭建Django開(kāi)發(fā)環(huán)境

本文主要是作為官方Quickstart: Compose and Django的導(dǎo)讀逻谦,如果你當(dāng)下還沒(méi)了解過(guò)Docker颖变,但想知道如何利用Docker來(lái)管理自己本地的開(kāi)發(fā)環(huán)境生均,并統(tǒng)一開(kāi)發(fā)和測(cè)試的環(huán)境,那你可以參考以下內(nèi)容。

需求:

使用Docker搭建Django開(kāi)發(fā)環(huán)境腥刹,即本地只需要有python代碼即可马胧。

預(yù)備知識(shí):

Docker作為容器,和傳統(tǒng)虛擬機(jī)是不一樣的衔峰,如下圖所示佩脊,它是基于Docker Engine的一個(gè)容器蛙粘,且在這一層次上是相互隔離的,而傳統(tǒng)虛擬化則是要虛擬化整個(gè)系統(tǒng)威彰,因此理論上Docker容器可以更有效的利用資源出牧,你可以很容易在本地環(huán)境搭建多服務(wù)的復(fù)雜系統(tǒng)環(huán)境。本篇以一臺(tái)web服務(wù)器及一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器為例歇盼,當(dāng)然也可以搭建更復(fù)雜的舔痕,比如加入一臺(tái)redis機(jī)器等等。

Docker結(jié)構(gòu)
Docker結(jié)構(gòu)

更多Docker介紹可以看開(kāi)源版本的《Docker 從入門到實(shí)踐》豹缀, 內(nèi)容可能已經(jīng)有點(diǎn)老伯复,但是基本上還是作為參考。
更多邢笙,等新啸如,等詳細(xì)的解釋看官方介紹What is a Cantainer

容器是基于一個(gè)鏡像(image)建立的,比如本地有一個(gè)ubuntu的鏡像氮惯,我們可以基于該鏡像去新建多個(gè)容器實(shí)例叮雳,而它們之間可以做到互聯(lián),與本地機(jī)器的文件共享等妇汗。從而可以達(dá)到前文提到的帘不,快速在本地搭建一個(gè)多服務(wù)器的復(fù)雜環(huán)境。
用戶可以很方便地對(duì)容器進(jìn)行啟動(dòng)铛纬、停止厌均、刪除等操作。一個(gè)基本的容器啟動(dòng)例子如下告唆,它在啟動(dòng)一個(gè)容器后棺弊,打印一條Hello world

sudo docker run ubuntu:14.04 /bin/echo 'Hello world'

鏡像被倉(cāng)庫(kù)統(tǒng)一管理,Docker官方有自己的倉(cāng)庫(kù)Docker Hub擒悬,國(guó)內(nèi)可以使用阿里云的鏡像倉(cāng)庫(kù)模她,我用的是阿里的,需要在阿里后臺(tái)生成自己的私有地址懂牧,然后在Docker中配置侈净。從鏡像倉(cāng)庫(kù)獲取鏡像到本地后,就可以基于鏡像新建容器使用了僧凤。
當(dāng)然也可以搭建自己的私有倉(cāng)庫(kù)畜侦,在團(tuán)隊(duì)或公司內(nèi)部使用。

鏡像定制躯保,當(dāng)倉(cāng)庫(kù)中的官方鏡像無(wú)法滿足需求時(shí)旋膳,就需要自定義鏡像,所有的自定義鏡像都可以上傳到倉(cāng)庫(kù)中途事,共享給其他用戶验懊。Docker鏡像的定制主要通過(guò)Dockerfile指令文件實(shí)現(xiàn)擅羞,在指令文件中實(shí)現(xiàn)自己的需求即可孕锄,比如使用COPY命令將本機(jī)文件復(fù)制到容器中等痢畜。

Docker Compose止潮,安裝最新的Docker讯屈,默認(rèn)已經(jīng)包含這個(gè)工具,主要用于定義及啟動(dòng)多容器的場(chǎng)景(當(dāng)前例子基于此工具)痛黎,它需要一個(gè)docker-compose.yml文件來(lái)配置需要啟動(dòng)的容器及相關(guān)配置狸相,然后就可以用下述語(yǔ)句新建及啟動(dòng)配置文件中的多容器

docker-compose up

docker-compose.yml實(shí)例:

version: '2'
 services:
   db:  //數(shù)據(jù)庫(kù)容器
     image: postgres
   web:  //web服務(wù)器容器
     build: .
     command: python manage.py runserver 0.0.0.0:8000
     volumes:   //掛載本地機(jī)器文件夾
       - .:/code
     ports:
       - "8000:8000"
     depends_on:
       - db

搭建Django開(kāi)發(fā)環(huán)境:

Step 1: Define the project components

這個(gè)步驟主要是定義project的內(nèi)容拟赊,這里的“project”指我們要搭建的基于Docker的Django開(kāi)發(fā)環(huán)境痛垛,具體會(huì)包含Docker容器配置文件Dockerfile草慧,Django環(huán)境需要的requirements.txt配置,docker-compose.yml配置

Dockerfile 實(shí)例:

 FROM python:2.7   注:基礎(chǔ)鏡像
 ENV PYTHONUNBUFFERED 1
 RUN mkdir /code
 WORKDIR /code     注:切換工作上下文
 ADD requirements.txt /code/    
 RUN pip install -r requirements.txt 注:安裝python依賴
 ADD . /code/

Step 2:Create a Django project

官方例子是用docker-compose命令運(yùn)行web服務(wù)器(docker-compose.yml配置了web和db兩個(gè)容器)匙头,然后調(diào)用django-admn新建Django項(xiàng)目,由于掛在了本地目錄到容器內(nèi)部仔雷,因此當(dāng)前命令生成的django項(xiàng)目文件能在本地機(jī)器目錄直接訪問(wèn)蹂析。

 docker-compose run web django-admin.py startproject composeexample .

注意,此時(shí)的web容器已經(jīng)包含django環(huán)境了碟婆,因?yàn)樵趙eb容器的Dockerfile文件配置了python環(huán)境搭建的命令电抚,如下所示:

RUN pip install -r requirements.txt

對(duì)于實(shí)際工作項(xiàng)目,我們只需在對(duì)應(yīng)的本地機(jī)器目錄(即運(yùn)行docker-compose命令的上下文目錄)準(zhǔn)備好項(xiàng)目代碼即可

 $ ls -l
 drwxr-xr-x 2 root   root   composeexample   注:該項(xiàng)目文件可以是實(shí)際工作代碼文件夾
 -rw-rw-r-- 1 user   user   docker-compose.yml
 -rw-rw-r-- 1 user   user   Dockerfile
 -rwxr-xr-x 1 root   root   manage.py
 -rw-rw-r-- 1 user   user   requirements.txt

Step 3:Connect the database

這里主要就是設(shè)置Django框架下的settings.py文件竖共,注意HOST名字使用

DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.postgresql',
         'NAME': 'postgres',
         'USER': 'postgres',
         'HOST': 'db',  //另一個(gè)容器的名字
         'PORT': 5432,
     }
 }

最后就是再次使用docker-compose新建并啟動(dòng)多個(gè)容器

$ docker-compose up
Django頁(yè)面
Django頁(yè)面
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝙叛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子公给,更是在濱河造成了極大的恐慌借帘,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淌铐,死亡現(xiàn)場(chǎng)離奇詭異肺然,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)腿准,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門际起,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人吐葱,你說(shuō)我怎么就攤上這事街望。” “怎么了弟跑?”我有些...
    開(kāi)封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵灾前,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我窖认,道長(zhǎng)豫柬,這世上最難降的妖魔是什么告希? 我笑而不...
    開(kāi)封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮烧给,結(jié)果婚禮上燕偶,老公的妹妹穿的比我還像新娘。我一直安慰自己础嫡,他們只是感情好指么,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著榴鼎,像睡著了一般伯诬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上巫财,一...
    開(kāi)封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天盗似,我揣著相機(jī)與錄音,去河邊找鬼平项。 笑死赫舒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的闽瓢。 我是一名探鬼主播接癌,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼扣讼!你這毒婦竟也來(lái)了缺猛?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤椭符,失蹤者是張志新(化名)和其女友劉穎荔燎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體艰山,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡湖雹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了曙搬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摔吏。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖纵装,靈堂內(nèi)的尸體忽然破棺而出征讲,到底是詐尸還是另有隱情,我是刑警寧澤橡娄,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布诗箍,位于F島的核電站,受9級(jí)特大地震影響挽唉,放射性物質(zhì)發(fā)生泄漏滤祖。R本人自食惡果不足惜筷狼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匠童。 院中可真熱鬧埂材,春花似錦、人聲如沸汤求。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扬绪。三九已至竖独,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挤牛,已是汗流浹背莹痢。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赊颠,地道東北人格二。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像竣蹦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沧奴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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