Utiliza start to a container, si anteriormente lo habías detenido . Utiliza ejecutar a una imagen, si antes había eliminado un contenedor de esta imagen. Este es el uso básico, creo.
CodeSlave
Respuestas:
351
Esta es una pregunta muy importante y la respuesta es muy simple, pero fundamental:
Ejecutar: crea un nuevo contenedor de una imagen y ejecuta el contenedor. Puede crear N clones de la misma imagen. El comando es:
docker run IMAGE_IDy nodocker run CONTAINER_ID
Inicio: inicia un contenedor que se detuvo anteriormente. Por ejemplo, si hubiera detenido una base de datos con el comando docker stop CONTAINER_ID, puede reiniciar el mismo contenedor con el comando docker start CONTAINER_IDy los datos y la configuración serán los mismos.
¿Se necesita crear un volumen para el contenedor detenido para que los datos persistan?
Logan Phillips
@LoganPhillips La diferencia en el ciclo de vida entre los archivos escritos en la capa predeterminada del sistema de archivos de unión del contenedor y los archivos escritos en volúmenes es: los datos de la capa del sistema de archivos de unión del contenedor siempre se pierden al eliminar el contenedor ( docker rm container_id). Por otro lado, los datos de volúmenes sobreviven a la eliminación del contenedor a menos que la -vopción se proporcione explícitamente en la línea de comando. La ubicación del volumen en el sistema host se puede inspeccionar directamente. Ver este artículo
Stphane
Sobre el proceso, ¿necesita & al final de la runlínea de comando? Lo necesito como un servicio innumerable (24 horas)
Peter Krauss
Entonces, ¿cuál es el propósito de "docker create"? ¿Cómo / cuándo se usaría eso?
Considere que tiene una imagen de juego (iso) en su computadora.
Cuando usted run(monta su imagen como una unidad virtual), se crea una unidad virtual con todos los contenidos del juego en la unidad virtual y el archivo de instalación del juego se inicia automáticamente. [Ejecutando su imagen acoplable - creando un contenedor y luego iniciándolo]
Pero cuando stop(similar a Docker lo detiene), la unidad virtual todavía existe pero detiene todos los procesos. [Como el contenedor existe hasta que no se elimina]
Y cuando lo hace start(similar al inicio de Docker), desde la unidad virtual, los archivos de los juegos comienzan su ejecución. [comenzando el contenedor existente]
En este ejemplo: la imagen del juego es su imagen Docker y la unidad virtual es su contenedor.
Esto no es completamente cierto. Según el documento oficial, "...docker run is equivalent to the API /containers/create then /containers/(id)/start.(fuente: docs.docker.com/engine/reference/commandline/run )
sshh
2
runEl comando crea un contenedor a partir de la imagen y luego inicia el proceso raíz en este contenedor. Ejecutarlo con la run --rmbandera le ahorrará la molestia de eliminar el contenedor muerto inútil después y le permitirá ignorar la existencia de docker starty por docker removecompleto.
run El comando hace algunas cosas diferentes:
docker run --name dname image_name bash -c "whoami"
Crea un contenedor a partir de la imagen. En este punto, el contenedor tendría una identificación, podría tener un nombre si se le da uno, aparecerá endocker ps
Inicia / ejecuta el proceso raíz del contenedor. En el código anterior que se ejecutaría bash -c "whoami". Si se ejecuta docker run --name dname image_namesin un comando para ejecutar el contenedor entraría en estado detenido inmediatamente.
Una vez que finaliza el proceso raíz, el contenedor se detiene. En este punto, es prácticamente inútil. Ya no se puede ejecutar nada ni resucitar el contenedor. Básicamente, hay 2 formas de salir del estado detenido: eliminar el contenedor o crear un punto de control (es decir, una imagen) fuera del contenedor detenido para ejecutar otra cosa. Hay que ejecutar docker removeantes de iniciar el contenedor con el mismo nombre.
¿Cómo quitar el contenedor una vez que se detiene automáticamente? Agregue una--rmbandera alruncomando:
docker run --rm --name dname image_name bash -c "whoami"
¿Cómo ejecutar múltiples comandos en un solo contenedor? Al evitar que ese proceso raíz muera. Esto se puede hacer ejecutando algún comando inútil al comienzo con el--detachedindicador y luego usando "ejecutar" para ejecutar comandos reales:
¿Por qué necesitamos docker stopentonces? Para detener este contenedor persistente que lanzamos en el fragmento anterior con el comando sin fintail -f /dev/null.
execute
?Respuestas:
Esta es una pregunta muy importante y la respuesta es muy simple, pero fundamental:
docker run IMAGE_ID
y nodocker run CONTAINER_ID
docker stop CONTAINER_ID
, puede reiniciar el mismo contenedor con el comandodocker start CONTAINER_ID
y los datos y la configuración serán los mismos.fuente
docker rm container_id
). Por otro lado, los datos de volúmenes sobreviven a la eliminación del contenedor a menos que la-v
opción se proporcione explícitamente en la línea de comando. La ubicación del volumen en el sistema host se puede inspeccionar directamente. Ver este artículo&
al final de larun
línea de comando? Lo necesito como un servicio innumerable (24 horas)run
ejecuta una imagenstart
inicia un recipiente .El
docker run
documento menciona:No ejecuta un contenedor existente, lo ejecuta docker (desde docker 1.3) .
Puede reiniciar un contenedor salido .
fuente
-i
adocker run
un proceso interactivo? Quiero decir, Docker Run necesita una imagen para ejecutar un contenedor.Explicación con un ejemplo:
Considere que tiene una imagen de juego (iso) en su computadora.
Cuando usted
run
(monta su imagen como una unidad virtual), se crea una unidad virtual con todos los contenidos del juego en la unidad virtual y el archivo de instalación del juego se inicia automáticamente. [Ejecutando su imagen acoplable - creando un contenedor y luego iniciándolo]Pero cuando
stop
(similar a Docker lo detiene), la unidad virtual todavía existe pero detiene todos los procesos. [Como el contenedor existe hasta que no se elimina]Y cuando lo hace
start
(similar al inicio de Docker), desde la unidad virtual, los archivos de los juegos comienzan su ejecución. [comenzando el contenedor existente]En este ejemplo: la imagen del juego es su imagen Docker y la unidad virtual es su contenedor.
fuente
La respuesta de daniele3004 ya es bastante buena.
Solo una fórmula rápida y sucia para personas como yo que se mezclan
run
ystart
de vez en cuando:docker run [...]
=docker pull [...]
+docker start [...]
fuente
"...docker run is equivalent to the API /containers/create then /containers/(id)/start.
(fuente: docs.docker.com/engine/reference/commandline/run )run
El comando crea un contenedor a partir de la imagen y luego inicia el proceso raíz en este contenedor. Ejecutarlo con larun --rm
bandera le ahorrará la molestia de eliminar el contenedor muerto inútil después y le permitirá ignorar la existencia dedocker start
y pordocker remove
completo.run
El comando hace algunas cosas diferentes:docker ps
bash -c "whoami"
. Si se ejecutadocker run --name dname image_name
sin un comando para ejecutar el contenedor entraría en estado detenido inmediatamente.docker remove
antes de iniciar el contenedor con el mismo nombre.¿Cómo quitar el contenedor una vez que se detiene automáticamente? Agregue una
--rm
bandera alrun
comando:¿Cómo ejecutar múltiples comandos en un solo contenedor? Al evitar que ese proceso raíz muera. Esto se puede hacer ejecutando algún comando inútil al comienzo con el
--detached
indicador y luego usando "ejecutar" para ejecutar comandos reales:¿Por qué necesitamos
docker stop
entonces? Para detener este contenedor persistente que lanzamos en el fragmento anterior con el comando sin fintail -f /dev/null
.fuente