¿Cómo puedo ejecutar un sistema operativo completo en un contenedor Docker, sin especificar un comando?

Estoy siguiendo el Documentación de CoreOS Docker y menciona el inicio de contenedores con comandos como:

docker run someImageName /bin/somebinary

Donde someImageName es una imagen. Cuando /bin / somebinary sale, la imagen ya no se ejecutará.

Simplemente me gustaría ejecutar una imagen, sin especificar ningún binario para ejecutar. En su lugar, Simplemente quiero ejecutar los servicios (por ejemplo, systemd / sysvinit) que normalmente se ejecutan dentro del sistema operativo de las imágenes.

Esto parece ser lo más común que alguien querría hacer con Docker, pero intentar ejecutar una imagen sin un comando devuelve:

2014/02/05 14:49:19 Error: create: No command specified

Cómo puedo iniciar un contenedor Docker y ejecutar un sistema operativo completo, en lugar de especificar un comando?

Como se documenta aquí, simplemente ejecute /sbin/init como el comando al igual que cualquier otro arranque unix de un solo usuario a modo multiusuario.

https://stackoverflow.com/questions/19332662/start-full-container-in-docker

Los contenedores pueden ser sistemas operativos completos, simplemente no tienen que serlo (ni las máquinas virtuales, para el caso, es más complicado de configurar y administrar).

Yo diría que el objetivo de Docker es hacer que los contenedores de aplicaciones sean fáciles, de modo que solo tenga que configurar una aplicación, no todo el sistema operativo.

Docker es un sistema para la gestión y despliegue de aplicación contenedores, no sistema operativo contenedor. Parece que está combinando la ejecución de un contenedor docker con el arranque de un sistema operativo.

Los contenedores Docker deben ser aplicaciones de un solo propósito y de alcance muy limitado que se puedan iniciar con un solo comando. Si está buscando algo más complejo que eso, Docker no es la solución que está buscando. En ese caso, eche un vistazo a KVM, ESXi, OpenVZ, LXD sucesivamente.

Si solo está buscando cómo puede especificar un valor predeterminado CMD y ENTRYPOINT para sus contenedores, puede hacerlo en tiempo de construcción usando un Dockerfile.

Para ejecutar un sistema operativo completo en un contenedor, cree el siguiente Dockerfile:

FROM fedora:25CMD /sbin/init

Luego, construya e inicie el contenedor e ingrese un shell dentro de él para explorar los servicios que se ejecutan dentro de él:

docker build -t os .docker run -d --privileged --name os osdocker exec -it os bash

Servicios completos de systemd dentro del contenedor. Hermoso.

docker pull ubuntu

Simplemente ejecute desde la misma imagen tantas veces como sea necesario. Se crearán nuevos contenedores y luego se pueden iniciar y detener, cada uno de los cuales guarda su propia configuración. Para su comodidad, sería mejor dar a cada uno de sus contenedores un nombre con "name name".

F. i:

docker run --name MyContainer1 <ubuntu image>docker run --name MyContainer2 <ubuntu image>docker run --name MyContainer3 <ubuntu image>

Eso es.

$ docker psCONTAINER ID        IMAGE            CREATED          STATUS               NAMESa7e789711e62        67759a80360c   12 hours ago     Up 2 minutes         MyContainer187ae9c5c3f84        67759a80360c   12 hours ago     Up About a minute    MyContainer2c1524520d864        67759a80360c   12 hours ago     Up About a minute    MyContainer3

Después de eso, tiene sus contenedores creados para siempre y puede iniciarlos y detenerlos como máquinas virtuales.

docker start MyContainer1

Para entrar en el contenedor y hacer lo que quieres hacer:

docker exec -it MyContainer1 bash

Este es un duplicado de esta pregunta lxc - Start full container in Docker? - Stack Overflow

@FredtheMagicWonderDog No del todo, aunque la respuesta es la misma.