過去我常用 VirtualBox 管理虛擬機,為的就是經常要一個「方便、乾淨的環境」實驗。但真的嗎? 回顧一下幾個問題:
這幾年都是虛擬機與容器化技術並存,不論是 Docker 或 Kubernetes,拿來測試一些「廣受歡迎的服務」是很方便的。如果之前經常要一個「方便、乾淨的環境」為的就是這些廣受歡迎的服務,合而為一何樂不為?因此虛擬機的使用就有逐漸減少的驅勢。但還是有無可取代的,究其根本,是否適合以容器化取代虛擬機,有一個關鍵因素,那就是「有沒有一個常駐服務在等候請求」?像 Nginx、GitLab、Jenkins、SonarQube、Nexus、ELK、PostgreSQL 這些都有,所以它們都很理所當然地用輕量化的容器;但純粹的作業系統呢?Linux Shell 呢?YUM 呢?似乎就沒有適合的 Image 可用,要不就是當做 Base Image 自己再加工改造,要不就是回歸虛擬機。
現在進入正題(終於),對於純粹作業系統(無常駐服務在等候請求)的 Image,因為一開完機就做完所有事情,在 Docker 的世界裡就會直接停掉,在 Kubernetes 的世界裡就會不停地重啟,所以並不可用。但我們能不能略加修改,在開完機之後給一件「很輕鬆又永遠做不完的事」呢?技術永遠都是說破了就不值錢的東西,在 Docker 我們可以很簡單地:
一行指令解決,其實關鍵就是最後在指定 centos:7 這個 Image 之後的 sleep infinity 指令,就是那「很輕鬆又永遠做不完的事」。在 Kubernetes 稍微麻煩了些:
步驟是多了點,似乎也不太優雅,但意思還清楚吧?在摸得比較熟之後,我偏好下面這個稍微精簡一點的方法:
希望未來 Kubernetes 也能進步到像 Docker 一樣的簡潔。