Estoy siguiendo la documentación de CoreOS Docker y menciona los contenedores iniciales con comandos como:
docker run someImageName /bin/somebinary
¿Dónde someImageName
está 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 cambio, simplemente quiero ejecutar los servicios (por ejemplo, systemd / sysvinit) que normalmente se ejecutan dentro del sistema operativo de imágenes .
Esto parece ser lo más común que alguien querría hacer con Docker, pero al intentar ejecutar una imagen sin un comando se 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 ?
Respuestas:
Como se documenta aquí, simplemente se ejecuta
/sbin/init
como el comando al igual que cualquier otro arranque de Unix desde un solo usuario al modo multiusuario./programming/19332662/start-full-container-in-docker
Los contenedores pueden ser sistemas operativos completos, simplemente no tienen que serlo (tampoco lo hacen las máquinas virtuales, es más complicado de configurar y administrar).
Yo diría que el objetivo de Docker es facilitar los contenedores de aplicaciones, de modo que solo tenga que configurar una aplicación, no todo el sistema operativo.
fuente
docker ps -notrunc
, para obtener la ID del contenedor, y luegosudo /usr/sbin/lxc-attach -n containerID
entrar en la imagen en ejecución. Como el otro cartel menciona, yo realmente no necesita un segundo init, así que echa un vistazo a los envases de un solo comando siguiente ...Docker es un sistema para la gestión e implementación de contenedores de aplicaciones , no contenedores de sistemas operativos . Parece como si estuviera combinando la ejecución de un contenedor acoplable con el arranque de un sistema operativo.
Sus contenedores Docker deben ser aplicaciones de un solo propósito y de alcance muy limitado que se pueden iniciar con un solo comando. Si está buscando algo más complejo que eso, entonces Docker no es la solución que está buscando. En ese caso, consulte KVM, ESXi, OpenVZ, LXD , etc.
Si solo está buscando cómo puede especificar un valor predeterminado
CMD
yENTRYPOINT
para sus contenedores, puede hacerlo en tiempo de compilación utilizando un Dockerfile.fuente
/sbin/init
, pero no tiene que tenerlo. Es probable que haya usado un contenedor ubuntu predeterminado o algo así. Hay muchos bits en estos contenedores que se pueden quitar si lo desea.Para ejecutar un sistema operativo completo en un contenedor, cree el siguiente Dockerfile:
Luego construya e inicie el contenedor e ingrese un shell dentro de él para explorar los servicios que se ejecutan dentro de él:
Servicios completos de systemd dentro del contenedor. Hermosa.
fuente
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 guardando su propia configuración. Para su conveniencia, sería mejor darle a cada uno de sus contenedores un nombre con "--name".
Fi:
Eso es.
Después de eso, tiene sus contenedores creados para siempre y puede iniciarlos y detenerlos como máquinas virtuales.
Para entrar en el contenedor y hacer lo que quieres hacer:
fuente