¿Cómo empezar con Docker? – Pasos iniciales

¡Nuestro primer comando!

Para ejecutar docker por primera vez, vamos a utilizar una imagen de prueba, para eso vamos a ejecutar:

$ docker run hello-world

Vamos a ver en pantalla como se ejecuta un contenedor que nos saluda, pero…. ¿Qué acaba de pasar verdaderamente?
Docker acaba de descargar la imagen de docker desde internet al detectar que la imagen no existe en nuestro Docker daemon

¿Qué piensa nuestra app de Docker?

Nuestra app no es capaz de identificar que está siendo ejecutada dentro de un contenedor, a fines prácticos, nuestra app va a ser ejecutada como si estuviera corriendo sobre un servidor físico.
Todos los recursos que consuma nuestra app van a ser previamente configurados en nuestro contenedor si así lo deseamos.

Consideraciones de los contenedores

Es una agrupación de procesos.
Es una entidad lógica, no tiene el limite estricto de las máquinas virtuales, emulación del sistema operativo simulado por otra más abajo.
Ejecuta sus procesos de forma nativa.
Los procesos que se ejecutan adentro de los contenedores ven su universo como el contenedor lo define, no pueden ver mas allá del contenedor, a pesar de estar corriendo en una maquina más grande.

Consideraciones de los contenedores

No tienen forma de consumir más recursos que los que se les permite. Si esta restringido en memoria ram por ejemplo, es la única que pueden usar.
A fines prácticos los podemos imaginar cómo maquinas virtuales, pero NO lo son. Máquinas virtuales livianas.
Docker corre de forma nativa solo en Linux.

Consideraciones de los contenedores

Sector del disco: Cuando un contenedor es ejecutado, el daemon de docker le dice, a partir de acá para arriba este disco es tuyo, pero no puedes subir mas arriba.
Docker hace que los procesos adentro de un contenedor este aislados del resto del sistema, no le permite ver más allá.
Cada contenedor tiene un ID único, también tiene un nombre.

Comandos básicos de Docker

$ docker run hello-world (corro el contenedor hello-world)

$ docker ps (muestra los contenedores activos)

$ docker ps -a (muestra todos los contenedores)

$ docker inspect <containe ID> (muestra el detalle completo de un contenedor)

$ docker inspect <name> (igual que el anterior pero invocado con el nombre)

$ docker run –-name hello-Luis hello-world (le asigno un nombre custom “hello-Luis”)

$ docker rename hello-Luis hola-Luis-UTU (cambio el nombre de hello-Luis a hola-Luis-UTU)

$ docker rm <ID o nombre> (borro un contenedor)

$ docker container prune (borro todos lo contenedores que estén parados)

Docker: Modo interactivo

Vamos a ejecutar el siguiente comando:

$ docker run fedora

Automáticamente se va a descargar el contenedor de la distribución de Gnu/Linux “Fedora”. Dicha distribución contiene todo lo necesario para ejecutar programas dentro de ella.

Para verificar que todo salió bien podemos ejecutar el comando:

$ docker ps -a

Al ejecutar este comando vamos a verificar que en la sección STATUS diga: “EXITED (0)”, eso significa que no hubo errores a la hora de descargar la imagen de Fedora.
IMPORTANTE: Si bien ejecutamos docker run en vez de docker pull, docker automáticamente reconoce que la imagen no está en nuestro sistema y la descarga.

Para acceder a la imagen de Fedora vamos a ejecutar el modo interactivo, para eso vamos a ejecutar la siguiente órden:

$ docker run -it fedora

Nuestro prompt automáticamente cambiará al sistema de archivos de Fedora como se muestra en la imagen de arriba.

¿Qué acaba de pasar?

Cada vez que un contenedor se ejecuta, en realidad lo que ejecuta es un proceso del sistema operativo. Este proceso se le conoce como Main process.
El Main process determina la vida del contenedor, un contenedor 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

Docker: Modo interactivo (–detach)

Para evitar que nuestro contenedor se apague al ejecutar la orden exit para salir de este deberemos de ejecutar:

$ docker run --name FedoraLuis -d fedora tail -f /dev/null

Poder verificar que éste contenedor está encendido usando:

$ docker ps 

Para acceder a este contenedor vamos a usar el comando exec

$ docker exec -it FedoraLuis bash

Al ejecutar el anterior comando estamos por fuera del proceso principal, accedemos a un shell “bash” que se ejecuta dentro de Fedora, pero que al salir no se cerrara el contenedor.

Si queremos ver que está pasando dentro del contenedor podemos ejecutar:

$ ps -aux

Si ejecutamos el comando exit dentro de nuestro contenedor y luego al salir ejecutamos docker ps, vamos a ver que nuestro anterior proceso sigue aún en pie.

Para detener la ejecución tenemos que obtener el PID del contenedor, para eso vamos a ejecutar docker usando el modificador inspect:

$ docker inspect --format ‘{{.State.Pid}}’ FedoraLuis

Este comando nos devuelve automáticamente el PID de nuestro contenedor, luego solamente ejecutamos:

$ sudo kill -9 número_del_proceso

OFFTOPIC – ¡¡¡Algunos comandos más !!!

$ docker stop apacheLuis
-- Detiene el contenedor de apacheLuis
$ docker rm apacheLuis
-- Elimina el contenedor
$ docker rm -f apacheLuis
-- Detiene el contenedor y lo elimina: NO RECOMENDABLE

Esto es solo el inicio de docker, vamos a seguir trabajando con más comandos interesantes.

Deja un comentario

I’m Luis E. Fagúndez

Bienvenidos a mi página web personal. Mi nombre es Luis, me gusta enseñar, programar y tomar litros y litros de café.

En esta web vas a encontrar materiales sobre educación, programación, Gnu/Linux, software libre y mucho más.

Esta web busca brindar información sobre las asignaturas que imparto en DGETP-UTU, así como proyectos personales y otras cosas.

Gracias por ser parte de esta hermosa comunidad.

Formas de contacto