Docker部署django項(xiàng)目

使用docker 搭建 centos7

環(huán)境:

主機(jī)環(huán)境:windows 10專業(yè)版

一框咙、安裝docker

Hub.docker.com官網(wǎng)下載 docker for windows

image

安裝完成后汪茧,任務(wù)欄會(huì)
image

表示已經(jīng)運(yùn)行起來(lái)考榨,使用注冊(cè)的賬號(hào)進(jìn)行登錄蛔外,顯示docker is running表示windows環(huán)境下已經(jīng)開(kāi)始運(yùn)行

二、拉取鏡像

Docker 在 windows下安裝完成后會(huì)同時(shí)安裝一個(gè)shell環(huán)境

image

與cmd功能一樣

使用 docker images 查看當(dāng)前有哪些鏡像文件

在hub.docker.com上選擇好鏡像后

image

使用鏡像的 pull 命令就可以進(jìn)行下載

下載完成就可以使用 docker images看到下載到本地的鏡像文件

image
image
image

三猎贴、運(yùn)行鏡像搁吓,映射端口

啟動(dòng)鏡像,在啟動(dòng)鏡像的時(shí)候可以進(jìn)行端口映射

啟動(dòng)動(dòng)命令:

docker run -d -it -p 805:80 -p 5002:5000 -p 10027:22 -p 20001:8888 -p 8001:8000 --name centos-django --privileged=true -e LANG=zh_CN.utf8 licw1986/centos-django /usr/sbin/init

--privileged=true
/usr/sbin/init
這兩行主要解決容器中使用systemctl去啟動(dòng)服務(wù)時(shí)出現(xiàn)D_Bus錯(cuò)誤的問(wèn)題

-d: 后臺(tái)運(yùn)行
-it: 組合使用寓娩,創(chuàng)建一個(gè)偽終端
-p: 端口映射叛氨,本機(jī)端口:容器端口
--name: 容器名呼渣,(需要注意命名規(guī)范,可自己定義 寞埠,only [a-zA-Z0-9][a-zA-Z0-9_.-])
-e:防止亂碼屁置,編碼格式
最后跟上下載下來(lái)的鏡像名

鏡像啟動(dòng)成功后會(huì)返回一串id號(hào),特別長(zhǎng)

通過(guò) docker ps –a查看當(dāng)前docker 中哪些鏡像正在運(yùn)行

image

第一次初始化的時(shí)候仁连,使用run蓝角,后來(lái)都是用start

     docker start  container Id

啟動(dòng)后,在次進(jìn)入

     docker exec -it  id bash

重啟

     docker restart id

停止

     docker stop id

刪除

     docker rm id

     注意:刪除前需要停止鏡像

四饭冬、安裝容器內(nèi)運(yùn)行環(huán)境

根據(jù)所需要的開(kāi)發(fā)項(xiàng)目進(jìn)行環(huán)境搭建使鹅,與一般機(jī)器配置無(wú)異,如果需要圖形化界面需要另外安裝插件

由于本人需要運(yùn)行django項(xiàng)目伍伤,所以配置的環(huán)境主要是

Django==1.8.2
mysql-connector-python==8.0.12
mysqlclient==1.3.13
Pillow==5.2.0
protobuf==3.6.1
six==1.11.0
uWSGI==2.0.17.1
nginx:
nginx version: nginx/1.12.2

Mysql的坑和uwsgi的坑并徘,請(qǐng)看下面專門描述的坑點(diǎn)

五、主機(jī)與容器間資源傳輸

Windows機(jī)器與容器間傳輸文件扰魂,由于是文本界面麦乞,無(wú)法像圖形界面一樣使用CV大法,一切靠命令

直接上代碼

sudo docker cp txcrm2:/home/log/production.log /system/logs ##仔細(xì)看 txcrm2是鏡像id 劝评,后面就是文件路徑以及復(fù)制到宿主機(jī)的文件路徑

從主機(jī)復(fù)制到容器sudo docker cp host_path containerID:container_path

從容器復(fù)制到主機(jī)sudo docker cp containerID:container_path host_path

