系列目錄
Docker從零到集群(1/3)—Machine,Compose,Swarm
Docker從零到集群(2/3)—Machine,Compose,Swarm
Docker從零到集群(3/3)—Machine,Compose,Swarm
前言
通過前一篇文章Docker基礎概念已經說明了構建一個Docker集群系統(tǒng)的思路,那么就從本文開始實踐如何一步步實現(xiàn)Docker單機應用系統(tǒng)道伟,而下一篇文章會介紹Docker集群系統(tǒng)的搭建
準備
本文實踐環(huán)境為Mac OS X 10.13.2(High Sierra)
準備好VPN努释,否則相關文檔和工具的訪問會非常慢玷禽,甚至無法訪問安裝Docker For Mac
在Docker官方網站下載以舒,dmg文件喘蟆,下載后解壓拖拽放入應用程序文件夾即可
Docker For Mac 替代了Docker Tools樊诺,集成了Docker開發(fā)所有的工具環(huán)境安裝VirtualBox虛擬機波桩,用于Docker Machine創(chuàng)建虛擬機
Mac OS X默認是沒有虛擬機的眠屎,所以要使用Docker Machine剔交,需要事先安裝好VirtualBox,這在Docker的官方文檔上有相關說明
步驟
一改衩、Docker Machine
在已經安裝完成VirtualBox的情況下岖常,使用Dokcer Machine創(chuàng)建虛擬機,命令如下:
docker-machine create m1
本文所有命令都會以能完成功能為基礎的最小原則葫督,以方便初學者學習腥椒,更多命令參數幫助可以通過-h/--help來獲取,還可通過查閱官方文檔進一步學習
以上命令中候衍,會默認 -d/--driver virtualbox 參數笼蛛,意思是使用virtualbox的驅動來創(chuàng)建一臺虛擬機,這臺虛擬機會帶有Docker運行環(huán)境蛉鹿,我們可以在這臺虛擬機快速構建我們的Docker單機應用滨砍,包括創(chuàng)建鏡像,上傳鏡像妖异,和運行容器查看已經創(chuàng)建好的虛擬機
docker-machine ls
進入創(chuàng)建好的虛擬機m1
docker-machine ssh m1
就這么簡單惋戏,我們就進入到了剛才創(chuàng)建好的虛擬機中,和真實宿主機器的環(huán)境一樣他膳,我們可以通過Docker命令來構建Docker鏡像了
需要注意的是响逢,以上3個步驟為Docker Machine的基本使用,如果不想使用虛擬機棕孙,那么在宿主機上安裝好Docker環(huán)境后舔亭,可以直接在宿主機上操作,以上3個步驟省略
二蟀俊、Docker File
- 在原應用文件夾下編寫Dockerfile文件钦铺,指定部署序列,Node應用例子如下:
# FROM node
FROM mhart/alpine-node:latest
#創(chuàng)建應用目錄
RUN mkdir -p /usr/node/autodeploy
#設置工作目錄
WORKDIR /usr/node/autodeploy
#復制所有文件到工作目錄
COPY . /usr/node/autodeploy
#編譯運行node項目
RUN npm install
#運行命令
CMD ["npm", "start"]
Dockerfile文件即指定你的應用所需部署環(huán)境肢预,所需配置等等矛洞,這是Docker容器部署中最為核心的工作,持久化構建腳本
三烫映、Docker Compose
拷貝應用代碼到虛擬機中(如果非虛擬機環(huán)境沼本,則此步驟可省略)
docker-machine scp -r 源碼目錄 m1:目的路徑
編寫docker-compose.yml文件(具體內容可查詢官網噩峦,后續(xù)也會單獨寫一篇文章講解)
以下docker-compose.yml文件配置了兩個服務,分別是一個nginx服務器和一個node服務抽兆,都指定了構建目錄壕探,也就是說會指定構建目錄下的Dockerfile,分別構建出兩個鏡像郊丛,然后還配置了nginx與node應用連接李请,這樣在nginx中,就可以通過域名node訪問
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"
-
構建鏡像和運行容器
docker-compose up
通過這個命令厉熟,會執(zhí)行當前目錄下的docker-compose.yml文件导盅,根據里面的配置構建鏡像,啟動容器揍瑟,這樣白翻,一個單機docker應用就完成了
四、訪問測試
【在瀏覽器輸入】http://m1的IP地址
【如不使用docker-machine虛擬機绢片,直接訪問本地】http://localhost
這樣就可以看到返回結果了滤馍,在本例中,nginx和node的代碼就省略了底循,訪問原理很簡單
nginx容器監(jiān)聽了80端口巢株,然后轉發(fā)給http://node:10001, 因為node容器監(jiān)聽10001端口熙涤,所以node容器就會收到請求阁苞,然后express應用路由攔截,返回數據
本例中祠挫,為了清晰直接那槽,使用nginx和node命名,實際中應用名稱可以mynginx,mynode等
總結
通過以上步驟等舔,我們就能完成docker單機應用環(huán)境的部署搭建骚灸,因為每個人具體應用是不同的,所以本文省略了具體應用的代碼慌植,只展示最關鍵的docker命令控制甚牲。通過docker-compose.yml配置docker鏡像和容器的構建啟動,極大的省略了用繁瑣的docker命令一個個構建鏡像和啟動容器
后續(xù)文章會介紹如何使用Docker Swarm進一步將我們的單機應用拓展成為集群涤浇,謝謝閱讀
作者:CheneyXu
關于:XServer官網