系列目錄
Docker從零到集群(1/3)—Machine,Compose,Swarm
Docker從零到集群(2/3)—Machine,Compose,Swarm
Docker從零到集群(3/3)—Machine,Compose,Swarm
前言
通過(guò)前一篇文章Docker基礎(chǔ)概念已經(jīng)說(shuō)明了構(gòu)建一個(gè)Docker集群系統(tǒng)的思路,那么就從本文開始實(shí)踐如何一步步實(shí)現(xiàn)Docker單機(jī)應(yīng)用系統(tǒng),而下一篇文章會(huì)介紹Docker集群系統(tǒng)的搭建
準(zhǔn)備
本文實(shí)踐環(huán)境為Mac OS X 10.13.2(High Sierra)
準(zhǔn)備好VPN,否則相關(guān)文檔和工具的訪問(wèn)會(huì)非常慢,甚至無(wú)法訪問(wèn)安裝Docker For Mac
在Docker官方網(wǎng)站下載,dmg文件,下載后解壓拖拽放入應(yīng)用程序文件夾即可
Docker For Mac 替代了Docker Tools,集成了Docker開發(fā)所有的工具環(huán)境安裝VirtualBox虛擬機(jī),用于Docker Machine創(chuàng)建虛擬機(jī)
Mac OS X默認(rèn)是沒(méi)有虛擬機(jī)的,所以要使用Docker Machine,需要事先安裝好VirtualBox,這在Docker的官方文檔上有相關(guān)說(shuō)明
步驟
一、Docker Machine
在已經(jīng)安裝完成VirtualBox的情況下,使用Dokcer Machine創(chuàng)建虛擬機(jī),命令如下:
docker-machine create m1
本文所有命令都會(huì)以能完成功能為基礎(chǔ)的最小原則,以方便初學(xué)者學(xué)習(xí),更多命令參數(shù)幫助可以通過(guò)-h/--help來(lái)獲取,還可通過(guò)查閱官方文檔進(jìn)一步學(xué)習(xí)
以上命令中,會(huì)默認(rèn) -d/--driver virtualbox 參數(shù),意思是使用virtualbox的驅(qū)動(dòng)來(lái)創(chuàng)建一臺(tái)虛擬機(jī),這臺(tái)虛擬機(jī)會(huì)帶有Docker運(yùn)行環(huán)境,我們可以在這臺(tái)虛擬機(jī)快速構(gòu)建我們的Docker單機(jī)應(yīng)用,包括創(chuàng)建鏡像,上傳鏡像,和運(yùn)行容器查看已經(jīng)創(chuàng)建好的虛擬機(jī)
docker-machine ls
進(jìn)入創(chuàng)建好的虛擬機(jī)m1
docker-machine ssh m1
就這么簡(jiǎn)單,我們就進(jìn)入到了剛才創(chuàng)建好的虛擬機(jī)中,和真實(shí)宿主機(jī)器的環(huán)境一樣,我們可以通過(guò)Docker命令來(lái)構(gòu)建Docker鏡像了
需要注意的是,以上3個(gè)步驟為Docker Machine的基本使用,如果不想使用虛擬機(jī),那么在宿主機(jī)上安裝好Docker環(huán)境后,可以直接在宿主機(jī)上操作,以上3個(gè)步驟省略
二、Docker File
- 在原應(yīng)用文件夾下編寫Dockerfile文件,指定部署序列,Node應(yīng)用例子如下:
# FROM node
FROM mhart/alpine-node:latest
#創(chuàng)建應(yīng)用目錄
RUN mkdir -p /usr/node/autodeploy
#設(shè)置工作目錄
WORKDIR /usr/node/autodeploy
#復(fù)制所有文件到工作目錄
COPY . /usr/node/autodeploy
#編譯運(yùn)行node項(xiàng)目
RUN npm install
#運(yùn)行命令
CMD ["npm", "start"]
Dockerfile文件即指定你的應(yīng)用所需部署環(huán)境,所需配置等等,這是Docker容器部署中最為核心的工作,持久化構(gòu)建腳本
三、Docker Compose
拷貝應(yīng)用代碼到虛擬機(jī)中(如果非虛擬機(jī)環(huán)境,則此步驟可省略)
docker-machine scp -r 源碼目錄 m1:目的路徑
編寫docker-compose.yml文件(具體內(nèi)容可查詢官網(wǎng),后續(xù)也會(huì)單獨(dú)寫一篇文章講解)
以下docker-compose.yml文件配置了兩個(gè)服務(wù),分別是一個(gè)nginx服務(wù)器和一個(gè)node服務(wù),都指定了構(gòu)建目錄,也就是說(shuō)會(huì)指定構(gòu)建目錄下的Dockerfile,分別構(gòu)建出兩個(gè)鏡像,然后還配置了nginx與node應(yīng)用連接,這樣在nginx中,就可以通過(guò)域名node訪問(wèn)
version: '3'
services:
nginx:
build: ./nginx
ports:
- "80:80"
volumes:
- /Users/cheney/Documents/docker/nginx/log:/var/log/nginx
# - /Users/cheney/Documents/docker/nginx/nginx.conf:/etc/nginx/nginx.conf
# - /Users/cheney/Documents/docker/nginx/conf.d:/etc/nginx/conf.d
# - /Users/cheney/Documents/docker/nginx/html:/usr/share/nginx/html
links:
- autodeploy
autodeploy:
build: ./autodeploy
expose:
- "10001"
-
構(gòu)建鏡像和運(yùn)行容器
docker-compose up
通過(guò)這個(gè)命令,會(huì)執(zhí)行當(dāng)前目錄下的docker-compose.yml文件,根據(jù)里面的配置構(gòu)建鏡像,啟動(dòng)容器,這樣,一個(gè)單機(jī)docker應(yīng)用就完成了
四、訪問(wèn)測(cè)試
【在瀏覽器輸入】http://m1的IP地址
【如不使用docker-machine虛擬機(jī),直接訪問(wèn)本地】http://localhost
這樣就可以看到返回結(jié)果了,在本例中,nginx和node的代碼就省略了,訪問(wèn)原理很簡(jiǎn)單
nginx容器監(jiān)聽了80端口,然后轉(zhuǎn)發(fā)給http://node:10001, 因?yàn)閚ode容器監(jiān)聽10001端口,所以node容器就會(huì)收到請(qǐng)求,然后express應(yīng)用路由攔截,返回?cái)?shù)據(jù)
本例中,為了清晰直接,使用nginx和node命名,實(shí)際中應(yīng)用名稱可以mynginx,mynode等
總結(jié)
通過(guò)以上步驟,我們就能完成docker單機(jī)應(yīng)用環(huán)境的部署搭建,因?yàn)槊總€(gè)人具體應(yīng)用是不同的,所以本文省略了具體應(yīng)用的代碼,只展示最關(guān)鍵的docker命令控制。通過(guò)docker-compose.yml配置docker鏡像和容器的構(gòu)建啟動(dòng),極大的省略了用繁瑣的docker命令一個(gè)個(gè)構(gòu)建鏡像和啟動(dòng)容器
后續(xù)文章會(huì)介紹如何使用Docker Swarm進(jìn)一步將我們的單機(jī)應(yīng)用拓展成為集群,謝謝閱讀
作者:CheneyXu
關(guān)于:XServer官網(wǎng)