如何不啟動 container 從 image 中提取可執行檔

::: info 雖然文章內大多指令都是使用 docker,但由於是標準的 OCI image,使用 Podman 也是一樣的效果。 ::: 某段時間內,我會將所有需要執行的 binary 使用 containerize 給打包起來執行,例如: 需要將前端環境給跑起來,我會啟動一個 node 環境的 container: docker run --rm -it --name f2e --net=host -v $(pwd):/app \ docker.io/library/node:20-bookworm \ bash 需要安裝某個基於 golang 的 cli 工具,會使用自己寫的腳本,在 container 內進行建構。 需要透過 Liquibase 來進行 db migration,並不會選擇在本地安裝 maven 環境,一樣是啟動一個 container 來執行。 這麼做的好處是,「目前」大多數的 server/cli tools 至少會編譯 x86 架構下的可執行檔,我只需要確保 container 環境內可以工作,就可以在不同硬體的開發環境下游走。極度偏激的來說,無法確保安裝的 binary 有沒有受過污染,無論開源或閉源與否,也可以透過 Podman 來啟動 rootless 的 container 確保本機的安全。 但有時候會遇到別人打包的 image 十分肥大,即便程式可執行檔只需要幾 MB,編譯後的 image 確有幾百 MB(大多數是腳本語言),蒙生了從 image 中提取 executable 的想法,藉此也學習 docker layer 間的關係。...

2024-04-14 · 4 min · 806 words

Logitech Media Server 遷移紀錄:從 Bare Metal 到 Docker 再到 Podman

2021 年公司開始實施 322 WFH,少了通勤的時間,在家的時間也多了,就想在上班時也能好好對待自己,雖然是木耳但始終會想知道,網路上說的獨立訊源減少雜訊是有多重要,亦或只是玄學?於是誕生了Raspberry pi 4 + piCorePlayer 7.0.0 折騰筆記這篇筆記,到現在這個部落格的累積曝光最高的也是因為這篇吧。 雖然說現在已經出到 8.2.0,但也已經是 2022 年六月的版本了,起初因為 raspberry pi 4b 便宜而使用 piCorePlayer,後來也因 raspberry pi 4b 漲價(漲幅超過 100%)進而不使用 piCorePlayer,不知道官方後來沒更新了是因為樹莓派太穩定,還是真的太貴了…。 從 Bare Metal 到 Docker 當時在學習 HomeLab,首先是從 portainer 開始玩,也因此誕生了 logitech media server 搭配 docker 實現雙機分離。後來也用著同樣的 image 將 lms 建在 k8s cluster 內,遇到的比較髒的問題是 nginx 的 port 用非正式的方式解決。 這時候其實已經不在乎 logitech media server 是否帶來更好的音質了,也沒有連動 NAS 的音樂,主要是使用 Youtube Plugin 播放 Youtube 上的內容(即便有訂閱 Youtube Premium)。以及使用 Podcast Plugin 收聽 podcast。 使用 docker 的好處不外乎一個字,省,於是我把 raspberry pi 4b 也給賣了。...

2023-02-24 · 2 min · 231 words

logitech media server 搭配 docker 實現雙機分離

前言 雖然官方 releases 頁面似乎還沒發布,不過前一陣子把 piCorePlayer 升級到 8.1.0,看起來似乎還是 unstable,懶得倒版回去 8.0.0,趁這個機會把一直想玩的雙機留兜起來。 雙機顧名思義為 client 與 server 分開在兩台機器上,piCorePlayer 的 client 為 Squeezelite,server 則為 Logitech Media Server,事實上在 windows 上也有 client Squeezelite-X可以玩,預期中的最終成品將會是「三機流」吧 XD LMS 解決方案 採用 lms community 的 docker image lmscommunity/logitechmediaserver 作為這次 server 端的 service。 安裝流程 此篇文章使用 portainer 作為 GUI 方便演示,若熟悉 docker 與 k8s 的可以自行下指令安裝。 首先我把我的音樂都存放在 NAS 上,先將 music 資料夾給共享出來 接著到 portainer 中建立三個 volume a. lms-music 輸入在 NAS 分享出來的目錄與使用者、密碼,建立一個 cifs mounted volume b. lms-config c. lms-playlist 接著到 stack 中,複製貼上官方的 docker-compose,若 portainer 已經佔用了 port 9000,則需要更改暴露的 port port:port/tcp 並追加環境變數 HTTP_PORT=port,我最終的 stack 設定為: lms: image: lmscommunity/logitechmediaserver volumes: - lms-config:/config:rw - lms-music:/music:ro - lms-playlist:/playlist:rw - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro ports: - 9002:9002/tcp - 9090:9090/tcp - 3483:3483/tcp - 3483:3483/udp environment: - HTTP_PORT=9002 restart: always 點下 Deploy the stack 後就完成了 可以到 container 下看是否已經啟動完成了,並稍微記一下 container 的 hash,在稍後 windows 的設定中會出現。 piCorePlayer 設定 進入到 piCorePlayer web 中的 Squeezelite Settings 設定頁面,並在 LMS IP 中輸入 portainer 的 ip 位置後點擊 Save,大功告成。 接著到 portainer_id:9002 中就可以看到 lms 的畫面了 Squeezelite-X 設定 windows 中的 Squeezelite 設定更為簡單,到 Microsoft Store 取得並安裝 Squeezelite-X後打開,整個 logitech media service 似乎已經整合好 service discovery 了,直接在設定頁中的 Host 中看到剛剛起好的 docker container name 結語 lms 社群看起來還是有很多人在維護,設定起來十分簡單,數位流追求的就是方便...

2021-12-04 · 1 min · 199 words