Kernel

Docker 容器的 Linux 基礎鏡像是否可以在 Docker 以外的環境中使用?

  • May 7, 2022

容器共享機器的作業系統系統核心

https://www.docker.com/resources/what-container/

如果容器共享機器的作業系統系統核心,那麼像 Debian 或 Alpine 這樣的 Linux 的 Docker 基礎鏡像中是否沒有包含核心?這些基礎鏡像中使用的rootfs 建構可以在 Docker 以外的環境中使用嗎?

Alpine Linux 的 Dockerfile 展示了一個例子,

FROM scratch
ADD alpine-minirootfs-3.14.6-x86_64.tar.gz /
CMD ["/bin/sh"]

這些 Linux 版本是否假設了 Docker 關於核心的任何特定內容?

像 Debian 或 Alpine 這樣的 Linux 的 Docker 基本映像中確實沒有包含核心嗎?

這通常是真的。正如您對 alpine 的引用所示,它們基於不包含核心的迷你根文件系統。

這些基礎鏡像中使用的 rootfs 建構可以在 Docker 以外的環境中使用嗎?

顯然它們可以直接用於其他容器環境,如podman。它們包含的文件系統也可以在其他地方使用。

以 Alpine 為例,正如您在問題中顯示的那樣,docker 映像只不過是alpine-minirootfs-<version>.tar.gz文件的內容。如果您從這裡下載該文件並解壓它,您可以立即chroot進入該目錄以將其用作臨時環境。

wget https://dl-cdn.alpinelinux.org/alpine/v3.15/releases/x86_64/alpine-minirootfs-3.15.4-x86_64.tar.gz
mkdir foo
cd foo
tar -xf alpine-minirootfs-3.15.4-x86_64.tar.gz
chroot . /bin/sh

Notechroot沒有設置 docker 所做的所有隔離,例如網路隔離

Docker 本身將事物打包成層,因此要在容器環境(如 docker 或 podman)之外使用 docker 映像,您需要手動將這些層一起收集到一個目錄樹中。

引用自:https://unix.stackexchange.com/questions/701715