相信有那麼一天,我們將可以像畢凱艦長一樣用嘴巴叫所有主機做事!


Cheng Wei Chen



Synology NAS 的 Docker 兩三事

在之前的文章有稍微提過,目前個人在 Synology NAS 上透過 Docker 架設了許多服務,也算是累積了一些在它上面使用 Docker 的經驗,此文將簡單的記錄一些 Synology NAS 上有關的 Docker 兩三事。

安裝與使用

要在 Synology NAS 上安裝 Docker 非常容易,直接在 Synology DSM 後台的「套件中心」安裝即可。安裝成功即可看到 DSM 中多了 Docker 的 GUI 可以使用。

個人覺得 Synology 做出來的 Docker GUI 其實滿好用的,私心希望他們能將它改寫另外打包成 opensource 釋出。


在 DSM 安裝完 Docker 之後,除了可以透過 GUI 的方式操作 Docker,若你 SSH 登入 NAS,會發現也可以直接在 SSH 中使用 Docker 指令。個人後來要啟動新的 Container 時,幾乎都是直接 SSH 登入,在 command line 中輸入 Docker 指令。

Docker 版本與相關檔案位置

NAS 若是安裝 DSM 5.2,則安裝的 Docker 版本會是 1.6.2。如果最近有升級到 DSM 6.0,安裝的 Docker 版本則是 1.9.1

因為 NAS 上的 Docker 是透過「套件中心」安裝,所以安裝的路徑與啟動方式是有經過 Synology 官方精心調配,目前已知有幾個重要的位置:

docker.sock

如果你有打算使用 docker in docker,或希望在 Container 中操控 NAS 上的 Docker,那一定會需要知道 docker.sock 的位置。

docker.sock 存放的路徑是 /run/docker.sock

我目前將 GitLab 安裝在 NAS 上,就是讓 GitLab-Runner 直接操控 NAS 的 Docker 來進行 CI / CD。

docker client

會存放在 /var/packages/Docker/target/usr/bin

其他 Docker 相關檔案的位置

例如 docker pull 下載的 Image 或運行中的 Container 存放位置。

存放的路徑是 /volume1/@docker

啟動 Docker daemon 的 script

NAS 上的 Docker 的啟動流程有經過 Synology 官方精心調配,一部分的原因是他們要搭配他們家的 Docker GUI,所以有一些特別的 scripts。

存放的路徑是 /var/packages/Docker/scripts

有興趣深入研究的人可以先查看 start-stop-status 這一支 script,還滿有趣的,不過如果要惡搞之前請先三思,因為個人曾經想要修改 script,最後的下場就是 Docker GUI 整個炸掉,變成只能 SSH 登入用 command line 控制 Docker,最後不得已只好整個 NAS 還原才順利修復。

貼心小提醒,這些 scripts 都有註明 # Copyright (c) 2000-2015 Synology Inc. All rights reserved.,所以自己私下偷偷的玩一玩就好,而且玩一玩很容易玩壞,所以務必自行小心處理,玩壞了請自行處理。

Docker 引起的 NAS 異常重開機

最後再提供一個使用狀況供大家參考,請參閱下面這篇在 Synology 討論區上的內容,當你充分且大量的在 NAS 上使用 Container 時,可能會發生 NAS 忽然自己重開機,並且回報發生了電力異常問題。但其實這並非電力異常,而是 Docker 或 Docker GUI 導致某種異常狀況,於是觸發 NAS 的重開機制。詳情可以參閱討論區的內容,尚不知道升級到 DSM 6.0 是否能解決此問題,但我在 DSM 5.2 上已經發生數次異常重開機的狀況,還因此搞壞了硬碟,所以此問題不容小覷啊!



4 則留言:

  1. 可以請問你大概都是裝什麼docker應用會導致重開機嗎?

    回覆刪除
    回覆
    1. 我在上面運行了滿多的 Container,概略地列一下:
      1. GitLab
      2. Postgresql (GitLab 用)
      3. Redis (GitLab 用)
      4. GitLab Runner *2
      5. Redmine
      6. Postgresql (Redmine 用)
      7. Docker registry
      8. Docker registry GUI
      9. Nginx (當 load balance)
      10. ubuntu with cron
      11. beanstalkd console
      12. Kanboard (KanBan tool)

      以下的數量會動態變動
      13. php * 2 ~ 3
      14. mysql * 2 ~ 3
      15. nginx * 2 ~ 3
      16. nodejs * 2 ~ 3
      17. elasticsearch * 2 ~ 3

      不過我覺得應該是 GitLab 造成的問題,因為我的 Runner 會直接操作 NAS 的 Docker,所以會隨著 CI / CD 的狀況,動態的新增、運行、刪除 Container,若同時又使用 DSM 裡面的 Docker GUI,似乎就容易發生重開機的狀況。(至少我這幾次都是發生在我正在使用 DSM 的 Docker GUI。)

      刪除
  2. 那...您那台裝的RAM是多少?!

    回覆刪除
    回覆
    1. 不好意思,上次回復你是 4GB,但後來查了一下,其實是 6GB。

      刪除

不歡迎留言打廣告,所以有進行留言管理,敬請見諒。