最后拷貝到本地使用scp

六姐直、容器安裝+配置 uwsgi

安裝uwsgi確實(shí)花了點(diǎn)功夫,都在處理些奇怪的坑蒋畜,但好在已經(jīng)配完声畏,遇到的坑在后面進(jìn)行了描述

配置uwsgi

進(jìn)入的項(xiàng)目文件夾,新建一個(gè)uwsgi.ini的配置文件

image

啟動(dòng)uswsgi uwsgi –ini uwsgi.ini

image

這里也有一點(diǎn)小坑姻成,就是你在啟動(dòng)uwsgi的時(shí)候插龄,會(huì)在當(dāng)前所在目錄去創(chuàng)建uwsgi.pid和uwsgi.log,這個(gè)可以能過(guò)uwsgi的配置文件去固定一個(gè)位置進(jìn)行保存

Uwsgi 停止

Uwsgi –stop uwsgi.pid

可以通過(guò)瀏覽器直接訪問(wèn)測(cè)試uwsgi是否啟動(dòng)成功

七科展、容器安裝+ 配置nginx

Nginx安容易多了均牢。直接使用yum install nginx就可以安裝成功

Nginx start /etc/nginx/nginx.conf 啟動(dòng)

Nginx stop 停止

Nginx –s reload 重啟nginx服務(wù)

配置nginx

image

Upstream 主要用來(lái)做負(fù)載均衡

其中 location 是定義路由,如果使用location = / 是屬于精準(zhǔn)匹配才睹,不加 = 就相當(dāng)于正則匹配 proxy_pass 轉(zhuǎn)發(fā)服務(wù)到哪里徘跪, 后面拼接一定要加上http:// 否則也是不成功的,這里要注意琅攘,縮進(jìn)無(wú)所謂垮庐,能看明白就行,但語(yǔ)法千萬(wàn)不能錯(cuò)坞琴,一個(gè)單詞錯(cuò)就沒(méi)法啟動(dòng)了(本人粗心大意在這里出了錯(cuò))

如果出錯(cuò):可以使用 systemctl status nginx.service查看錯(cuò)誤信息

靜態(tài)文件nginx是無(wú)法從項(xiàng)目中獲取的哨查。需要 自己創(chuàng)建靜態(tài)文件夾,項(xiàng)目中使用python manage.py collectstatic

八置济、負(fù)載均衡

這里其實(shí)就是在upstream 當(dāng)中加入多一條server信息解恰,nginx會(huì)自動(dòng)進(jìn)行選擇轉(zhuǎn)發(fā)

九锋八、Docker提交保存鏡像

1浙于、保存:docker commit 鏡像id 自定命名护盈, 保存自定義名時(shí)最好保存格式為:賬戶名/鏡像名 方便上傳時(shí)不需要再更改

2、登錄docker login

一般如果在軟件中已經(jīng)登錄羞酗,這里可以不用登錄了腐宋,可以當(dāng)成驗(yàn)證是否成功登錄check一下

     3、如果是第一次準(zhǔn)備上傳鏡像需要先到 hub.docker.com中登錄創(chuàng)建一個(gè)鏡像倉(cāng)庫(kù)

        PS:全英文環(huán)境檀轨,E文不好的朋友可以用chrome的翻譯功能胸竞,大致沒(méi)毛病
image

按照步驟一步步操作就好了

3、上傳自定鏡像

     首先查看一下本地的鏡像有哪些
image

docker push 鏡像名:tag

image

出現(xiàn)進(jìn)度條参萄,就成功了卫枝,等待就可以

十、坑點(diǎn)

1讹挎、 windows下docker下載校赤,需要注冊(cè)

2、 通過(guò)nginx轉(zhuǎn)發(fā)時(shí)筒溃,會(huì)丟失掉端口的問(wèn)題

http://elim.iteye.com/blog/2286952马篮,

在配置nginx時(shí),server內(nèi)設(shè)置:

proxy_set_header Host $host怜奖,

host是不帶端口號(hào)的浑测,將其改為proxy_set_header Host $host:805,問(wèn)題得以解決歪玲,其中805是docker容器映射到本機(jī)的端口

