走向 Docker

4 贊 回覆發表於2015-04-27

[TL;DR] 這是系列的第一篇文章,這系列講述了我的公司如何把基礎服務從PaaS遷移到Docker上。如果你願意,你可以直接跳過介紹(這篇文章)直接看技術相關的話題(連結在頁面的底部)。


上個月,我一直在折騰開發環境。這是我個人故事和經驗,關於嘗試用Docker簡化Rails應用的部署過程。

當我在2012年建立我的公司 – Touchware時,我還是一個獨立開發者。很多事情很小,不復雜,他們不需要很多維護,他們也不需要部署到很多機器上。經過過去一年的發展,我們成長了很多(我們現在是是擁有10個人的團隊)而且我們的服務端的程式和API無論在範圍和規模方面都有增長。

第1步 - Heroku

我們還是個小公司,我們需要讓事情執行地儘可能平穩。當我們尋找可行的解決方案時,我們打算堅持用那些可以幫助我們減輕對硬體依賴負擔的工具。由於我們主要開發Rails應用,而Heroku對RoR、常用的資料庫和快取(Postgres/Mongo/Redis等)有很好的支援,最明智的選擇就是用Heroku 。我們就是這樣做的。

Heroku有很好的技術支援和文件,使得部署非常輕鬆。唯一的問題是,當你處於起步階段,你需要很多開銷。這不是最好的選擇,真的。

第2步 - Dokku

為了嘗試並降低成本,我們決定試試Dokku。Dokku,引用GitHub上的一句話

Docker 驅動的 mini-Heroku,只用了一百來行的 bash 指令碼

我們啟用的DigitalOcean上的很多臺機器,都預裝了Dokku。Dokku非常像Heroku,但是當你有複雜的專案需要調整配置引數或者是需要特殊的依賴時,它就不能勝任了。我們有一個應用,它需要對圖片進行多次轉換,我們把我們Rails應用的託管到基於Dokku的Docker容器,但是無法安裝一個適合版本的imagemagick到裡面。儘管我們還有很多應用執行在Dokku上,但我們還是不得不把一些遷移回Heroku。

第3步 - Docker

幾個月前,由於開發環境和生產環境的問題重新出現,我決定試試Docker。簡單來說,Docker讓開發者容器化應用、簡化部署。由於一個Docker容器本質上已經包含專案執行所需要的所有依賴,只要它能在你的筆記本上執行地很好,你就能確保它將也能在任何一個別的遠端伺服器的生產環境上執行,包括Amazon的EC2和DigitalOcean上的VPS。

就我個人的看法來說,Docker 特別有意思的原因是:

  • 它促進了模組化和關注點分離:你只需要去考慮應用的邏輯部分(負載均衡:1個容器;資料庫:1個容器;web伺服器:1個容器);
  • 在部署的配置上非常靈活:容器可以被部署在各種硬體上,也可以容易地重新部署在不同的伺服器和不同的提供商;
  • 它允許非常細粒度地優化應用的執行環境:你可以利用你的容器來建立映象,所以你有很多選擇來配置環境。

它也有一些缺點:

  • 它的學習曲線非常的陡峭(這是從一個軟體開發者的角度來看,而不是經驗豐富的運維人員);
  • 搭建環境不簡單,尤其是還需要自己搭建一個私有的registry/repository (後面有關於它的詳細內容)。

下面是一些提示。這個系列的最後一週,我將把他們和一些新的放在一起。


在下面的文章中,我們將看到如何建立一個半自動化的基於Docker的部署系統。


via: http://cocoahunter.com/2015/01/23/docker-1/

作者:Michelangelo Chasseur 譯者:mtunique 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出

 

相關文章