Docker 공식 이미지가 운영 체제를 사용하는 이유

Docker 공식 이미지가 운영 체제를 사용하는 이유

Docker 컨테이너는 호스트 커널을 사용하므로 운영 체제와 하이퍼바이저가 필요하지 않습니다. 그렇다면 모든 공식 이미지(예: php, nginx 등)가 이미지에 운영 체제를 사용하는 이유는 무엇입니까?

예: Debian을 사용하는 PHP 7 공식 이미지(Docker Hub에서):

FROM debian:jessie

애플리케이션 컨테이너는 가상 머신이 아니며 운영 체제 격리가 아닌 프로세스 격리를 제공합니다.

내 이해에서 중요한 것을 놓치고 있습니까?

답변1

운영 체제는 단순한 커널 그 이상입니다. 이는 커널과 사용자 공간에 있는 파일 묶음입니다. 따라서 /binand /etc/usr/binin 및 같은 파일은/lib

컨테이너를 실행할 때 일반적으로 프로그램을 실행하려면 지원 코드(공유 라이브러리, 스크립트)가 필요합니다.

항상 필요한 것은 아닙니다. 예를 들어, 프로그램을 작성하는 데 사용하는 경우 go단일 파일 외에는 아무것도 없습니다.

$ cat hello.go
package main

import "fmt"

func main() {
  fmt.Println("Hello, World")
}
$ go build hello.go
$ strip hello

이제 dockerfile은 다음과 같습니다.

FROM scratch
COPY hello /
CMD ["/hello"]

사소한 경우입니다. 이는 단지 하나의 예일 뿐입니다.

하지만 을 실행하려고 하면 php모든 종속성을 알고 있습니까? 때로는 공통 운영 체제의 최소한의 복사본을 도입하는 것이 더 쉽습니다. 그러나 일부 보안 위험이 있습니다.

(당신은 또한 볼 수 있습니다https://www.sweharris.org/post/2016-06-04-small-container/)

관련 정보