1

我正在學習自己的碼頭幾周,我認爲是時候在生產(數字海洋)中開展一個項目。我看到了工作流設計的一些問題。 我想爲我的源代碼使用GitHub。詹金斯持續整合。 Maven用於從Dockerfile構建WAR和Image。與詹金斯在生產中的碼頭工作流程設計

這是我的設計。

Docker workflow design with Jenkins on production

但我不覺得幸福:(因爲我看到的下一個問題,我不會是能夠解決這個問題。

  1. 我沒有看到泊塢樞紐在我的設計。Docker應用程序可以運行時不需要推入Docker Hub?如果沒有,我可以添加到Docker Hub?
  2. Jenkins正在生產服務器上運行,我想Jenkins正在消耗CPU和RAM的資源,這是很好的做法嗎?
  3. 詹金斯在一個碼頭集裝箱上運行,這值得嗎?如果沒有。爲什麼Jenkins有碼頭圖像?

請給出一些建議,如果我的設計不適用於生產。

在此先感謝。

+0

1.我無法弄清楚你在說什麼,這聽起來像是你問Docker集線器有鉤子?不,我個人認爲詹金斯不應該在你的生產環境中。 3.值得與什麼相比?擁有自己的虛擬機?服務器?爲什麼不應該在一個容器中。 –

+0

1.我不知道什麼是Docker Hub。只是爲了分享Dockerfile? 2.謝謝。 3.比擁有自己的虛擬機。 –

+0

如果您不知道什麼是'Docker Hub',那麼爲什麼在設計中缺少它?與虛擬機相比,Docker容器更輕量級。考慮到你的問題,在設計解決方案之前,你應該考慮繼續學習Docker是什麼以及它是如何工作的 – agg3l

回答

0

您的答案:

  1. 你需要的東西來存儲您的內置圖像。以後將從生產服務器中取出。你需要一個碼頭註冊表。 Docker Hub只是一個具有許多功能的碼頭註冊表。但是,您可以安裝私人碼頭註冊表。有一個官方的容器。

  2. 不,這不是一個好的做法。正是因爲你暴露的原因,資源和對你的應用程序的干擾,像開放端口一樣,Jenkins獨自留在它的服務器上。

  3. 不要在容器中使用jenkins,因爲在docker內部調用docker非常困難(不是不可能但很難)。除碼頭工人外,這個集裝箱非常好。您可以通過詹金斯的apt install來安裝詹金斯。

問候

+0

我被誤解爲Docker Hub。我以爲它只是存儲在Dockerfile中,但它存儲了完整的映像,這是一個使用300 MB磁盤空間的wildfly映像。它是否正確? –

+0

是的,它是正確的。在Dockerfile的情況下,Docker集線器使用github來存儲它並進行自動構建 –

1
  1. 你需要一個泊塢窗註冊表,這就是內置搬運工圖像存儲的地方。如果你想要私人圖像,你可以託管一個你自己或者支付Docker Hub。見這裏:https://hub.docker.com/billing-plans/

  2. 詹金斯不應該在生產中運行,你的代碼應該是。詹金斯是一個CI工具,可以幫助你建立你的代碼。所以它需要在一個單獨的「Build」機器上。 Jenkins應該構建你的代碼,創建docker鏡像,並將它們存儲在repo中。取決於您的政策如何決定如何以及何時將其推向生產。

  3. 正如@Carlos提到的,如果你想建立碼頭圖像,最好是將Jenkins作爲本機應用運行。爲什麼詹金斯提供碼頭圖像?因爲它更容易嘗試,而不是每個人都需要從其構建的工件中創建碼頭圖像。

0

我描述了一個更精細的流浪/泊塢管道的位置:Using Ansible,Jenkins and docker to build fast test environments

結束語:

一個專業碼頭工人的管道應包括以下步驟:

  1. 基地形象建設 - 從Dockerfile構建鏡像,每當Dockerfile發生變化時觸發此構建。結果可以上傳到公共Dockerhub映像。例如。 Java JDK8 Base Image:yourname/baseimageJRe8
  2. 基本映像配置:構建配置的映像。包括你的java-maven-build工件和配置文件。只用於這一步穩定標記的Docker鏡像:yourname/baseImageJRe8:2.0-stable。結果必須上傳到PRIVATE Docker註冊表中,例如privateregistry.io/yourname/softwareStackMySoftware:2016-10-21-Build-210。
  3. 預置映像部署:從主機上的私有註冊表中提取映像。請記住,只能使用穩定的標記圖像。通過環境變量添加主機特定配置或在Docker卷內添加配置文件。最後啓動Docker容器。

一個專業的詹金斯的設置應包括:

  1. 一詹金斯站長:喬布斯的配置。絕對沒有生成處理器!
  2. 詹金斯奴隸的任意數量:建立碼頭圖像。是的,這個自然使用大量的資源。

正如您可能已經聽說沒有理智的方式在Docker中運行Docker。因此,您需要Docker-Machine(由cli docker-machine設置)或其他安裝了Docker的VM來構建Docker鏡像。

此外,在持續集成環境中構建碼頭圖像會產生大量停止和失敗的構建容器和(懸掛)圖像。您應該在安全的環境中執行此操作,以便在不影響生產部件的情況下安全地清潔機器。

但是有一個很大的誤解,Jenkins或者Docker內部的Jenkins奴隸無法構建Docker鏡像。您只需將Docker Cli安裝在Docker鏡像中並將命令發送到您的主機。例如,檢查這個Jenkins swarm slave圖像blacklabelops/swarm-dockerhost