Kernel
Docker 容器的 Linux 基礎鏡像是否可以在 Docker 以外的環境中使用?
容器共享機器的作業系統系統核心
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
Note
chroot
沒有設置 docker 所做的所有隔離,例如網路隔離Docker 本身將事物打包成層,因此要在容器環境(如 docker 或 podman)之外使用 docker 映像,您需要手動將這些層一起收集到一個目錄樹中。