为什么 Docker 官方镜像使用操作系统

为什么 Docker 官方镜像使用操作系统

Docker 容器不需要操作系统和虚拟机管理程序,因为它们使用主机内核。那么为什么所有的官方镜像(例如:php、nginx 等)都在其镜像中使用操作系统:

示例:PHP 7 官方镜像(来自 Docker Hub)正在使用 Debian:

FROM debian:jessie

应用程序容器不是虚拟机,并且提供进程隔离,而不是操作系统隔离。

我的理解中是否遗漏了一些重要的东西?

答案1

操作系统不仅仅是一个内核;它还不仅仅是一个内核。它是一个内核加上用户空间中的大量文件。所以像/binand/etc/usr/binand中的文件/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/

相关内容