No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Curso de Docker

Curso de Docker

Guido Vilari帽o

Guido Vilari帽o

Ciclo de vida de un contenedor

11/32
Recursos

Aportes 126

Preguntas 52

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Si no tienes Linux, puedes parar el contenedor con:

docker stop alwaysup

Donde 鈥榓lwaysup鈥 es el nombre de tu cotenedor

Mis Notas del video:

Cada vez que un contendor se ejecuta, en realidad lo que ejecuta es un proceso del sistema operativo. Este proceso se le conoce como Main process.

Main process
Determina la vida del contenedor, un contendor corre siempre y cuando su proceso principal este corriendo.

Sub process
Un contenedor puede tener o lanzar procesos alternos al main process, si estos fallan el contenedor va a seguir encedido a menos que falle el main.

Ejemplos manejados en el video

  • Batch como Main process
  • Agujero negro (/dev/null) como Main process
docker run --name alwaysup -d ubuntu tail -f /dev/null 

_el ouput que te regresa es el ID del contentedor _

Te puedes conectar al contenedor y hacer cosas dentro del 茅l con el siguiente comando (sub proceso)

docker exec -it alwaysup bash

Se puede matar un Main process desde afuera del contenedor, esto se logra conociendo el id del proceso principal del contenedor que se tiene en la maquina. Para saberlo se ejecuta los siguientes comandos;

docker inspect --format '{{.State.Pid}}' alwaysup

_El output del comando es el process ID (2474) _

Para matar el proceso principal del contenedor desde afuera se ejecuta el siguiente comando (solo funciona en linux)

Kill  2474

Comandos:

$ docker ps -a (veo todos los contenedores)
$ docker --name <nombre> -d ubuntu -f <comando>
$ docker --name alwaysup -d ubuntu tail -f /dev/null (mantiene el contenedor activo)
$ docker exec -it alwaysup bash (entro al contenedor)
$ docker inspect --format 鈥榹{.State.Pid}}鈥 alwaysup (veo el main process del ubuntu)
desde Linux si ejecuto kill -9 <PID> mata el proceso dentro del contenedor de ubuntu pero desde MAC no funciona

/dev/null

Es conocido como un agujero negro es decir ese archivo es la nada鈥

Pienso que el profesor mezcla repetidas veces contenedor cuando se refiere a la im谩gen. Lo que se baja de docker hub es una imagen. Al hacer docker run esa imagen se convierte en contenedor.

En mac corr铆 este comando para apagar el contenedor

docker kill alwaysup

dev/null es un barril sin fondo que loopea ubuntu para que mantenga vivo el proceso (segun entiendo).
Lo explica un poco mas en este video, tambien de guido https://platzi.com/clases/1432-docker-2018/15429-ciclo-de-vida-de-un-contenedor/

hay dos formas de desplegar un contenedor que es en primer plano (Foreground) y en segundo plano (Background) por ejemplo:

Otra forma de que el contenedor no se apague es

$ docker run --name alwaysup -d -it ubuntu

Si usas Debian o una distribuci贸n basada en ella puedes ejecutar lo siguiente:

