Docker parte 2: Trabajando con contenedores

by - 5/04/2019 08:12:00 p.m.

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.

    You May Also Like

    0 comentarios