2015-10-14 41 views
1

在Dockerfile中重新啓動是否有意義?在Dockerfile中重新啓動是否有意義?

在我的情況下,我得到了一個Apache的httpd上的Dockerfile。在文件中有一些操作來配置網絡服務器。在文件末尾,它說RUN service apache2 restart。這對我來說似乎很奇怪。

我還是習慣了Docker的概念。我將docker映像的概念化爲安裝cd和docker容器作爲已安裝的機器。 然後在刻錄CD映像之前,Dockerfile本身就是一組指令。 從這個角度來看,在刻錄CD之前重啓apache似乎沒有用處。我對這個概念化是否正確? 或者,否則,我是否正確地聲明該文件最後不需要重新啓動?

回答

2

你是對的 - 這沒什麼意義。它會嘗試啓動一個httpd,所以可能會做一些初始文件設置。

可能看到嘗試在容器中啓動HTTPD,例如, CMD/ENTRYPOINT - 它更有意義,因爲restart意味着真正的「停止和開始」。

停止是多餘的,但無害的,所以這實際上是一個相當普遍的方式啓動httpd,如果你不確定它是否已經運行。

+1

謝謝Sobrique。我認爲這個Apache httpd(d !!)會自動啓動。正如你所建議的那樣,它應該使用'CMD' /'ENTRYPOINT'來啓動deamon,對吧? – codesmith

+0

我通常會自己提出一個'run.sh'腳本,因爲那樣你可以包裝一些預啓動命令。 – Sobrique

0

雖然您可以使用RUN指令來重新啓動服務,如apache2,但由於爲通過Dockerfile創建圖像提供了靈活性,因此不推薦使用此方法。請參閱Dockerfile Best Practices and most common use cases

RUN

可能是最常見的用例的運行是 應用易於得到。當使用apt-get的...

CMD

的CMD指令應該用來運行由 圖像包含的軟件,使用任何參數一起。 CMD應該幾乎總是以CMD [「executable」,「param1」,「param2」...]的形式使用 。因此,如果 圖像用於服務(Apache,Rails等),則可以運行類似CMD [「apache2」,「 - DFOREGROUND」]的東西 。的確,這種形式的 指令被推薦用於任何基於服務的映像。

因此,使用service restartCMD指令會更合適。

+0

這並不能真正回答我的問題。這不是使用run/cmd的問題;這是我的問題,如果在這種情況下重新啓動是有道理的。 – codesmith

+0

據我所知,儘管dockerfile提供了靈活性,但重啓服務在任何指令中都沒有意義。在大多數情況下,如果您正在運行守護進程,建議使用CMD指令。 – askb

相關問題