2016-09-18 43 views
2

我正在開發Ruby on Rails,並開始使用Docker進行一個月的部署。如何測試和部署Docker生產映像?

以下是我正在處理的步驟。

  1. 開發我的筆記本電腦
  2. 推gitlab
  3. 建立一個單一的形象,包括測試和生產寶石
  4. 針對這一形象
  5. 運行rspec的
  6. (通過)推到註冊表,(失敗)丟棄圖像

有了這個工作流程,我會我擁有一張具有所有測試,開發和生產寶石的圖像。

,我從我的膝蓋頂與許多人交談

  1. 開發
  2. 推找到gitlab
  3. 構建測試圖像(所有必要測試寶石)
  4. 運行工作流rspec針對測試圖像
  5. (通過)構建另一個圖像部署沒有測試寶石和推到碼頭註冊表,(失敗)丟棄圖像

用這種方法,我認爲這違反了Docker的目的(被測試的圖像應該與部署的圖像無關)。

如何指定和實現測試和推送生產映像的方法?

回答

3

正如Alexei Ledenev在「Testing Strategies for Docker Containers」中提到,你的第一個方法有顯著的缺點:

  • 增加圖像尺寸 - 因爲它包含的測試工具,需要的軟件包,測試腳本,甚至測試數據
  • 污染圖像運行時環境與測試特定配置,甚至可能引入不需要的依賴性(集成測試要求)
  • 我們還需要決定如何處理測試結果和日誌;在何處以及如何導出它們

一種不同的方法(靠近你提到的第二個)正在「測試感知集裝箱」:

我們相信泊塢窗應的docker-test部分容器管理生命週期。

如前所述,Docker有一個非常有用的ONBUILD instruction。這條指令允許我們在成功構建時觸發另一個構建指令。
基本思想是在運行docker-test命令時使用ONBUILD指令。

通過docker-test命令執行的流程:

docker-test將搜索應用Dockerfile ONBUILD指令和會...

  • 產生從原來Dockerfile
  • 臨時Dockerfile.test與支持的附加選項執行docker build -f Dockerfile.test [OPTIONS] PATH docker build命令:-test將自動附加到tag選項
  • 如果建造成功,執行docker run -v ./tests/results:/var/tests/results [OPTIONS] IMAGE:TAG-test [COMMAND] [ARG...]
  • 刪除Dockerfile.test文件

(該文章接着描述一個集成測試容器)