Почему в официальных образах Docker используется операционная система

контейнерах Docker не нужны операционная система и гипервизор, потому что они используют ядро ​​хоста. Итак, почему все официальные образы, такие как: php, nginx, .. все, что используют операционную систему в своих образах:

Пример: официальный образ PHP 7 (из Docker Hub) использует Debian:

FROM debian:jessie

Контейнеры приложений не являются ВМ и обеспечивают изоляцию процессов, а не ОС.

Я не понимаю чего-то важного?

0
14.08.2016, 17:11
1 ответ

Операционная система - это больше, чем ядро; это ядро ПЛЮС тонна файлов в пользовательском пространстве. То есть такие вещи, как файлы в /bin и /etc и /usr/bin и /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, знаете ли вы все зависимости? Иногда проще поставить минимальную копию общей ОС. Но это связано с некоторыми рисками безопасности.

(see also https://www.sweharris.org/post/2016-06-04-small-container/ )

2
28.01.2020, 02:34

Теги

Похожие вопросы