Docker 컨테이너의 Linux 기본 이미지를 Docker 이외의 환경에서 사용할 수 있나요?

Docker 컨테이너의 Linux 기본 이미지를 Docker 이외의 환경에서 사용할 수 있나요?

컨테이너 공유 머신의 OS 시스템 커널

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 커널에 대해 특정 사항을 가정합니까?

답변1

Debian이나 Alpine과 같은 Linux의 Docker 기본 이미지에는 커널이 포함되어 있지 않다는 것이 사실인가요?

이것은 일반적으로 사실입니다. 알파인에 대한 언급은 다음을 기반으로 함을 보여줍니다.미니 루트 파일 시스템커널이 포함되어 있지 않습니다.

이러한 기본 이미지에 사용된 rootfs 빌드를 Docker 외부에서 사용할 수 있나요?

분명히 다른 컨테이너 환경에서 직접 사용할 수 있습니다.팟캐스트. 포함된 파일 시스템은 다른 곳에서도 사용할 수 있습니다.

질문에 표시된 것처럼 Alpine을 예로 들면 도커 이미지는 파일의 내용에 지나지 않습니다 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

chrootdocker에 의해 수행되는 네트워크 격리와 같이 모든 격리가 설정되는 것은 아닙니다 .

Docker 자체는 콘텐츠를 레이어로 패키징하므로 ​​컨테이너 환경 외부(예: docker 또는 podman)에서 docker 이미지를 사용하려면 레이어를 디렉터리 트리에 다시 수동으로 수집해야 합니다.

답변2

Debian이나 Alpine과 같은 Linux의 Docker 기본 이미지에는 커널이 포함되어 있지 않다는 것이 사실인가요?

그렇습니다.컨테이너즉, 운영 체제 커널에 의존하여 모든 작업을 완료합니다. 자체 커널은 쓸모가 없으며 작동하지 않습니다. 컨테이너는 가상 머신이 아니라 커널 네임스페이스입니다!

이러한 기본 이미지에 사용된 rootfs 빌드를 Docker 외부에서 사용할 수 있나요?

예, OCI 런타임은 표준화되어 있습니다. 일반적으로 Docker 컨테이너는 Podman 및 Kubernetes와 같은 대규모 오케스트레이션 도구 내에서 작동합니다.

이러한 Linux 버전은 Docker 커널에 대해 특정 사항을 가정합니까?

예, 일종의 완전한 네임스페이스 지원입니다. 다행히도 이는 Linux 2.6부터 존재했기 때문에 그다지 구체적이지 않습니다.

물론, 컨테이너 내의 프로그램이 사용하는 모든 기능은 커널에 존재해야 합니다. 따라서 Linux 5.10에 도입된 시스템 호출이나 /sys/ 항목을 사용하는 프로그램이 내부에 있는 경우 이를 실행하려면 Linux 5.10 커널이 필요합니다. 그러나 이는 컨테이너화 여부에 관계없이 모든 운영 체제에서 실행되는 모든 프로그램에 대해 동일합니다.

관련 정보