在 IBM Container 中運行 Swift 應用程序的 10 個 步驟
我想,復習一下創建一個 IBM Container 來托管用 Swift 編程語言編寫的示例服務器端應用程序的步驟,這對您可能有所幫助。示例應用程序將會偵聽端口 9080,并向客戶端返回一個基本的 HTML 響應。雖然示例應用程序不是一個生產就緒應用程序,但它可以讓您了解,使用 Swift 可以開發不同類型的服務器端應用程序。
我們會向不熟悉 Swift 的人介紹一下它,Swift 是蘋果公司創造的一種現代的編程語言,可用于開發 OS X 和 Linux 的應用程序。除了 Swift 之外,蘋果公司還實現了 Swift Package Manager (SPM) 工具,用該工具來構建 Swift 應用程序,并指定它們的依賴關系。值得一提的是,示例服務器應用程序遵循 SPM 所要求的結構和約定。因此,SPM 可用于編譯和創建可執行的示例服務器程序。
在復習創建 IBM Container 來托管示例 Swift 示例服務器應用程序的步驟之前,讓我們簡單討論一下開發人員選擇這樣做的一些原因:
- IBM Container 提供了靈活性,使您無需對應用程序進行任何更改就可以在云中運行它。這是有可能的,因為 IBM Container 利用了 Docker。通過 IBM Container,開發人員可以在云上實例化 Docker 鏡像并運行它。他們可以在 Docker 容器中打包應用程序,并在支持 Docker 的環境中運行它。這使部署應用程序變得非常輕松,并且可移植性不再只是一個概念。
- 將應用程序及其所依賴的全部服務都打包到一個單元中也是有可能的。雖然您可能想將應用程序和它所使用的服務分別打包到不同的容器中,但您也可以將所有組件都打包到一個部署單元中,以測試應用程序的功能,或快速構建一個原型或概念證明。
- 作為系統級軟件包(如 libhttp-parser)的封裝程序的 Swift 軟件包,要求在嘗試使用 Swift Package Manager 構建應用程序之前,就要安裝好那些系統軟件包。可以在 Docker 鏡像中將這些系統軟件包指定為依賴關系。
在 IBM Container 中運行 Swift 應用程序的 10 個 步驟
現在,讓我們復習那些您想要了解的步驟!如果您遵循以下 10 個簡單的步驟,就可以很輕松地在 Bluemix 上的 IBM Container 中運行 Swift 示例應用程序。
I 安裝 Docker
首先,應該在您的開發系統上安裝最新版本的 Docker 。完成安裝后,應該啟動一個 Docker 會話。在 OS X 系統上,您可以使用 Docker QuickStart Terminal 程序啟動一個 Docker 會話。啟動 Docker 會話后,就會出現一個終端窗口,您可以從該窗口中發出 Docker 命令。
II 安裝 Cloud Foundry 命令行
第二步是在您的系統上安裝最新版的 Cloud Foundry 命令行 。該命令行使您可以對 Bluemix 云執行命令。
III 配置 Cloud Foundry 命令行
在嘗試使用 Cloud Foundry 命令行之前,應該先配置它,以便它能與您的 Bluemix 地區進行通信:
- 英國 – https://api.eu-gb.bluemix.net
- 悉尼 – https://api.au-syd.bluemix.net
- 美國南部 – https://api.ng.bluemix.net
使用 cf api 命令指定 Bluemix 地區 URL,如下面的例子所示:
$ cf api https://api.ng.bluemix.net Setting api endpoint to https://api.ng.bluemix.net... OK ...
現在,您應該執行 身份驗證 ,并使用 cf login 命令訪問您的 Bluemix 組織和空間:
$ cf login API endpoint: https://api.ng.bluemix.net Email> john_doe@us.ibm.com ...
IV 安裝并配置 IBM Containers 插件
完成 Cloud Foundry 命令行的配置后,您應該安裝和初始化 IBM Containers 插件 。在 OS X 系統上,可以發出以下命令來安裝該插件:
$ cf install-plugin https://static-ice.ng.bluemix.net/ibm-containers-mac
安裝 IBM Containers 插件后,需要通過執行 cf ic init 命令來初始化它。請注意,由 IBM Containers 插件解釋的任何命令 (cf ic <cmd>) 都應該從 Docker 終端窗口提交:
$ cf ic init Deleting the old configuration file... Retrieving client certificates from IBM Containers... ...
V 獲得您的命名空間
為了利用 IBM Containers 插件,您需要獲得分配給您的組織的命名空間。您可以通過發出以下命令來找到您的命名空間:
$ cf ic namespace get space1
記下返回的命名空間的值(如 space1),因為您很快會用到它!
VI 下載 Docker 鏡像
我們的團隊已將兩個 Docker 鏡像發布到 Docker Hub,放在 IBM 組織下面:
- ibmcom/swift-ubuntu – 一個 Ubuntu v15.10 鏡像,其中包含最新的 Swift 二進制文件 [ 這在撰寫本文時的情況 ] 及其依賴關系。您可以使用該鏡像創建自己的自定義鏡像,以托管您自己的應用程序。
- ibmcom/swift-runtime – 該鏡像擴展了 ibmcom/swift-ubuntu 鏡像,添加了 Swift 示例應用程序。
為了將您的 Swift 應用程序部署到 Bluemix 上的 IBM Container,您可以根據 ibmcom/swift-ubuntu 鏡像創建一個新的 Docker 鏡像。請注意,這正是我們對 Swift 示例應用程序所執行的操作!
您可以在 ibmcom/swift-ubuntu 鏡像的 GitHub 庫 中找到它的 Dockerfile。這個 Dockefile 下載并安裝 1) Swift 二進制文件和它的依賴關系;2) swift-corelibs-libdispatch 庫;3) 我們在 Swift 開發工作中認為有用的幾個系統級軟件包。
ibmcom/swift-runtime 鏡像的 Dockerfileis 的內容如下所示:
FROM ibmcom/swift-ubuntu:latest MAINTAINER IBM Swift Engineering at IBM Cloud LABEL Description="Image to run the Swift Sample Starter App inside an IBM Container on Bluemix." EXPOSE 9080 # Clone Swift Starter App repo RUN git clone -b master https://github.com/IBM-Bluemix/swift-helloworld # Build Swift Started App RUN cd /root/swift-helloworld && swift build # Add build files to image ADD start-swift-helloworld.sh /root USER root CMD ["/root/start-swift-helloworld.sh"]
如果您想知道,start-swift-helloworld.sh 文件的內容如下:
# Run sample server cd /root/swift-helloworld && .build/debug/Server
正如我們可以在上面看到, Swift 示例應用程序 的源代碼是在創建 Docker 鏡像的過程中被下載和編譯的。此外,請注意,start-swift-helloworld.sh shell 腳本只負責啟動示例服務器應用程序。
我們最初認為,在創建容器時下載 Swift 示例應用程序的源代碼可確保每個新的 IBM Container 都具有最新的可用代碼。但是,我們注意到,這樣做可能會導致網絡問題。第一次啟動 IBM Container 時,網絡配置還沒有準備好。因此,嘗試克隆一個 git repo 可能會產生錯誤,導致停止容器。
現在,讓我們使用以下命令從 Docker Hub 下載 ibmcom/swift-runtime 鏡像:
$ docker pull ibmcom/swift-runtime:latest
VII 標記 Docker 鏡像
下一步是用您的私有 Bluemix 注冊表和鏡像名稱來標記 ibmcom/swift-runtime Docker 鏡像。用注冊表信息標記鏡像可以讓 Docker 知道,您打算將哪個鏡像推送到 Bluemix 注冊表,而不是 Docker Hub:
docker tag -f ibmcom/swift-runtime <bluemix registry>/<namespace>/swift-runtime
您應該用分配給您的組織的命名空間替換 <namespace>,并用您的 Bluemix 地區的注冊表名稱替換 <bluemix registry>。例如,對于美國南部地區,注冊表名稱是 registry.ng.bluemix.net。
請注意,您將執行 docker tag 命令來創建一個原始 Docker 鏡像副本。您可以通過執行 docker images 命令來驗證這一點:
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE registry.ng.bluemix.net/space1/swift-runtime latest d5182f1d33b1 21 hours ago 1.248 GB ibmcom/swift-runtime latest d5182f1d33b1 21 hours ago 1.248 GB
VIII 將 Docker 鏡像推送到 Bluemix 注冊表
我們現在已準備好,通過發出以下命令將標記過的鏡像推送到 Bluemix:
$ docker push <bluemix registry>/<namespace>/swift-runtime
像以前一樣,務必使用您的命名空間替換 <namespace>,并用您的 Bluemix 地區的注冊表名稱替換 <bluemix registry>。
IX 獲得一個公網 IP 地址
要訪問 IBM Container,必須將為其分配一個公網 IP 地址。您可以通過發出以下命令,使用 IBM Containers 插件來請求 IP 地址:
$ cf ic ip request OK The IP address "X.X.X.X" was obtained.
X 創建 IBM Container
我們現在已準備好創建一個 IBM Container 來托管 Swift 示例應用程序。通過執行一個簡單的命令來創建 IBM Container,并分配您在先前的步驟中獲得的 IP 地址:
$ cf ic run -p <ip_address>:9080:9080 --name swift-runtime <bluemix registry>/<namespace>/swift-runtime
請注意,您應該將 <ip_address>、<bluemix registry> 和 <namespace> 替換成相應的值。
就是這樣!您現在應該有一個運行 Swift 示例應用程序的 IBM Container。如果訪問 Bluemix 上的儀表板,您會看到與剛剛創建的 swift-runtime 容器對應的條目。您可以單擊該條目,驗證該容器已啟動并運行。此外,您還可以使用瀏覽器測試 Swift 示例服務器確實正在運行,訪問 http://<ip_address>:9080,其中 <ip_address> 是分配給您的 IBM Container 的 IP 地址。您的瀏覽器上應該顯示“Hello from Swift on Linux!”消息。
這些是讓 Swift 開發人員非常興奮的時刻。最初,Swift 是一種僅用于 iOS 應用程序開發的語言。現在,您還可以用它來開發后端組件,iOS 和其他移動平臺可以使用這些組件向用戶提供獨特的體驗和功能!