Docker是一項(xiàng)新的虛擬化技術(shù),相比于傳統(tǒng)的KVM迎捺,Dokcer更加輕量化硝烂,資源利用率更高初坠,使用Docker還可以很好的解決“開發(fā)-生產(chǎn)環(huán)境不一致”的問(wèn)題和簸,依托Docker平臺(tái),使用鏡像作為中間交付對(duì)象某筐,可以避免生產(chǎn)環(huán)境和開發(fā)環(huán)境不一致可能導(dǎo)致的問(wèn)題比搭。下面接著上一篇文章CentOS 7 + Apache + mod_wsgi 部署Django項(xiàng)目,具體講一下利用Docker搭建Django項(xiàng)目部署環(huán)境的步驟南誊。
從Docker Hub上Pull最新的CentOS 7鏡像并新建容器
# sudo docker pull centos
# sudo docker run -i -t centos
修改鏡像,安裝所需軟件
- 安裝ifconfig命令(原先沒(méi)有)
ifconfig命令是在net-tools軟件包中蜜托,安裝net-tools即可抄囚,net-tools包括ifconfig,netstat等命令
# yum install net-tools
- 安裝wget命令(原先沒(méi)有)
yum install wget
- 更新yum源,使用阿里云的yum源(也可以選其他的)橄务,先備份原來(lái)的幔托,再下載新的
# cd /etc/yum.repos.d/
# mv CentOS-Base.repo CentOS-Base.repo_backup
# wget http://mirrors.aliyun.com/repo/Centos-7.repo
# mv Centos-7.repo CentOS-Base.repo
# yum makecache
安裝使用Apache作為應(yīng)用代理服務(wù)器
- 安裝Apache
# yum install httpd
- 設(shè)置Apache服務(wù)開機(jī)自啟動(dòng)(可選,不過(guò)設(shè)置自啟動(dòng)方便)
# /sbin/chkconfig httpd on
- 啟動(dòng)Apache服務(wù)
在CentOS 7中無(wú)法直接使用/sbin/service這樣的方式來(lái)啟動(dòng)服務(wù)蜂挪,會(huì)報(bào)Failed to get D-Bus connection: No connection to service manager - CentOS 7錯(cuò)誤
但是可以把httpd文件拷貝到/etc/init.d/目錄下重挑,直接使用/etc/init.d/httpd -k start來(lái)啟動(dòng)Apache服務(wù),不拷貝到此目錄下也可以棠涮,原理一樣的谬哀,找到可執(zhí)行文件即可
# cp /usr/sbin/httpd /etc/init.d/
# /etc/init.d/httpd -k start
執(zhí)行上述命令時(shí)會(huì)報(bào)警告
httpd: Could not reliably determine the server's fully qualified domain name
消除這個(gè)警告需要更改Apache的設(shè)置文件httpd.conf,取消注釋ServerName即可严肪,并把www.example.com換成自己的IP地址或是localhost
# vi /etc/httpd/conf/httpd.cof
其他的配置說(shuō)明在上一篇文章有具體說(shuō)明史煎。
wsgi模塊、Django驳糯、pip的安裝和項(xiàng)目的配置和之前一樣篇梭,這里就不贅述了。
Docker部署
想要根據(jù)鏡像來(lái)啟動(dòng)容器并啟動(dòng)Apache服務(wù)酝枢,訪問(wèn)部署的項(xiàng)目恬偷,我使用的方式是:
# sudo docker run -d -p 80:80 image_name startup_script
說(shuō)明:使用docker run的-d參數(shù)來(lái)把容器放在后臺(tái)運(yùn)行,但是需要注意的是帘睦,docker后臺(tái)運(yùn)行袍患,容器運(yùn)行的時(shí)長(zhǎng)取決于后臺(tái)運(yùn)行進(jìn)程的時(shí)長(zhǎng),如果后臺(tái)運(yùn)行的進(jìn)程在有限時(shí)間內(nèi)執(zhí)行結(jié)束官脓,那么容器在進(jìn)程執(zhí)行完之后就會(huì)停止协怒,但是我們的服務(wù)需要長(zhǎng)時(shí)間提供服務(wù),也就是需要進(jìn)程一直處于活動(dòng)狀態(tài)卑笨,可以使用一種省事的辦法孕暇,讓容器啟動(dòng)后執(zhí)行的腳本程序在啟動(dòng)完Apache服務(wù)之后,一直處于死循環(huán)狀態(tài),這樣妖滔,容器就可以一直處于活動(dòng)狀態(tài)隧哮,能夠一直向外提供服務(wù),下面是我的腳本程序startup.sh代碼:
#!/bin/bash
/etc/init.d/httpd -k start
while(true)
do
echo "start apache service..."
done