2016-09-26 81 views
3

假設我的安裝說明如下:如何在Dockerfile中安裝需要重啓的東西?

  1. 做些什麼。
  2. 重新啓動您的機器。
  3. 做點別的。

我該如何在Dockerfile中表達這一點?

+0

您不需要重新啓動,因爲它在啓動泊塢窗容器時進行乾淨啓動。 你能解釋一下爲什麼你需要重新啓動嗎? – AndrewL

+0

因此,每次在dockerfile中調用「RUN」時,是否好像「機器」剛剛重新啓動? –

+0

除非您保存碼頭集裝箱的狀態。這是一個乾淨的啓動後,它可以啓動它從每次清潔狀態,或增量保存狀態。 – AndrewL

回答

2

這完全取決於他們爲什麼需要重新啓動。對於Linux來說,重新啓動機器通常會指示內核修改,儘管它可能更簡單,如更改用戶權限(這將通過註銷並重新處理)。如果安裝嘗試對內核進行操作系統級別更改,則如果在容器內完成,則該操作應該失敗。默認情況下,容器將隔離並限制應用程序可以對正在運行的主機操作系統執行哪些操作,從而影響主機或其他運行中的容器

如果重新啓動強制重新啓動應用程序服務,則應該認識到此設計無法很好地映射到容器,因爲每個RUN命令都在隔離的環境中運行該命令。通過僅運行該命令,這也表示通常在OS啓動時啓動的任何OS服務(cron,sendmail或您的應用程序)都不會在容器中啓動。因此,除了重新啓動任何相關服務之外,還需要找到一種運行安裝命令的方法。

我能想到的最後一種情況是他們希望不同的用戶權限對登錄用戶生效。在這種情況下,下一個RUN命令將運行所請求的命令,並對之前的RUN命令進行任何更改的訪問。因此,您無需執行任何特定的重新啓動操作,只需執行安裝步驟,就好像每步之間有完全重新啓動一樣。

+0

您可以運行一個命令,提交圖層,然後在圖像中運行新命令時重新開始。 – enderland

+0

使用Dockerfile來構建圖像,這正是每條RUN線所發生的情況。 Dockerfile只是使結果易於重現。使用提交步驟手動構建映像類似於在cli上運行50條命令而不是編寫shell腳本,最終您會弄亂列表中的某個命令並且不知道哪個命中了。 – BMitch

相關問題