2023 iT邦鐵人賽 Day 4 - 空的容器

前言

大家對作業系統應該不陌生,像是 Windows、macOS、Linux。這些作業系統是電腦設備最底層最基本的運作系統,電腦上所有的操作與視覺上的回饋,都必須透過作業系統的運作。

空的容器

當容器被製造出來時,它可以是空的容器,也可以是裝載著應用程式的容器。在這裡指的空的容器,並不代表容器裡什麼都沒有,這裡所指的「空」是指他並沒有裝載額外的應用程式,那他到底有什麼?

我們可以把空的容器想像成是一台新的電腦主機,裡面除了本來就存在的內建檔案,其他你想要的應用程式,像是 Discord、LoL 都還沒裝,這時的主機,就是空的狀態,也就是上面所指的,空的容器,空的狀態。

話雖如此,但容器的空狀態又再更單純些。容器的空,指的是容器裡,並未包含任何應用程式與服務,而是只有「作業系統」而已。

在前一篇我們有提到多種作業系統,但在容器裡,最主要的作業系統是 Linux,而 Linux 又分為多種版本,像是 debian、ubuntu、alpine等,至於容器內的作業系統是哪種 Linux 就取決映像檔,因為容器的建立是依照映像檔,映像檔說它 (容器) 是什麼,它就得是什麼。

不過,在容器裡的作業系統,其實又不是完整的作業系統,而是只有最小限度的作業系統,也就是只有「殼」的部分、並沒有「核心」的部分

所以,一個空的容器,他並不會什麼都沒有,至少它仍是一個含有 Linux 作業系統、但沒有應用程式與服務的環境。

動手 Try Try

我們可以試著建立一個空的容器:

1
docker run -d --name empty_alpine_container alpine tail -f /dev/null

然後使用 docker container ps 查看運行中的容器,其中包含 empty_alpine_container

最後面的 tail -f /dev/null 是為了讓空的容器能保持運行所使用的指令,不然會因為容器內並沒有任何應用程式或服務讓容器有持續運行的必要時,容器就會自動退出,停止運行。

以下為不使用 tail 時,建立空的容器的情況:

先建立容器

1
docker run -d --name empty_alpine_container alpine 

這時會發現,終端機並沒有回傳容器 ID,但我們可以用 docker container ls -a 發現, empty_alpine_container 有存在,狀態為 Exited

總結

經過這麼長篇幅的解釋,我們可以知道空的容器其實:

  1. 並非什麼都沒有
  2. 含有部分 Linux 作業系統,但無應用程式

但,為什麼是 Linux ? 為什麼不是 Windows ? 或其他的作業系統 ? 那為什麼是只有部分的 Linux ?

這些問題會在未來幾天,一一有所解答。