Los contenedores proporcionan aislamiento de procesos en un sistema operativo compartido, en lugar del aislamiento del sistema operativo en el hardware compartido que se obtiene con las máquinas virtuales. Dado que el sistema operativo es compartido, el sistema operativo host necesita poder ejecutar los binarios deseados. Esto lo verás en la arquitectura del motor docker y la arquitectura de la imagen que quieres ejecutar, deben ser compatibles:
$ docker system info --format '{{.OSType}} {{.Architecture}}'linux x86_64$ docker image inspect busybox --format '{{.Os}} {{.Architecture}}'linux amd64
Si intenta ejecutar una arquitectura que no es compatible con su host, obtendrá un error porque el kernel no reconoce el formato binario:
$ docker image pull --platform arm64 busybox:latestlatest: Pulling from library/busyboxacafde7ce2e7: Pull completeDigest: sha256:2a03a6059f21e150ae84b0973863609494aad70f0a80eaeb64bddd8d92465812Status: Downloaded newer image for busybox:latest$ docker run -it --rm busybox:latest echo hellostandard_init_linux.go:190: exec user process caused "no such file or directory"
Las versiones de escritorio de Docker, y la versión de Windows Server de Docker, incluyen una máquina virtual Linux bajo las cubiertas para ejecutar contenedores Linux (los contenedores Linux son el entorno de contenedor dominante, por lo que Docker implementa esto usando Linuxkit, para simplificar el flujo de trabajo del desarrollador). Para Windows, hay un interruptor en el motor para usar la máquina virtual Linux o ejecutar contenedores nativos de Windows.
Sin embargo, Docker no tiene una máquina virtual integrada para que Windows ejecute sus binarios en un host Linux (ya que Windows no es de código abierto y requeriría licencias), por lo tanto, la única forma de ejecutar contenedores nativos de Windows es en un host de Windows.
Los contenedores tienen que ver con la virtualización de Kernel/SO.
Es un grupo de procesos que se ejecutan de forma independiente en un HOST contenedor que comparte el kernel. Si ese host contenedor es un demonio de Linux, no puede compartir el kernel de Windows, que la imagen del nanoservidor necesita