Docker parte 2: Trabajando con contenedores
Ejecutar un contenedor
Ejemplo: docker run hello-world
1- Buscará imagen “hello-world” localmente. Si no la encuentra…
2- Buscará imagen en hub.docker.com. Es necesario estar logueado.
Docker funciona como cliente-servidor
Cliente docker (comando docker) le habla al daemon docker que le habla a los contenedores
El daemon puede estar en mi máquina o en una máquina/servidor remoto.
- Un contenedor es una entidad lógica, una agrupación de procesos que se ejecutan de forma nativa como cualquier otra aplicación en la máquina host.
- Un contenedor es el estado en ejecución de una imagen.
- A partir de una imagen, pueden ejecutarse uno o varios contenedores. Los mismos pueden agregarse o quitarse dinámicamente.
- Se pueden realizar cambios sobre un contenedor y guardar los cambios realizando un “commit” en el repositorio de docker, el que asignará un nuevo nro de versión y creará una imagen con estos cambios.
- Cada contenedor tiene un ID único y un nombre aleatorio si es que no se asigna uno explícitamente. El ID se asigna como hostname del contenedor (ej cuando se ingresa en modo interactivo, se ingresará como root@iddelcontenedor).
- Docker está hecho en Go.
- Cada contenedor tiene un "root command" que es el comando con el que se inicia. Este siempre se guarda en el PID 1 de la lista de procesos.
- Siempre que un contenedor corra un comando, el contenedor estará vivo, sino se apagará.
Explorando contenedores
- docker ps = Lista todos los contenedores que estén en ejecución
- docker ps -a = Lista todos los contenedores.
- docker ps -aq = Lista solo los IDs de todos los contenedores
- docker inspect idcontenedor_o_nombrecontenedor = Inspeccionar un contenedor específico
- docker inspect -f {{variable}} idcontenedor_o_nombrecontenedor = Filtra una variable específica del contenedor. Ej docker inspect -f {{json .Config.Env}} micontenedor
- docker logs idcontenedor_o_nombrecontenedor = Muestra el output de un contenedor.
Modificando contenedores
- docker run -it idcontenedor_o_nombrecontenedor = Ejecuta en modo interactivo, ejecutando el command ej /bin/bash. Al salir con exit se apaga el contenedor ya que el proceso no tiene nada más que hacer.
- docker run --name nombreexplicitoparacontenedor nombreimagen = Ejecuta un contenedor en base a la imagen nombreimagen asignándole un nombre explícito. OJO: No podemos repetir los nombres.
- docker run ubuntu tail -f /dev/null = Truco para dejar contenedor corriendo, ya que siempre estará esperando algo.
- docker run --detach nginx = Ejecuta indicando que la salida no la voy a voy a esperar, así puedo seguir usando la consola.
- docker run --rm ... = con --rm indico que elimine el contenedor cuando se termine de ejecutar.
- docker exec -it nombre_contenedor bash = Para ejecutar un comando en un contenedor existente (entramos al bash).
- docker kill idcontenedor_o_nombrecontenedor = Mata el proceso completo
- docker rm idcontenedor_o_nombrecontenedor = Elimina un contenedor. Si se le agrega -f lo elimina independiente si está o no en ejecución)
- docker rm $(ps -aq) = Elimina todos los contenedores que no estén en ejecución. Símil a docker container prune.
- docker rm -f $(ps -aq) = Elimina todos los contenedores, independiente si están o no en ejecución (-f).
- docker rename nombreantiguo nombrenuevo = Renombra un contenedor
Extra: Refresco de comandos linux
- ls -la = Muestra el listado de carpetas y archivos del directorio actual
- pwd = Muestra la ruta del directorio actual
- uname -a = Muestra información sobre el sistema. Ej en un ubuntu podría mostrar:Linux 061b1743cb6f 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
- algúncomando tail = Muestra las últimas (por default 10) líneas de salida de un comando o archivo. Si se le agrega -f (-follow) la cola se repetirá por siempre, mostrando nuevos datos. Si se agrega -n nro, mostrará las nro últimas líneas.
- ps = Lista de procesos. Se pueden agregar los parámetros -a, -fea.


0 comentarios