前兩天學(xué)習(xí)django框架的時候,練手寫了一個個人博客網(wǎng)站官辈,不過博文還沒有遷移,網(wǎng)站也沒有上線遍坟,只是局域網(wǎng)測試了一下拳亿。網(wǎng)站參考Django搭建簡易博客教程 ,講的非常好愿伴。
測試完畢后決定用docker進(jìn)行部署肺魁,首先是想,啟一個docker隔节,然后所有的東西(包括mysql鹅经,Python,ssh怎诫,django瘾晃,代碼等)都在一個容器里做完了,然后commit成鏡像幻妓。因?yàn)閷?shí)驗(yàn)室的服務(wù)器里openstack集成docker是通過nova-docker實(shí)現(xiàn)的蹦误。nova-docker的功能比較雞肋,無法實(shí)現(xiàn)多個容器互聯(lián),提供的服務(wù)職能放到一個容器里强胰,這樣就違背了docker的初衷舱沧,一個容器只運(yùn)行一個程序。后來學(xué)習(xí)了下docker-compose偶洋,它是個超級方便的docker編排工具熟吏,具體請谷歌。
1.項(xiàng)目目錄涡真,新建/root/docker-tes/my_blog,然后在my_blog下新建 my_blog目錄用來放項(xiàng)目代碼分俯,新建db目錄存放數(shù)據(jù)庫數(shù)據(jù)。 ????????????????????????????????????????????????????????????????????
整體目錄如上哆料。
2.在/root/docker-test/my_blog/下缸剪,新建Dockerfile文件,用戶構(gòu)建web鏡像东亦。
注:lijianfeng/python 是我自己之前做的Python鏡像杏节,就是個普通的Ubuntu鏡像,里面裝了Python典阵,跟新過源奋渔,還有下載過常用的一些東西。
ENV 為環(huán)境變量壮啊,關(guān)于Dockerfile的編寫嫉鲸,自行谷歌。
3.新建docker-compose.yml文件
db中:
?? enviroment里面為數(shù)據(jù)庫名字歹啼,和root密碼玄渗,volumes連接了數(shù)據(jù)卷,將當(dāng)前目錄下的文件連接到容器中狸眼。
? expose表示暴露端口3306藤树,但不發(fā)布到宿主機(jī)上
web中:
?? build指定建立Dockerfile的路徑,我這里為當(dāng)前目錄拓萌。
?? command將覆蓋默認(rèn)的命令岁钓。
?? ports指定想主機(jī)開放的端口
?? links指向其他容器中的服務(wù),這里指向MySQL數(shù)據(jù)庫容器微王。
4.在子目錄my_blog中新建requirements.txt,內(nèi)容為:
? django
? MySQL-python
? markdown
5.在/root/docker-test/my_blog/下構(gòu)建鏡像
docker-compose build
?我的本地倉庫中屡限,沒有MySQL鏡像,所以回去docker hub中pull炕倘,時間比較長钧大,鏡像構(gòu)建完后,可以啟動django項(xiàng)目和app激才。
6.在/root/docker-test/my_blog/下新建django工程
docker-compose run web django-admin.py startproject my_blog ./my_blog
此時,在/root/docker-test/my_blog/my_blog下會出想manage.py和my_blog文件夾。
因?yàn)樵阽R像內(nèi)是以root權(quán)限創(chuàng)建的瘸恼,所以宿主機(jī)中對工程文件無法進(jìn)行更改劣挫,這里修改一下權(quán)限
sudo chmod -R 777 my_blog/
同時在/root/docker-test/my_blog/my_blog新建article的文件夾用在存放article的app,因?yàn)椴粫詣觿?chuàng)建article文件夾东帅。
在/root/docker-test/my_blog/下新建django APP
docker-compose run wen python /code/my_blog/manage.py startapp article ./my_blog/article/
另外需要在/root/docker-test/my_blog/my_blog/下新建templates文件夾压固,用來存放html等模板文件。
注:需要修改settings.py 文件的地方:
? 在INSTALLED_APPS中靠闭,加入article帐我,因?yàn)橹笏⑿聰?shù)據(jù)庫時會要求。
? 練習(xí)代碼的時候可以將MIDDLEWARE_CLASSES中的 'django.middleware.csrf.CsrfViewMiddleware'注釋愧膀,因?yàn)榭缯菊埱髠卧鞎Υa調(diào)試造成影響
? TEMPLATES 中拦键,'DIRS': [os.path.join(BASE_DIR,'templates')],用以識別templates中HTML
? DATABASES中這樣寫,以連接數(shù)據(jù)庫容器
項(xiàng)目目錄為:
7.這時便可以在該項(xiàng)目中開發(fā)博客了檩淋,修改models.py后刷新數(shù)據(jù)庫操作
docker-compose run web python /code/my_blog/manage.py makemigrations
docker-compose run web python /code/my_blog/manege.py migrate
8.開發(fā)過程中芬为,可以docker-compose up命令,嘗試啟動容器蟀悦,查看報錯信息媚朦,進(jìn)行調(diào)試。最后可以通過瀏覽器訪問博客網(wǎng)站了日戈。博客主要安裝上面教程寫的询张,所以代碼就不開源了。
9.通過docker images 查看鏡像浙炼,出現(xiàn)myblog_web的鏡像份氧,docker-compose up后還會看到啟動兩個容器,myblog_web_1鼓拧,myblog_db_1半火。
10.打包鏡像
docker save -o docker_my_blog_image.tar.gz myblog_web
這是整體目錄如第一張圖所示,接下來將整個/root/docker-test/my_blog打包季俩。便可以把鏡像钮糖,連同代碼及數(shù)據(jù)庫拿到別的機(jī)器上運(yùn)行。
11.在另一臺裝有docker 和docker-compose的Ubuntu中酌住,
docker load -i docker_my_blog_image.tar.gz
將鏡像load到本地倉庫中店归,然后在文件夾中,刪除或者移走docker_my_blog_image.tar.gz酪我,否則會進(jìn)入新的本地鏡像中消痛,大大增大鏡像的大小,原因在Dockerfile中最后一行都哭,可以嘗試去掉最后一行秩伞,我沒試過逞带。
接著在新機(jī)器的my_blog目錄中
docker-compose up
這是新的web服務(wù)就起來了,可以通過瀏覽器訪問纱新。