iT邦幫忙

2021 iThome 鐵人賽

DAY 26
2
DevOps

這個 site 就是遜啦 - SRE 30 天登大人之旅系列 第 26

Day 26:Container != Docker Container

雖然有點突然,但是我今天想來談談 container。對於大部分的人來說,講到 container 就會想到 docker,然而實際上,docker 並不是可以跟 container 互動的工具的唯一選項。在這個領域裡面,其實還有著很多其他的選項,像是 Buildah、Podman 和 Skopeo 三個工具就很常被拿來一起跟 docker 做比較。

關於 container 本身的概念我就不細談了,畢竟我的了解也不深,網路上就有不少講得更為深入的文章(像是這篇),下面我就簡單介紹一下,平常的開發流程中可以使用的替代工具吧。

Buildah、Podman、Skopeo

首先就來講講這幾個工具到底是什麼吧,這三個都是 RedHat 開發的工具,因此常常被放在一起說明。

首先是 buildah,他是一套專門為了 build image 設計的工具,在使用我想他跟 docker 最大的不同就是,我們再也不需要 root 跟 daemon 了。並且 buildah 不一定要使用 Dockerfile 來 build image,還可以有其他的選項。

而 podman 主要是專注在運行 container 上面,他跟 docker 有幾乎一樣的 CLI 命令,並且一樣是不需要 root 跟 daemon 的。另外還有一點,如同它的名字所示,podman 還提供了一些對 pod 操作的功能,因此在使用 k8s 的環境下,能夠獲得一些方便。

最後是 skopeo,他有點像是原本的 docker inspect 的替代品,但可以做到更多事。像是我曾經遇到的一個需求就是,需要修改遠端 registry 的 image tag,透過 docker CLI 的話,我需要先把 image 拉下來打新的 tag 再推上去,然而 skopeo 是可以直接做到遠端更新 tag 的。

Kaniko

講到 build image 的話,我想另一個也很常聽到的選項是 Kaniko,一個由 Google 釋出的工具,同樣也是以不需要 daemon 作為特色。不過比較特別的是它是專門設計用來跑在 k8s 叢集或是 container 內的。

小結

今天會突然想要講講這個是因為,前幾天寫到在 CI pipeline 內 build image 這件事,當初是使用 docker 完成的,然而其實這種做法有機會帶來一些安全性的問題(網路上應該可以找得到一些討論,像是這個),還有 docker 長期為人詬病的 root 跟 daemon 問題(雖然現在 docker 有提供 rootless mode,但還不是預設)等等,都會在 CI 的流程造成一些問題。

後來我才想到曾經看過有其他工具可以替代,因此在這邊紀錄一下,供大家參考。

參考文章


上一篇
Day 25:Ansible Playbook
下一篇
Day 27:開始撰寫 Playbook
系列文
這個 site 就是遜啦 - SRE 30 天登大人之旅30

尚未有邦友留言

立即登入留言