sudo kill -9 "$(sudo docker inspect --format '{{.State.Pid}}' alwaysup)"```

Tengo linux y no me funciono: Kill 6228, ni con sudo kill 6228.

gustavo@~$ kill 6228
kill: (6228) - Operaci贸n no permitida

Pero si pude con:

docker kill alwaysup

no me funcion贸 mantener el contenedor abierto cuando ejecute el comando indicado:

docker run --name alwayup -d ubuntu tail -f /dev/null

buscando en internet encontre otra forma que si me funcion贸:

docker run --name alwaysup -itd ubuntu

*C贸digos de error
en la documentaci贸n del proyecto Linux se encuentra una lista de c贸digos reservados que ofrece las recomendaciones de que c贸digos utilizar para escenarios espec铆ficos. Estos son los errores est谩ndar de Linux y UNIX

  • 1 Salida general de errores
  • 2 Uso indebido de elementos integrados de shell
  • 126 El comando invocado no se puede ejecutar
  • 127 El comando no fue encontrado
  • 128 Argumento invalido para salida
  • 128+n Se帽al de error fatal 鈥渘鈥
  • 130 Script terminado con Control+C
  • 255* Estado de salida fuera de rango

ref: Exit status out of range

Para ver la Pid , tambi茅n lo pueden hacer de esta menera

docker inspect alwaysup | grep -i Pid
  • Combinaci贸n de teclas para salir de un contenedor y apagarlo
    crtl + c

  • Combinaci贸n de teclas para salir del contenedor sin apgarlo
    ctrl + d

  • Comando para salir de un contenedor y apargarlo, si el proceso es un noOps
    $ exit

  • Iniciar un contenedor ya creado
    $ docker start <nombre-contenedor o id-contenedor>

    Ejemplo
    $ docker start contenedor-ubuntu

  • Detener un contenedor ya creado e iniciado
    $ docker start <nombre-contenedor o id-contenedor>

    Ejemplo
    $ docker stop contenedor-ubuntu

  • Iniciar bash un contenedor ya creado
    $ docker exec -it <nombre-contenedor o id-contenedor>

      docker exec 
    

    Ejecutar dentro del contenedor

      -it  
    

    interactivo; terminal. Inicia un terminal modo interactivo

      <contenedor ID OR nombre contenedor >
    

    nombre del contenedor o el id

      bash
    

    bas o terminal

Ejemplo
$ docker exec -it contenedor-ubuntu

Hola! Esta es una soluci贸n para quienes no les funcione con el tail en windows:
Soy nuevo en esto, as铆 que no s茅 si sea la mejor soluci贸n a esto, pero lo que hacemos con tail -f es para hacer follow de las 煤ltimas l铆neas de un archivo, en este caso, seg煤n lo que le铆, en Linux existe un archivo llamado null, en /dev/null, el cual es un archivo especial que contiene nada, un infinito nada, entonces eso permite mantener el output de manera infinita, ya que usamos la flag -f para seguir las 煤ltimas nuevas l铆neas con el null, entonces como en windows no exist铆a esto, y como estaba usando la git bash, hice lo siguiente, espero les sirva, ya que es una buena pr谩ctica poner como proceso principal a ese archivo nulo, as铆 no gastas CPU al leer nada, y a la vez tienes un proceso infinito hasta que quieras matarlo a tu voluntad.
Ahora s铆, perd贸n por la verborrea, aqu铆 est谩 la soluci贸n
Si ponen 鈥渢ail -f $null鈥 en la git bash, ver谩n que les aparece una lectura infinita, dado a que es una variable autom谩tica con el valor que buscamos que haga lo mismo que el archivo 鈥/dev/null鈥 en linux (https://docs.microsoft.com/en-us/powershell/scripting/learn/deep-dives/everything-about-null?view=powershell-7.2) (Pd: Para salir tan solo pon [ctrl]+[c])
Entonces, la soluci贸n a esto en windows ser铆a poner

docker run --name probandoesto -d ubuntu tail -f $null

Espero les sirva! Aunque no s茅 si sea la mejor soluci贸n, pero al ver el proceso con 鈥減s鈥 y 鈥渢op鈥, se puede ver que funciona y no gasta CPU! Saludos!

En el siguiente enlace podemos ver todas las imagenes oficiales de linux para docker
https://hub.docker.com/search?category=os&source=verified&type=image

El curso va excelente, ahora bien, en mac no mato el proceso pues le falto el par谩metro -9 al kill, en cualquier unix system el comando es kill -9 PID mata el proceso mencionado, eso incluye a mac

Tampoco funciona en un WSL de Ubuntu鈥

驴Tengo una duda porque si el proceso principal se le asigna un id 1 dentro del contendor, desde afura se mata con otro ID?

El flag 鈥-d鈥 : corre el contenedor en modo background e imprime el ID del contenedor.

鈥搕ail >> este comando indica que se va a poner a la cola/final del proceso principal

a esta clase le tomaras mayor sentido si es que has tomado algun curso de linux

curso: administracion de servidores linux, hablan de prcesos, mandar a segundo plano un proceso, matarlo, etc

en Windows,
para los que no puedan mantener el contenedor activo, solo quiten el / detr谩s del dev, que quede as铆 dev/null.

 docker run --name alwaysup2 -d ubuntu tail -f dev/null

11. Ciclo de vida de un contenedor
C贸mo se a hablado en otras clases anteriores un contenedor es un conjunto de procesos que se ejecutan de manera aislada. Cuando se instala una distribuci贸n de linux, esta no tiene un proceso principal activo de manera predeterminada, es por este motivo que el contenedor no estar谩 activo de manera predeterminada. La idea de tener un proceso principal (Main process) encendido es que nos permita mantener un ciclo de vida de un contenedor activo y poder salir y entrar del bash sin que el contenedor se apague. se puede utilizar como estrategia un proceso NoOps
Proceso NoOps
Cuando no tenemos claro que proceso podemos ejecutar para mantener nuestro contenedor activo, es posible ejecutar un proceso NoOps para mantener el contenedor activo tambi茅n es conocido como agujero negro

Todos son archivos con caracter铆sticas especiales
https://es.wikipedia.org/wiki//dev/zero
https://es.wikipedia.org/wiki//dev/null
https://es.wikipedia.org/wiki//dev/full
https://es.wikipedia.org/wiki//dev/random

Iniciar un Main process NoOps en nuestro contenedor linux
Lo interesante de usar esta instrucci贸n es que cada vez que se detenga y reinicie el contenedor siempre ejecutar谩 el comando, esto se debe a que final de esta instrucci贸n le indicamos a nuestra versi贸n de linux que inicie con esta instrucci贸n

$ sudo docker run --name <nombre contenedor> -d <nombre imagen> tail -f /dev/null

Ejemplo:

Iniciar main process NoOps

sudo docker run --name alwaysup -d ubuntu tail -f /dev/null

Verificar que el proceso este activo

sudo docker ps -a 

Ejecutar bash dentro de nuestro contenedor

$ sudo docker exec -it <nombre de contenedor> bash
-i: interactivo
-t: abre la consola

Ejemplo:

sudo docker exec -it alwaysup bash

Filtrar y mostrar el proceso

$ sudo docker inspect --format <criterio de filtro> <nombre de contenedor>

Ejemplo:

sudo docker inspect --format '{{.State.Pid}}' alwaysup

Detener o matar proceso

Primera forma

$ sudo Kill -9  <numero de proceso>
$ sudo Kill   <nombre de contenedor>

Segunda forma

$ sudo docker stop <nombre_contenedor>

Ejemplo
Primera forma

sudo Kill -9  21143
sudo kill alwaysup

Segunda forma

sudo docker stop alwaysup

A mi me funciono docker kill NOMBRE_CONTAINER
ubuntu

No sab铆a como ejecutar la conexi贸n en Docker Windows, y encontr茅 que se utiliza el prefijo winpty:

winpty docker exec -it hardcore_lederberg bash

Para los que tiene WSL y no pueden matar el proceso es kill -9 pid

**Parar el proceso de un contenedor en Linux **

_Inspecciona y filtra el proceso del contenedor _

docker inspect --format '{{.State.Pid}}' nombre_contenedor

kill id_proceso

En mac

docker stop nombre_contenedor
docker inspect --format '{{.State.Pid}}' alwaysup

Y aportando 鈥渢rucos鈥, podemos crear un contenedor que se autodestruya en N segundos con el comando sleep, ejemplo para 10 minutos: 600 segundos

docker run -d debian sleep 600

De igual modo pueden hacer usar cualquier comando que sea IO blocking para que el contenedor se mantenga en ejecuci贸n por ej.

docker run -d debian tail -f /etc/passwd

Estoy trabajando en Ubuntu y no me sirvi贸 el comando kill , no se porque no funciono

El curso es buenisimo, estoy aprendiendo mucho, pero la verdad siento que quizas le hagan falta algunas cosas mas introductorias, como instalar una imagen sin correrla inmediatemente, o como cambiarle el nombre a cada imagen, puede que en otras clases lo veamos, pero primero lo primero, igual, felicitaciones, muy buen curso




Estoy feliz porque me funcionaron los coamndos en Play with Docker 馃槈

Si por alguna raz贸n quieren parar todos sus contenedores, pueden usar:

docker stop $(docker ps -aq)

docker stop detiene los contenedores, mientras que con $(docker ps -aq) se env铆an como par谩metros los ID de todos los contenedores.

curioseando me funciono detener varios contenedores con una sola linea listando los nombres de los que esten corriendo.

docker stop alwaysup1 alwaysup2 alwaysup3

馃槃

Que clase tan interesante y rica en conceptos

tambien se puede correr

docker kill alwaysup

Para matar el proceso docker kill <nombre>

Para los de windows el comando para 鈥渕atar鈥 el contenedor en ejecuci贸n es:
docker kill "nombre de tu contenedor"
ejem:
docker kill alwaysup

**Salir del contenedor **

exit

Cada vez que un contenedor se ejecuta, basicamente es un proceso del sistema operativo. Por defecto un contenedor corre siempre y cuando su proceso principal este corriendo, al hacer exit, el proceso se detiene.

Que pasa si quiero correr un ubuntu sin el proceso interactivo y que no se apague?

- -d deetach
docker run --name alwaysup -d ubuntu tail -f /dev/null

Conectarnos al bash del contenedor

docker exec -it alwaysup bash

Este proceso va a seguir funcionando mientras que el proceso principal siga funcionando. La prueba de eso es hacer exit y ver que el proceso sigue funcionando debido a que se cerro el proceso del bash pero no el principal.

Para matar o parar el proceso principal

  1. Obtener el process id
docker inspect --format '{{.State.Pid}}' alwaysup
  1. Detener en linux
kill -9 'id retornado del comando anterior'

Yo uso ubuntu pero no me dejo correr:

$ kill  -9  proces_id
bash: kill: (4648) - Operaci贸n no permitida

Tuve que utilizar:

$ sudo kill  -9  proces_id

Para que me permitiera hacer el proceso

Cada vez que se inicia un contenedor, en realidad lo que ejecuta es un proceso del sistema operativo. Este proceso (main process o proceso principal del contenedor) es el que determina si el contenedor est谩 funcionando o no. Por defecto, un contenedor se mantiene activo siempre y cuando su proceso principal se mantenga en ejecuci贸n.

El proceso principal de un contenedor puede ser sobrescrito o cambiado en el momento de iniciar el contenedor, y eso lo hacemos indicando el proceso a ejecutar seguido del nombre de la imagen del contenedor. Por ejemplo: $ docker run ubuntu tail -f /dev/null. En este caso, el proceso principal de este contenedor no ser谩 /bin/bash (que es el proceso principal por defecto de una imagen de Ubuntu) sino que ahora ser谩 tail -f /dev/null, que es b谩sicamente un proceso infinito que no hace nada, pero se mantiene siempre en ejecuci贸n.

Podemos tambi茅n enviarle instrucciones a contenedores que existan y que est茅n en ejecuci贸n, a trav茅s del commando docker exec. Por ejemplo, si ya tenemos un contenedor Ubuntu en ejecuci贸n, podr铆amos conectarnos a 茅l ingresando a su interfaz l铆nea de comandos con docker exec -ti <nombre_del_contenedor> bash. Con la bandera -ti le indicamos a Docker que nos queremos conectar de manera interactiva, para as铆 poder interactuar con la CLI del contenedor. Cuando cerremos la conexi贸n con el contenedor, 茅ste no se detendr谩, porque la instrucci贸n con la que nos conectamos a 茅l no es su proceso principal.

no es necesesario poner el container_id
tambien pueden hacerlo con
sudo docker kill names
sudo es en caso de linux

Ciclo de vida de un contenedor:

Ejemplo:

  • docker run ubuntu tail -f /dev/null 鈥> Para no ejecutar el comando por defecto, le podemos decir que se ejecute y no se apague. La terminal se queda congelada.

  • Abrir otra terminal

  • docker ps 鈥> para obtener nombre

  • docker exec -it <nombre contenedor> bash 鈥> Exec es para ejecutar un comando en un contenedor existente. -it para que sea de forma interactiva.

  • ps 鈥> En linux se pueden ver los procesos con ps, solo los de mi sesi贸n.

  • ps -fea 鈥> Para ver procesos de todas las sesiones. Docker siempre por defecto le asigna el PID (ID del proceso) 1 al comando que corre con el contenedor, ahi esta la clave de cuando se apaga el contenedor. Todo contenedor tiene un root COMMAND, cuando haga exit se va apagar el contenedor.

  • exit 鈥> Salir del contenedor. Puedo hacer 2 cosas:

  • docker rm -f <nombre contenedor> Elima brutalmente el contenedor. El -f significa 鈥淪i esta corriendo no me importa鈥

  • docker kill <nombre contenedor> Manda una se帽al de matar el proceso.

Si un contenedor se apaga es porque hubo un error en el proceso root e hizo exit o termin贸 de hacer lo que tenia que hacer.

# Comando tail que muestra las ultimo lineas de un archivo y con -f (Follow o siguiendo) se queda esperando todos los cambios.
# /dev/null este es hoyo negro -- barril son fondo de linux, todo lo que se envie a este directorio se perdera, por esto el SO se queda ejecutando
docker run ubuntu tail -f /dev/null
# Ejecutar un comando en un contenedor Exec, para que sea interactivo al nombre del contenedor mediante bash
docker exec -it fervent_hopper bash
# el comando muestra lso procesos y el pid 1 siempre es el del contenedor
ps -fea 
--Revisar el PID del contenedor
docker inspect --format '{{.State.Pid}}' alwaysup
kill -9 pid #Para linux funciona
-- Eliminar el contenedor
docker rm -f fervent_hopper
-- Matar el proceso
docker kill fervent_hopper
#Otra forma
docker stop alwaysup
sudo docker run --name alwaysup -d ubuntu tail -f /dev/null
sudo docker exec -it alwaysup bash
sudo docker inspect --format '{{.State.Pid}}' alwaysup
sudo kill <numero del proceso>
sudo docker stop alwaysup

Si quieres parar el contenedor lo puedes hacer de dos maneras.

  1. Matar el proceso con Kill:

    docker kill alwaysup
    
  2. Eliminar forzadamente el contenedor:

    docker rm -f alwaysup
    

MY NOTES FOR CICLE OF LIFE A CONTAINER 馃槃

para salir de un contenedor utilizamos el comando exit y este se apaga

si ahora listamos los contenedores el contenedor ya no esta y se apagara

cada vez que un contenedor se ejecuta en realidad lo que ejecuta es un proceso del so

eso proceso es el que determina si el proceso sigue vivo o no de si esta funcionando o no

por defecto un contenedor corre siempre y cuando su proceso principal este corriendo

nosotros al hacer exit estamos acabando el proceso principal por lo tanto el contenedor se apaga.

Para que evitar que nuestro contenedor se apague entonces lo que hacemos es crearlo de otro modo, creando un ubuntu pero que no se apague si no que se quede ah铆. Entonces lo que haremos es que cree otro proceso que no haga bin bash y que por lo tanto no podremos hacer que se apague.

Con este comando comando podremos correr el contenedor y al final indicarle que proceso queremos que corra.

docker run 鈥攏ame alwaysup -d ubuntu tail -f /dev/null

_el ouput que te regresa es el ID del contentedor _

/dev/null

Es conocido como un agujero negro es decir ese archivo es la nada鈥

/dev/full
/dev/zero
/dev/random

https://es.wikipedia.org/wiki//dev/zero

https://es.wikipedia.org/wiki//dev/null

https://es.wikipedia.org/wiki//dev/full

https://es.wikipedia.org/wiki//dev/random

Te puedes conectar al contenedor y hacer cosas dentro del 茅l con el siguiente comando (sub proceso). Entonces podremos correr los archivos de linux pero sin que este sea el proceso superior si no un proceso del cual nos podremos salir sin que se apague.

docker exec -it alwaysup bash
								  name

Se puede matar un Main process desde afuera del contenedor, esto se logra conociendo el id del proceso principal del contenedor que se tiene en la maquina. Para saberlo se ejecuta los siguientes comandos;

docker inspect --format '{{.State.Pid}}' alwaysup

_El output del comando es el process ID (2474) _

Para matar el proceso principal del contenedor desde afuera se ejecuta el siguiente comando (solo funciona en linux)

Kill  2474

Yo en windows ocupo el comando: docker stop <ID>,
en remplazo a kill

en Windows puedes matar el proceso desde la GUI

Todo iba tan bien, pero por que meter comandos que nisiquiera se comenta para que sirve --format 鈥榹{.State.Pid}}鈥. Solamente pudo poner docker stop y evitarnos la ansiedad

Hice un script que automatiza algunas de las cosas que vimos hoy: Link.

Ok, para Linux parece importante poner el -9, trat茅 de matar el proceso sin la opci贸n -9, pero no funcionaba, funcion贸 hasta que le puse dicha opci贸n 馃
.
Se me hace curioso ver c贸mo al ser una misma m谩quina Linux (tanto el host como el contenedor), Docker es capaz de ligar directamente los procesos de la m谩quina host con los de la m谩quina en Docker, pero cuando no es el mismo S.O, se virtualiza 馃
.
Lo que me lleva a preguntarme, 驴Docker tambi茅n es capaz de hacer eso con diferentes distribuciones de Linux?, 驴o tambi茅n acaba virtualizando? jaja

En dado caso que no le funcione el comando kill por si solo, pueden usar el comando sudo (o el equivalente para la distro) y luego kill ID_Contenedor 脫sea:

sudo kill -9 ID_Contenedor

sudo kill -9 PID para terminar el proceso en linux

Es increible docker, corr铆 Ubuntu y despues le instale Vim y Node

docker run -it node

Ya adentro hice lo siguiente

touch index.js
apt-get update
apt-get install vim
apt-get install node
node index.js
  • para matar procesos en linux
    kill -9 PID

La operaci贸n kill no mata el proceso del contenedor, al igual que en Mac, en el ubuntu linux que uso no funcion贸, o no como es mencionado, pero agrego mi observaci贸n para si a los dem谩s tambi茅n les pasa

Un contenedor es un proceso, a partir de las im谩genes ejecutamos contenedores

驴Y si se apaga la maquina pero no el Main Process? 馃槢

docker inspect --format '{{.State.Pid}}' alwaysup

para matar el proceso en Linus tuve que poner 鈥渟udo鈥 al principio del comando, de lo contario no me dejaba matar el proceso.
Ejemplo:
sudo kill -9 13421

El numero 鈥13421鈥 es el Pid del proceso en mi PC

Al kill tambi茅n puedes usar el name del Container sin necesidad del Process Id

kill <CONTAINER_NAME>

Un \[aporte]\(https://tldp.org/pub/Linux/docs/ldp-archived/system-admin-guide/translations/es/html/ch05s03.html) curioso sobre la carpeta `/dev/null` El cubo de los bits. Un agujero negro a donde enviar datos que nunca m谩s se volver谩n a ver. Todo lo que se env铆e a /dev/null desaparece. Puede utilizarse, por ejemplo, para ejecutar un comando y no ver en la terminal la salida est谩ndar (debe redirigirse la salida est谩ndar a /dev/null). Es un dispositivo de caracteres con valor 1 para el nodo mayor y 3 para el nodo menor.

mucha gente esta confundiendo matar el proceso con el contenedor; lo que se busca es matar el proceso para que se apague el contenedor. pilas !

Una forma menos complicada de filtrar el json y obtener el pid es:

docker inspect alwaysup | grep Pid

Tener en cuenta que si lo estas corriendo nativamente en linux probablemente el comando

kill -9 (pid del proceso) 

no te funciono si no estas en el usuario root, para eso puedo agregar el sudo antes del comando para tener los permisos necesarios

sudo kill -9 (pid del proceso)

馃寑 Ciclo de vida de un contenedor


Cada vez que un contendor se ejecuta, en realidad lo que ejecuta es un proceso del sistema operativo. Este proceso se le conoce como聽main process.

  • Main process: Determina la vida del contenedor, un contendor corre siempre y cuando su proceso principal este corriendo.
  • Sub process: Un contenedor puede tener o lanzar procesos alternos al main process, si estos fallan el contenedor va a seguir encendido a menos que falle el main.

Por si alguien se pregunta que hace el comando tail -f:

  -f, --follow[={name|descriptor}] muestra a medida que el fichero crece;
                                     sin opci贸n significa 'descriptor'

Lo que quiere decir que el contenedor se quedara corriendo mientras espera nuevas lineas en la entrada indicada

驴Se pueden activar subtitulos ?

Considero que este curso esta omitiendo mucho los comandos importantes o no se toma su tiempo en explicar mas detallado cada uno, para ser un curso de docker b谩sico hasta el momento es muy pobre las explicaciones, por ejemplo el stop, run, etc

Si est谩s ejecutando kill para matar el proceso de docker del ejemplo. Me sirvi贸 hacer las siguientes sentencias:

docker kill id_container
docker container prune

#aunque lo m谩s probable es que me haya servido:

docker rm id_container

Correr Kali Linux

Me gusta mucho Kali, y sus beneficios. As铆 que si a alguien m谩s le surgi贸 la duda aqu铆 los dos comandos simples para hacerlo.

docker pull docker.io/kalilinux/kali-rolling
docker run --tty --interactive kalilinux/kali-rolling

Ciclo de vida de un contenedor

Cada vez que un contenedor se ejecuta, ejecuta un proceso del S.O.

Para correr un contenedor y que no se detenga, agregamos 鈥-d鈥 (detach)

sudo docker run --name alwaysup -d ubuntu tail -f /dev/null

Luego podemos ver el process id y detenerlo:

sudo docker inspect --format '{.State.Pid}' alwaysup

sudo kill -9 <Pid>

Comandos:

docker run --name alwaysup -d ubuntu => nombre de la imagen
docker exec -it alwaysup bash => ejecutar un comando o un proceso en un contenedor existente
docker stop alwaysup => parar un proceso de docker

Para iniciar un contenedor ya creado

Docker start [name]

Ciclo de vida de una aplicaci贸n usando docker:

Y ciclo de vida de un contenedor:

Excelente curso y muy clara la explicaci贸n de los temas!!!

Con este comando pueden ejecutar un contenedor existente.

docker start  `docker ps -a -q --filter "name=nombre_contenedor"`

El profe explica bien pero vi un video practicamente igual y me gusto, se los comparto:

https://www.youtube.com/watch?v=JXZXVPRtyiM&t=302s

鈥渢ail -f /dev/null is a command that runs endlessly and doesn鈥檛 use any CPU because nothing can be read from /dev/null and we are asking for an endless read from it.鈥 馃檶

Importante tomar en cuenta esto para futuros overrides.
La forma de cambiar el main process se debe cambiar el entrypoint, tomando en cuenta esta linea usada en esta clase:

docker run --name alwaysup -d ubuntu tail -f /dev/null

//Le estamos enviando como parametro la imagen
{ ubuntu }

//Como segundo par谩metro 
{ tail -f /dev/null } 

//este segundo par谩metro es m谩s que todo una t茅cnica para dejar un proceso vivo en este container. 
//Recuerda el comando 
{ tail } 
// es para leer lineas de archivo plano y con la bandera 
{ -f } 
//hacemos que el sistema este a la escucha de nuevos cambios en este archivo. 

.
Entender el sistema de comandos de docker
Ejemplos de tail

Si en el comando

docker exec -it <container_name> bash

No les funciona el bash pueden cambiarlo por sh.

docker es mejor sobre linux. gracias profe

Al correr una instacia docker ejecuta un proceso principal y si este finaliza el contenedor tambi茅n, este proceso se visualiza en la columna COMMAND cuando ejecutamos docker ps

Para levantar un contenedor y que este siga vivo podemos cambiar el proceso principal y desatacharlo de la ejecucion docker, esto es con:

docker run --name <nombre> -d <imagen> tail -f /dev/null

al final despues del nombre de la imagen se escribe el comando/proceso que se quiere se ejecute, en este caso tail -f /dev/null el cual no hace nada pero no termina

Para poder entrar y ejecutar comandos en bash es con:

docker exec -it <nombre-instancia> bash

A mi me funcion贸 tambi茅n con:

docker kill alwaysup

Saludos

Quede algo perdido en esta clase!

me tope con el problema de que no podia pausar (```
docker stop