3迁央、 安裝環(huán)境時(shí),mysql-python是不支持python3的滥崩,所以需要更換其它方式來(lái)進(jìn)行數(shù)據(jù)庫(kù)交互工作(在這個(gè)地方折騰了很久)

我在這里使用了mysql官方提供的 mysql-connect-python 和 mysqlclient

還可以安裝pymysql

image

將項(xiàng)目的初始化文件中加入

Import pymysql

Pymsql.install_as_MySQLdb()

更改連接方式使用pymsql進(jìn)行連接

另外最好使用離線包安裝mysql

4岖圈、 安裝uwsgi

安裝uwsgi的時(shí)候,使用pip3 install uwsgi 明明是已經(jīng)安裝完成夭委,顯示安裝成功幅狮,pip freeze也可以看到安裝的版本號(hào),仍然提示uwsgi命令無(wú)法找到株灸,多次測(cè)試之后還是不行崇摄。最后去到uwsgi的安裝目錄下面查看,確實(shí)已經(jīng)安裝成功慌烧,而且目錄下面是可以啟動(dòng)的逐抑,為了方便,做了了軟鏈接屹蚊,測(cè)試成功厕氨,這里安裝uwsgi使用的是離線包安裝

image

5进每、 用docker運(yùn)行service 時(shí)會(huì)報(bào)錯(cuò),centos中服務(wù)啟動(dòng)和關(guān)閉使用systemctl

但是命斧,問(wèn)題在于使用docker 的時(shí)候田晚,systemctl是用不了的,需要在run時(shí)加入兩條命令国葬,說(shuō)實(shí)話原理我沒(méi)搞懂贤徒,反正把問(wèn)題解決就行了

加入的命令是:

--privileged=true
/usr/sbin/init
這兩行主要解決容器中使用systemctl去啟動(dòng)服務(wù)時(shí)出現(xiàn)D_Bus錯(cuò)誤的問(wèn)題

重新啟動(dòng)容器就正常了

6、 無(wú)關(guān)docker的坑…… 在項(xiàng)目中生成靜態(tài)文件時(shí)出的錯(cuò)汇四,也提一下

使用python manage.py collectstatic的時(shí)候確認(rèn)要求輸入 yes or no接奈,自己傻輸入的是y, 然后、通孽、序宦、、就傻了

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末背苦,一起剝皮案震驚了整個(gè)濱河市互捌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌糠惫,老刑警劉巖疫剃,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異硼讽,居然都是意外死亡巢价,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門固阁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)壤躲,“玉大人,你說(shuō)我怎么就攤上這事备燃〉锟耍” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵并齐,是天一觀的道長(zhǎng)漏麦。 經(jīng)常有香客問(wèn)我,道長(zhǎng)况褪,這世上最難降的妖魔是什么撕贞? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮测垛,結(jié)果婚禮上捏膨,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好号涯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布目胡。 她就那樣靜靜地躺著,像睡著了一般链快。 火紅的嫁衣襯著肌膚如雪誉己。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天久又,我揣著相機(jī)與錄音巫延,去河邊找鬼效五。 笑死地消,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的畏妖。 我是一名探鬼主播脉执,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼戒劫!你這毒婦竟也來(lái)了半夷?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤迅细,失蹤者是張志新(化名)和其女友劉穎巫橄,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體茵典,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡湘换,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了统阿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彩倚。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖扶平,靈堂內(nèi)的尸體忽然破棺而出帆离,到底是詐尸還是另有隱情,我是刑警寧澤结澄,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布哥谷,位于F島的核電站,受9級(jí)特大地震影響麻献,放射性物質(zhì)發(fā)生泄漏们妥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一赎瑰、第九天 我趴在偏房一處隱蔽的房頂上張望王悍。 院中可真熱鬧,春花似錦餐曼、人聲如沸压储。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)集惋。三九已至孕似,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間刮刑,已是汗流浹背喉祭。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雷绢,地道東北人泛烙。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像翘紊,于是被迫代替她去往敵國(guó)和親蔽氨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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