現在是時候使用Docker安裝一個多節點Codenvy On-Prem和Eclipse Che了。
Docker容器包裝一塊軟件到一個文件系統,這里面包含一切它運行的要素:code、 runtime、system tools以及libraries。不管運行環境如何,容器總是保證相同的運行。容器將打包和部署轉化為獨立單元,使軟件開發團隊更容易提高DevOps效率。
Codenvy一直使用容器支持builds, runners以及 workspaces好幾年了。我們現在支持在容器內運行Codenvy。
Eclipse Che
Eclipse Che是一個現代的、開放源代碼的軟件開發環境。它是一個通過提供結構化的工作區、項目輸入、模塊化擴展插件來支持Codenvy的引擎。Che可以用作桌面IDE,RESTful工作空間服務器,或作為一個創建新的工具SDK。我們現在支持一個有標簽的Docker images啟動一個默認Eclipse Che。
容器的容器是無狀態的,重復運行將清除保存在容器內數據。你可以保存你的工作區到外部容器的external volume。
如果你不想麻煩安裝volume,還可以snapshot容器,并且保存一個新的image到本地磁盤。然后你可以啟動保存的圖像,它重啟容器在最后保存的狀態。這個過程是有狀態的,但你必須等待snapshot 寫和讀操作完成。
Multi-Node Codenvy On-PremCodenvy On-Prem 是Codenvy的一個版本,你可以運行在自己的服務器上。也可以作為一個單節點(在一個主機上)或作為一個多節點系統運行 (服務跨集群以及分布在不同的主機上)。對我們來說,簡單和快速安裝、升級、備份,并定制Codenvy On-Prem一直是我們的最高目標。
你現在可以使用Docker安裝Codenvy On-Prem多節點。
雖然這安裝技術是生產測試,請閱讀下面的報告,你可以熟悉一下這里面的一些特定的訪問控制和使用Docker可能會遇到的風險。這個安裝程序只支持Linux。
Some Special Codenvy MagicCodenvy On-Prem需要八個節點。有了這個安裝程序,我們在它們自己的容器啟動每個節點。八大容器都是相同的——從一個specialized CentOS 7 image的實例化。空CentOS容器啟動后,我們調用Codenvy’s bootstrap installer,依次進行,Puppet下載安裝并配置Codenvy。
Codenvy需要每個節點配置一個匹配字符串模式的hostname。但是為了各種容器看到對方,存在于每個容器的/etc/hosts文件必須隨著其他容器的IP地址更新。這些IP地址將在容器啟動之后才會知道。所以安裝程序有一些額外的邏輯啟動容器,發現它們的IP地址,并執行到每個容器,并隨著其他容器的IP地址更新/etc/hosts文件。我們執行這項工作來創建一個可發現的、連接網絡的容器,驗證之后,Codenvy引導安裝開始。當重啟已經保存的容器,我們做一個類似的進程利用任一個新的IP地址更新每個容器。
看似簡單的容器。從表面上看,它們是很小的部署單位。你從一個image激活一個容器就搞定一切。容器執行通常是無狀態的,每個執行不記得之前的執行。這意味著內部狀態數據,比如我們在LDAP和MongoDB對用戶的存儲必須具體化。
你可以從一個用于未來運行的容器創建新的images。我們已經嵌入停止和重啟選項到安裝腳本里,這會讓你的容器狀態作為layer寫進image。在將來的版本中,我們將支持容器編排器Docker Swarm,這將給你另外一種方法具體化內部數據。
Security & Stability ConsiderationsCodenvy On-Prem的Docker安裝不支持單節點配置。單節點Codenvy打包非常打,而且Docker不適合在一個容器中運行數十個微服務。
Codenvy On-Prem multi-node所有的容器必須在特權模式下運行,這種模式允許容器以near-root訪問進程和運行在其主機上的文件。這是必要的,有兩個原因:
1、我們的runner nodes必須在Docker里面運行Docker容器。
2、我們使用Puppet執行內部配置管理,它需要訪問所有節點,甚至一些等底層主機如AppArmor或SELinux的文件。
特許模式在不同的操作系統下不穩定。你可以嘗試一下。
英文原文鏈接:http://blog.codenvy.com/eclipse-che-codenvy-docker/