2017-02-12 38 views
1

我開發了一個nodejs應用程序,它在一端提供https(http/2)接口並與SQL Server數據庫進行通信, SMTP郵件發件人和基於http的郵政編碼查詢服務。實質上它是一個基於Web的單頁面應用程序。我可以告訴Docker在我的文件系統中放置只讀和可讀寫部分的位置

這運行在一個坐在公司局域網上的小樹莓pi/2上,在局域網上的windows計算機上與數據庫交談。其他服務是外部的。應用程序保持私密是很重要的。

這是這個應用程序的早期版本,所以會受到一些改變。其中最複雜的將是如何升級到更新版本的節點而不會停機很長時間。

昨天我遇到了Docker,更具體的一篇關於如何在樹莓派上設置Docker的文章。它讓我很興奮,這可能是快速更新我的應用程序的解決方案。如果我將節點和我的應用程序打包到Docker容器中,我可以預先爲最新版本的節點和我的應用程序構建容器,然後測試它們並非常迅速地安裝它們。

目前,Raspberry Pi文件系統的SD卡被配置爲4個分區。 1)是啓動分區,2)是文件系統的根。這兩個都是隻讀的,3)是pi用戶家的分區,4)是/ var後兩個是可讀寫的。

原因是安裝的軟件除了日誌(進入/ var)之外都是隻讀的。在斷電時防止SD卡損壞。我確實有一個用戶在只讀區域有一個主目錄,並且它的設置使得登錄可以將文件系統rw直到他再次註銷。此用戶是我運行命令來安裝最新的生產版本的位置。一些測試和開發可以在pi用戶中進行,這就是爲什麼該區域是可讀寫的。

我剛剛在運行Debian的桌面(amd64)機器上安裝了Docker。據我所知,所有Docker文件都位於/ var/lib/docker下的某處。這包括組成加載圖像的所有文件。雖然有一個/ etc/docker目錄,但其中的唯一配置似乎是一個關鍵。

所以我的問題是,有沒有一種方法來配置Docker,使得容器映像實際上可以位於當我登錄到帳戶時在讀寫之間切換的區域,並且在我註銷時再次變爲只讀,但是寫入的容器部分(可能沒有 - 見下一段)坐落在/ var。

我的應用程序實際上將日誌寫入標準輸出和標準錯誤。目前他們正在由PM2管理,PM2會在他們退出時重新啓動它們,但也會將日誌寫入一對旋轉的日誌文件。不幸的是,我有應用程序失敗,並且PM2還沒有重啓的情況下

我懷疑Docker也可能被設置爲自動重啓一個失敗的容器,並且我也可以設置它,以便內容stdout和stderr重定向到Docker容器之外的文件中。這可以讓以後更容易查看它們。這可能嗎?事實上,如果可能的話是好的做法,還是我會更好地繼續在Docker容器中使用pm2

回答

2

我剛剛在運行Debian的臺式機(amd64)上安裝了Docker。據我所知,所有Docker文件都位於/ var/lib/docker下的某處。這包括組成加載圖像的所有文件。雖然有一個/ etc/docker目錄,但其中的唯一配置似乎是一個關鍵。

所以我的問題是,有沒有一種方法來配置Docker,使得容器映像實際上可以位於當我登錄到帳戶時在讀寫之間切換的區域,並且在我註銷時再次變爲只讀,但是寫入的容器部分(可能沒有 - 見下一段)坐落在/ var。

您可以通過設置守護進程的--graph(或短-g)標誌更改從/var/lib/docker泊塢窗根目錄下的任何其他目錄。當使用systemd,你可以使用這個簡單的插入式(例如,在/etc/systemd/system/docker.service.d)完成:

[Service] 
ExecStart= 
ExecStart=/usr/bin/dockerd --graph=/path/to/readonly/dir 

的具體步驟可能會因您的泊塢窗版本和Linux發行版而有所不同。有關更多信息,請參閱the documentation

但是,這將影響圖像和容器文件系統存儲。有一個只讀和另一個可寫,是不可能的這種方式。

我的應用程序實際上是將其日誌寫入stdout和stderr。目前他們正在由PM2管理,PM2會在他們退出時重新啓動它們,但也會將日誌寫入一對旋轉的日誌文件。不幸的是,我有應用程序失敗,並且PM2還沒有重啓的情況下

我懷疑Docker也可能被設置爲自動重啓一個失敗的容器,並且我也可以設置它,以便內容stdout和stderr重定向到Docker容器之外的文件中。這可以讓以後更容易查看它們。這可能嗎?事實上,如果有可能是很好的做法,或者我會做的更好,以繼續使用PM2泊塢窗容器

裏面你可以--restart=on-failure啓動容器(見more on restart policies)。這將導致Docker引擎在存在非零退出代碼時自動重啓容器。或者,使用--restart=always讓容器重新啓動,無論退出代碼如何。就個人而言,我建議不要在Docker內部使用PM2進行簡單的重啓,除非您需要任何PM2的附加功能。

關於日誌記錄:默認情況下,Docker將捕獲容器主進程的所有STDOUT和STDERR輸出,並將它們存儲在自己的日誌文件中(默認情況下,在/var/lib/docker/containers/<CONTAINER-ID>/<CONTAINER-ID>-json.log中)。您可以使用docker logs <CONTAINER-NAME>查看它們。

如果這不是您想要的,您可以通過在啓動容器時設置--log-driver標誌(例如,到--log-driver=syslog)來更改日誌記錄機制。再次請參閱the documentation瞭解更多信息。

相關問題