[](https://docs.docker.com/engine/install/linux-postinstall/)

Teniendo que a帽adir el usuario al grupo de docker (en lo particular me sucedia con usuario local y usuario root)

importante: de la docu de docker "If testing on a virtual machine, it may be necessary to restart the virtual machine for changes to take effect."

Obtener el proceso id de la m谩quina nativa

docker inspect --format '{{.state.pid}}' alwaysup

obtenemos el id y para matar el mismo:

kill -9  <id>

docker run --name alwaysup -d ubuntu tail -f /dev/null

Para terminar el proceso es:

sudo kill -9 PID

El PID se obtiene de lo que indica Guido

Si intentan activar un contenedor inactivo, se hace con docker start <nombre_contenedor> , ya que docker run siempre creara un contenedor nuevo.

Podemos tambien detener nuestro contenedor con:

docker stop <container_id> 

#Por defecto un contenedor corre mientras el main process esta corriendo y tiene

Algun exite code ya sea 0 o distinto.

- corre un contenedor llamado alwaysup en modo detach y le pasa como comando tail

docker run --name alwaysup -d ubuntu tail -f /dev/null

#Para ver que queda corriendo
docker ps

#Puedo conectarme al contenedor con el siguiente comando
docker exec -it alwaysup bash

#Dentro del container
ps -aux
#podemos ver que esta corriendo el comando tail que es el main process, con PID 1
exit
docker ps
#podemos notar que el container sigue corriendo por que el main process no hizo exit.
#Es decir el comando tail no termino

Retornar el Pid del proceso principal del contenedor

docker inspect --format 鈥榹{.State.Pid}}鈥 alwaysup

Matar el proceso desde la maquina anfitriona

kill -9 PID

comando para mantener la ejecuci贸n del docker