Docker 是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。他很輕巧,CPU/內(nèi)存低消耗,所也筆者選擇了docker作為虛擬化工具
1.安裝for Mac
從官網(wǎng)下載dockerDocker Toolbox,下載完成,點(diǎn)下一步下一步就安裝好了是不是很簡單。
2.構(gòu)建鏡像
docker search [name] #查找官網(wǎng)提供的鏡像
docker pull busybox #安裝官網(wǎng)提供的鏡像
3.構(gòu)建php開發(fā)環(huán)境
使用Dockerfile文件
# 從官方PHP鏡像構(gòu)建
FROM php
# 將index.php復(fù)制到容器內(nèi)的/var/www目錄下
ADD index.php /var/www/
# 對(duì)外暴露8080端口
EXPOSE 8080
# 設(shè)置容器默認(rèn)工作目錄為/var/www
WORKDIR /var/www/
# 容器運(yùn)行后默認(rèn)執(zhí)行的指令
ENTRYPOINT ["php", "-S", "0.0.0.0:8080"]
構(gòu)建容器
docker build -t allovince/php-helloworld .
運(yùn)行這個(gè)容器
docker run -d -p 8080:8080 allovince/php-helloworld
安裝更多的服務(wù)
FROM php
ADD index.php /var/www/
# 安裝更多服務(wù)
RUN apt-get install -y \
mysql-server \
nginx \
php5-fpm \
php5-mysql
# 編寫一個(gè)啟動(dòng)腳本啟動(dòng)所有服務(wù)
ENTRYPOINT ["/opt/bin/php-nginx-mysql-start.sh"]
這種安裝方式會(huì)有也下問題:
- 如果需要驗(yàn)證某個(gè)服務(wù)的不同版本,比如測(cè)試PHP5.3/5.4/5.5/5.6,就必須準(zhǔn)備4個(gè)鏡像,但其實(shí)每個(gè)鏡像只有很小的差異。
- 如果開始新的項(xiàng)目,那么容器內(nèi)安裝的服務(wù)會(huì)不斷膨脹,最終無法弄清楚哪個(gè)服務(wù)是屬于哪個(gè)項(xiàng)目的
使用單一的容器安裝方式:
FROM ubuntu:14.04
RUN apt-get update -y && apt-get install -y nginx
FROM ubuntu:14.04
RUN apt-get update -y && apt-get install -y mysql
這種方式的優(yōu)點(diǎn)在于所有服務(wù)可以有一個(gè)統(tǒng)一的基礎(chǔ)鏡像,對(duì)鏡像進(jìn)行擴(kuò)展和修改時(shí)可以使用同樣的方式,比如選擇了ubuntu,就可以使用apt-get指令安裝服務(wù)。
這種方式的優(yōu)點(diǎn)在于所有服務(wù)可以有一個(gè)統(tǒng)一的基礎(chǔ)鏡像,對(duì)鏡像進(jìn)行擴(kuò)展和修改時(shí)可以使用同樣的方式,比如選擇了ubuntu,就可以使用apt-get指令安裝服務(wù)。
問題在于大量的服務(wù)需要自己維護(hù),特別是有時(shí)候需要某個(gè)服務(wù)的不同版本時(shí),往往需要直接編譯源碼,調(diào)試維護(hù)成本都很高。