Process test
假設你的電腦完全沒有安裝 Node.js,但你想要測試 Node 20 的行為
以前可能會想「那我是不是要去官網下載 Node?還要處理版本管理?裝錯版本怎麼辦?」

用 Docker 的話,可以直接這樣做
1 | ## -i :--interactive 啟動互動模式,保持標準輸入的開放 |
這時候我們已經不在我們原本的環境中了,而是「進入」了 container 中,可以在這裡執行 node -v 指令,會發現這個環境中已經安裝了 node,且版本是 20.5.1

ps aux
ps aux 的價值是讓你看清楚「現在這個環境到底有哪些程式正在活著」,學 Docker 不能只會啟動 container,也要知道 container 裡面到底跑了什麼

1 | USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND |
這裡有個重點是 PID 1 -> /bin/bash,這代表 Bash 是這個 container 裡的第一個 process,也是主要 process。如果輸入exit,Bash 結束了,PID 1 也結束了,container 通常就會停止。這就是為什麼很多 container 看起來「一跑就關掉」,因為它的主程式執行完了

測試 node 運作
建立一個測試檔案:
1 | echo "console.log('Hello from container')" > app.js |
這時候是在 container 裡執行 Node 程式,不是在你原本電腦環境裡執行
Alpine Linux 是一個非常輕量的 Linux 發行版,常被拿來做 Docker image 的基底,因為它體積很小,通常比 Ubuntu、Debian 這類 image 小很多

Alpine Linux 使用 ash(Almquist shell)作為預設的 shell,它是一個輕量級的 shell,體積小但功能完整,了解 Alpine 使用 ash,是為了知道「你進到這個 container 後,真正接住你指令的是誰」,這會影響你能用哪些 shell 語法、哪些工具預設存在、以及為什麼有些 bash 寫法會突然不能跑

1 |
|
輸入的指令,都是先交給 ash 解讀,ash 會負責判斷你輸入的是什麼意思,然後幫你執行對應的程式,可以把 ash 想成跟 Alpine container 溝通的翻譯員
1 | ls |




