國際版的Bluemix目前有三個region,US South,United Kingdom和Sydney。其中US South是功能最全的,UK其次,Sydney功能最少。Containers服務在US和UK兩個region中都可以使用。
為了減少不必要的麻煩,我使用了一個在國外的安裝了Ubuntu 16.04操作系統的虛擬機作為客戶端,如果你想體驗一把國內pull/push docker鏡像的酸爽,同時還想測試一下在Windows 10自帶的Linux環境中運行docker的話,那么可以放心大膽的在運行Windows 10的計算機上體驗Bluemix的Containers服務。
經過實際測試,在國內訪問US South的速度比UK好很多,因此這里我使用US South region來進行實驗。總體來說,Bluemix的文檔質量還是很高的,基本上沒有什么錯誤。當然,現在看起來還只有英文版。
Bluemix的Containers可以使用三個來源的docker images:IBM Public,Docker Hub和自己制作的鏡像。IBM Public的鏡像現在還很少,只有可憐的3個。
如果要使用Docker Hub的image和上傳自己的image,需要在客戶端安裝Bluemix CLI,Cloud Foundry CLI和ibm-containers插件。當然docker也是必須要在客戶端安裝的。看上去有些復雜...
Docker的安裝比較簡單,按照官方文檔操作就可以完成。注意不同的Ubuntu版本操作略有不同。安裝完成后,驗證一下docker安裝是否正常。
docker run hello-world
從這里下載Bluemix CLI,根據頁面上的說明解壓並執行安裝命令。
wget http://public.dhe.ibm.com/cloud/bluemix/cli/bluemix-cli/Bluemix_CLI_0.4.1_amd64.tar.gz tar -xvf Bluemix_CLI_0.4.1_amd64.tar.gz cd Bluemix_CLI/ sudo ./install_bluemix_cli
從Github下載Cloud Foundry的CLI。下載Debian 64位的Installers,不要下載Binaries。
wget https://s3.amazonaws.com/go-cli/releases/v6.21.1/cf-cli-installer_6.21.1_x86-64.deb sudo dpkg -i cf-cli-installer_6.21.1_x86-64.deb
安裝完成后,執行“cf --help”應該正確顯示cf的幫助說明。
安裝ibm-containers插件,這是一個Cloud Foundry CLI的插件。
cf install-plugin https://static-ice.ng.bluemix.net/ibm-containers-linux_x64
安裝完成后,執行“cf plugins”驗證ibm-containers插件是否安裝成功。
接下來我們在本地創建一個docker鏡像,以下是Dockerfile示例(鏡像中的內容僅供演示參考,實際操作時請用自己的鏡像替代):
FROM ubuntu:goproxy-v1 EXPOSE 9443 CMD ["/root/goproxy","-config","/root/config.json"]
這個鏡像比較簡單,執行“/root/goproxy”並傳遞2個參數:"-config"和"/root/config.json"。確保相應的文件已經copy到base鏡像(ubuntu:goproxy-v1)中。把host上的文件copy到鏡像中可以使用:“sudo docker cp”命令(使用sudo執行)。
構建鏡像(注意命令行最后是個“.”)
docker build -t ubuntu:goproxy-v2 .
鏡像構建完成后,在本地測試鏡像是否能正常運行
docker run -p 9443:9443 ubuntu:goproxy-v2
鏡像構建成功后,我們將本地構建的鏡像push到私有庫中。Bluemix Containers為用戶在每個region各提供一個私有的docker repository。
登錄到Bluemix,注意“-a”參數,這個用來指定api的endpoint,每個region的endpoint都是不一樣的。
cf login -a api.ng.bluemix.net
輸入用戶名和密碼登錄,然后根據提示選擇一個space:
使用ibm-containers插件登錄到Containers服務(這個命令需要使用sudo執行,否則執行命令后沒有任何反應就退出了):
sudo cf ic login
登錄成功后出現以下提示:
將上圖中3條黃色標記的命令依次復制並執行一遍,用於設置使用本地的docker客戶端操作Bluemix Containers服務。每次登陸都要這樣執行一次,的確有點煩...
如果是首次登錄Containers服務,需要在當前region為Containers服務設置一個namespace,注意這個namespace不是前文中登錄Bluemix選擇的space。
# “htcn-us-south-1”是namespace的名稱。
# 記住namespace名稱,后續步驟會用到。 sudo cf ic namespace set htcn-us-south-1
設置完成后,本地的docker客戶端就可以操作Bluemix的Containers服務了。
給本地的docker鏡像打標簽:
docker tag ubuntu:goproxy-v2 registry.ng.bluemix.net/htcn_us_south_1/ubuntu:goproxy-v2
這個命令看起來有些復雜:
- “ubuntu:goproxy-v2”是本地鏡像名稱和標簽
- “registry.ng.bluemix.net/htcn_us_south_1/ubuntu:goproxy-v2”是遠程repository的名稱和標簽
- 遠程repository的名稱和標簽格式為:[Bluemix region URL]/[Containers的namespace]/[鏡像名稱]:[鏡像標簽]
如果已經熟悉並使用過其他的docker服務(CaaS),這個理解起來並不復雜。
推送本地鏡像到Containers服務的私有repository中:
sudo docker push registry.ng.bluemix.net/htcn_us_south_1/ubuntu:goproxy-v2
登錄到Bluemix的web控制台,選擇region后進入Containers服務,在新建container頁面中可以看到剛才上傳的image。
選擇這個image,開始創建container。
按提示輸入container的名稱,選擇container的大小,指定公網IP地址。然后點擊“Create”按鈕開始創建container。
運行中的container:
總體來說IBM Bluemix Containers服務的使用過程還是很流暢的,CLI和web控制台操作起來都比較容易上手。文檔完整清晰,沒有明顯的差錯。如果要說缺點的話,那就是在國內的訪問速度的確不咋地(但這個也是並非IBM能力范圍內可以快速解決的問題)。期待由世紀互聯運營的IBM Bluemix中文公眾版盡快上線吧!
最后提醒一個“小坑”,Containers服務目前只能對外開放:22,80,443,9080,9443幾個端口,詳細信息請參考這里。