Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. DevOps
Code

Docker Desde los Cimientos: Trabajando Con Contenedores, Parte 2

by
Difficulty:IntermediateLength:ShortLanguages:
This post is part of a series called Docker from the Ground Up: Working with Containers.
Docker From the Ground Up: Working With Containers, Part 1

Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)

Esta es la parte dos de una serie de dos partes sobre trabajar con contenedores Docker. En la parte uno, nos enfocamos a las muchas maneras y opciones de ejecutar una imagen y cómo el anfitrión puede interactuar con un contenedor Docker.

En esta parte, cubriremos listar, inicia, detener y reiniciar contenedores así como ejecutar comandos sobre contenedores en ejecución. En particular, aprenderás la diferencia entre contenedores en ejecución y detenidos (salidos), y cómo controlar precisamente la información y mostrar cuando listas tus contenedores filtrando y formateando.

Después, tendrás experiencia de primera mano deteniendo, iniciando, reiniciando y adjuntando a tus contenedores. Por último, ejecutarás comandos de una sola vez así como tendrás acceso de consola interactiva para un contenedor en ejecución.

Antes de que comencemos, asegúrate de que Docker está instalado apropiadamente en tu entorno. Dependiendo de como se instaló y tu usuario, podrías necesitar ejecutarlo como sudo. Yo omitiré el sudo.

Listando Contenedores

Cuando trabajamos con contenedores, frecuentemente quieres listar, ver y filtrar tus contenedores. El comando docker ps es la clave, y tiene muchas opciones interesantes.

Ejecutando Contenedores

El comando más básico es un simple docker ps sin argumentos, que muestra todos los contenedores actualmente en ejecución.

Obtienes mucha información sobre cada contenedor, incluyendo el id de contenedor, la imagen, el comando, cuándo fue creado, su estado actual, sus puertos, y sus nombres. Es un poco difícil analizar debido al envoltorio. Veremos después cómo filtrar y formatear la salida. Nota que el comando está cortado (así como el id de contenedor). Para mostrar el comando completo, agrega --no-trunc:

Ahora, el comando completo es visible: nginx -g 'daemon off;'

Todos los Contenedores

Como recuerdas, Docker mantiene a los contenedores detenidos (a menos que los ejecutes con --rm). Agregar -a muestra todos los contenedores:

Formateando

La salida de docker ps puede ser demasiado verbosa y frecuentemente muestra muchos campos que no son interesantes. Puedes usar formato Go-template para mostrar solo los campos que te interesen. Aquí está mostrando solo el nombre y el comando:

Eso funciona, pero para presentarlo con los nombres de campo, agrega "table" al inicio de la cadena de formato:

El nombre de formato para el id de contenedor (no seleccionado aquí) es {{.ID}} (todas mayúsculas).

Filtrado

El comando docker ps soporta muchos filtros. Son bastante sencillos de usar. La sintaxis es -f "<filtro>=<valor>". Los filtros soportados son id, label, name, exited, status, ancestor, before, since, isolation, network, y health.

Aquí está filtrando por nombre de contenedor y mostrando solo el contenedor busybox:

La Bandera -q

Si todo lo que quieres es el id de contenedor, usa -q flag (bandera silenciosa). Es más simple que --format 'table {{.ID}}'. Esto es necesario frecuentemente cuando quieres realizar operaciones en múltiples contenedores (verás un ejemplo después).

Deteniendo, Iniciando y Reiniciando Contenedores

Puedes detener contenedores en ejecución e iniciar un contenedor detenido. Hay muchas diferencias entre iniciar un contenedor detenido y ejecutar una nueva instancia de la misma imagen:

  • Usas las mismas variables de entorno, volúmenes, puertos y otros argumentos del comando de ejecución original.
  • No tienes que crear otro contenedor.
  • Si la instancia detenida modificó su sistema de archivo, el contenedor iniciado usará el mismo.

Detengamos el contenedor nginx e iniciémoslo después. Cuando te refieres a un contenedor, puedes usar su nombre o un prefijo ambiguo de su id. Usualmente nombro mis contenedores más antiguos para tener una palanca significativa y no tener que lidiar con los nombres auto-generados de Docker o prefijos de id del contenedor.

OK. Nginx se ha detenido (el estado es "Exited"). Iniciémoslo:

Reiniciando un contenedor en ejecución es otra opción, que es equivalente a docker stop seguido de docker start.

$ docker restart nginx

Adjuntando a un Contenedor en Ejecución

Cuando inicias un contenedor detenido, o si ejecutas tu contenedor en modo separado (argumento de linea de comando -d), no puedes ver la salida. Pero puedes adjuntarlo a esta.

Removiendo Contenedores

Puedes remover contenedores detenidos con el comando: docker rm <id de contenedor o nombre>

Si quieres remover un contenedor en ejecución, puedes detenerlo primero o usar el argumento de línea de comando -f (force):

Si quieres remover todos los contenedores, aquí está un buen código:

docker rm -f $(docker ps -aq)

Si quieres remover solo el contenedor detenido, remueve la bandera -f (force).

Ejecutando un Comando Dentro de un Contenedor en Ejecución

Docker ejecuta un solo proceso dentro de un contenedor, pero puedes ejecutar comandos adicionales contra un contenedor en ejecución. Es muy similar a proporcionar un comando personalizado al comando docker run, excepto que en este caso está ejecutando lado a lado con el comando run.

Comandos Simples

Ejecutar un comando simple es hecho vía docker exec. Proporcionas un id o nombre de contenedor en ejecución y el comando que deseas ejecutar. Revisemos el archivo nginx.conf dentro del contenedor nginx y veamos cuántos procesos trabajadores están configurados.

Shell Interactivo

Una de las mejores técnicas de solución de problemas con contenedores Docker es conectar a un shell interactivo y solo explorar el sistema interno de archivos. Para poder adjuntar stdin y tener un tty, necesitas proporcionar los argumentos de línea de comando -i -t (pueden ser agrupados como -it) y después el nombre de un ejecutable shell (usualmente bash).

Terminas con acceso shell a tu contenedor. Aquí está un ejemplo de revisar el proceso trabajador de manera interactiva desde "dentro" del contenedor.

Conclusión

Docker es una plataforma poderosa, y ya que el contenedor es su unidad de trabajo, proporciona muchas herramientas para administrar y trabajar con contenedores. Describí la mayoría de los aspectos importantes de trabajar con contenedores, pero hay muchas características más avanzadas, opciones y matices para los comandos que cubrí, así como comandos adicionales.

Si trabajas de cerca con contenedores Docker, toma el tiempo para sumergirte y aprender todo sobre ellos. Pagará generosamente.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.