使用Docker和Codeship來裝運Node.js應用

jopen 9年前發布 | 11K 次閱讀 Docker
 

本文翻譯自RisingStack網站Gergely Nemeth撰寫的《Shipping Node.js Applications with Docker and Codeship》一文,感謝景莊對該文章的翻譯。

如今設置Node.js應用 持續部署 環境已經變得比以前簡單多了。我們有Jenkis, Strider, Travis或者Codeship這樣的工具。 在本文中我們將要討論的是使用 Codeship和Docker 來部署我們的Node.js應用。

在深入討論之前,有一點原則是我想要聲明的——不可變的基礎結構(infrastructures),那么它具體指的是什么? 以及它是如何讓你的生活變得更加簡單的?

不可變的基礎結構

所謂不可變的基礎結構通常包括數據和其他相關的東西。所謂其他相關的東西取決于部署階段的替代物。 不僅僅是安全不定,或者是在生產系統中的配置變化。為了達成這一點,我們需要在兩種途徑中選擇: 基于機器的或是基于容器的方案。

基于機器的 Machine-based

基于機器的基礎結構大概可以這樣描述:每次部署的時候你需要設置完全新的EC2機器,并且在上面部署它們。 如果所有的事情都正常的話,你只需要簡單的修改你的負載均衡配置來指向你的新機器。然后,你可以刪除舊的機器。

基于容器的 Container-based

你可以認為 基于容器 的方案是對基于機器方案的改進: 在單臺機器上你可以運行多個容器。Docker讓這件事情變得非常的簡單。Docker是一個開放平臺, 能夠讓開發者和系統管理員構建、部署和運行分布式的應用程序。

當然,你可以使用VMWare或者VirtualBox來實現基于容器的方案。但是, Docker 讓你只需要幾秒鐘就完成任務,而后者可能需要十幾分鐘。

不可變的基礎結構的優點

為了能夠盡可能的利用這個方法,你需要配置 持續交付 管道, 并且需要相應的測試和編制(orchestration)。

主要的優點包括:

  • 回退到舊版本非常的簡單
  • 在隔離環境中測試新基礎結構成為可能
  • 簡化變化管理,因為服務器從不退化(rot)

持續集成、持續交付、持續部署

持續集成

持續集成一般指的是將開發分支一天多次合并到主干上的過程(通常是自動進行的)。這有助于:

  • 盡早的發現錯誤
  • 避免“集成地獄”

持續交付

顧名思義,持續交付指的是將代碼交付到指定環境中的過程,無論是QA小組或者是客戶,都可以審查代碼。 當變動被通過后,它們將被交付到生產環境中。

持續部署

你可以認為持續部署是持續交付的下一個環節,也就是說,當代碼變更通過自動化測試后能夠自動的部署到生產環境中。 持續部署高度依賴于基礎設施的在測試、繼承和部署等方面的自動化能力。一個簡單的持續部署的過程如下圖所示:

使用Docker和Codeship來裝運Node.js應用

更多關于持續部署有關的實踐,可以參考 這篇文章

Docker實踐

是時候來動手了。我們將會創建和部署一個Hello Docker & Codeship的應用。

首先,我們將要使用 https://github.com/RisingStack/docker-codeship-project 這個倉庫。 它是一個非常簡單的應用,能夠通過HTTP返回“We <3 Docker & Codeship”。

下面是我們接下來需要做的事:

  • 當某個開發者push代碼到master分支時,Github會觸發在Codeship上的構建工作
  • 如果一切運行正常的話,Codeship會觸發在Docker Hub上的一次構建
  • 當新的Docker鏡像準備好后(pushed),Docker會觸發一次webhook
  • Ansible將最新的鏡像推送到應用服務器上(Docker部署者)

使用Docker和Codeship來裝運Node.js應用

創建一個Docker Hub賬號

什么是Docker Hub

Docker Hub管理著所分發應用的聲明周期,它提供云服務進行構建、共享容器和自動化工作流。

Docker Hub 注冊。

設置Docker倉庫

注冊完后,在Docker Hub中綁定你的Github賬號,去 My Profile > My Repositories > Add repositories, 然后點擊Automated build。

在設置完倉庫后,開啟構建觸發器(enable Build triggers)。這類似于執行了如下命令:

$ curl --data "build=true" -X POST <a >https://registry.hub.docker.com/u/gergelyke/docker-codeship-project/trigger/TOKE

其次,也要確保在自動構建下禁用了Github提交鉤子(commit hook),Codeship將會監聽git倉庫的提交行為。

就是這樣,你的Docker Hub已經可以被Codeship所使用。

獲取一個Codeship賬號

去Codeship獲取一個賬號。

在Codeship中設置你的倉庫

你可以在Codeship中連接到你的Github/BitBucket帳戶。當你連接完成后,你會在Codeship中看到你的倉庫列表。 然后選擇我們需要的倉庫,選擇“Save and go to my dashboard”。

修改你的部署命令

在部署設置下,小啊U你這自定義腳本,將前面在Docker Hub中生成的curl命令剪貼到這里。

Docker部署者

這部分的內容并非是現成的。你必須手動實現一個小型的API服務器,用于監聽Docker Hub webhook。 當端點(endpoint)被調用時,它會運行Ansible,然后將最新的可用的Docker鏡像拉到應用服務器中。

當然,你也可以不使用Ansible,而是選用其他的替代服務。

小結

正如你看到的那樣,使用不變的基礎設施設置一個持續交付管道非常的簡單,它不僅僅可以用于你的生產環境中, 也可以用于開發或預發環境中。

原文鏈接: Shipping Node.js Applications with Docker and Codeship

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!