Um sistema operacional é mais que um kernel; é um kernel MAIS uma tonelada de arquivos no espaço do usuário. Então, coisas como os arquivos em /bin
e /etc
e /usr/bin
e /lib
Quando você executa um contêiner, seu programa normalmente requer que o código de suporte (bibliotecas compartilhadas, scripts) seja executado.
Isso nem sempre é obrigatório. por exemplo, se você usa go
para escrever seu programa, você não pode ter nada, exceto o arquivo único
$ cat hello.go
package main
import "fmt"
func main() {
fmt.Println("Hello, World")
}
$ go build hello.go
$ strip hello
Agora, o seu dockerfile pode ser
FROM scratch
COPY hello /
CMD ["/hello"]
Caso trivial; é apenas um exemplo.
Mas se você tentar executar php
, você conhece todas as dependências? Às vezes é mais fácil trazer uma cópia mínima de um sistema operacional comum. Mas isso tem alguns riscos de segurança.
(veja também link )