Docker vs Hypervisor
Docker nos permite virtualizar contenedores que estos manejan su propio sistema independiente y estos se ejecutan en un mismo sistema operativo compartiendo recursos.
Aquí podemos ver la diferencia de docker vs máquinas virtuales.

Para este curso necesitaremos linux, en mi caso use una máquina virtual con Oracle Virtual Box, en mi caso opté por el viejo confiable que es Ubuntu.
La instalación la hacemos usando la terminal con las instrucciones desde la página oficial: https://docs.docker.com/engine/install/ubuntu
Docker Hub
Docker Hub es un sitio oficial de docker donde tenemos una biblioteca de imagenes listas para montar, desde sistemas operativos y aplicativos, como sql server for linux, que es el que he usado para un VPS que tengo en OVH.
Para este curso bajaremos la siguiente versión de debian: debian:bullseye
Recordemos que cada imagen puede tener múltiples tags, eso hace referencia que son versiones del mismo sistema y este se define con dos puntos <:>, ejemplo:

Al ejecutar docker run, es el comando para inicializar un contenedor, pero al no encontrarlo comienza a descargarlo desde el repositorio.
El comando para enlistar los contenedores en ejecución es el siguiente:
docker ps
Sin embargo posiblemente se muestre vacío, por eso añadir el parámetro -a para mostrar todos, aunque estos no esten en ejecución.
docker ps -a

También existe un comando similar que nos dirá que imágenes que tenemos descargadas/disponibles, una imagen es digamos que el archivo fuente para poner en marcha un contenedor. El contenedor es la imagen ya ejecutada/corriendo.
docker images
Comandos esenciales:
Mostrar información de nuestro estado general de docker_
docker info
Crear un contenedor a partir de una imagen
docker run
Eliminar un contenedor:
docker rm <IdContedor>
Ejecutar un contenedor con un comando -it que es una abreviación de –interactive.
Esta parte me trajo confusión ya que no encontré mucha documentación así que indagando esta respuesta de stackoverflow me pareción interesante:
Docker’s / allows you to send commands to the container via standard input («STDIN»), which means you can «interactively» type commands to the pseudo-tty/terminal created by the switch.
-i--interactive-t
Aquí realizando la ejecución, descarga la última imagen de debian , inicia el contenedor y la consola bash:

Como podemos ver, el @ ahora tiene un identificador y ya no es el nombre de nuestro equipo, esto quiere decir que estamos dentro del contenedor y su terminal.
Tip de productividad al trabajar en la consola de linux.
Para copiar y pegar algo en automático de la terminal, simplemente seleccionamos y apretamos el tercer botón del mouse.
Ejecutar un contenedor en segundo plano
Para este ejemplo lanzaremos un contenedor de un servidor http (apache), con el siguiente comando:
docker run httpd
Nos ejecutará en primer plano y para salir tendremos que presionar Ctrl + C como si estuviéramos en un editor de texto y se cerrara el contenedor.
Para ejecutar en segundo plano usaremos el comando -d
docker run -d httpd
Saber la ip asignada a un contenedor
Usaremos el comando docker inspect, sin embargo esto muestra bastante información, entonces añadiremos el parámetro | less
docker inspect 2b113500a6c8| less


Para salir del modo less presionamos la tecla «q»
Para acceder directamente a la línea que nos interesa, podemos apoyarnos del comando grep
docker inspect 2b113500a6c8| grep IPAddress

Final mente ejecutamos docker stop para detener nuestra imagen y luego borrarla con docker rm

Docker ps opciones
Para poder visualizar la ayuda o opciones de un comando, podemos poner el parámetro –help al final de nuestro comando, se desplegará lo siguiente:

Opciones con el comando docker ps
-a | Muestra todos los contenedores independientemente de su estado |
-l | últimos contenedores creados (lates) |
-q | Solo los identificadores de los contenedores |
-s | Cuánto espacio ocupa cada contenedor |
-f | Filtra la lista de contenedores según criterios (Profundizar con documentación) |
–format | Podemos elaborar nuestro propio formato del listado y que campos traer. (Profundizar con documentación) |
Eliminar contenedores
El comando rápido para borrar nuestro contenedor (previamente detenidos)
docker rm <ContainerId>
Detener todos los contenedores activos
docker stop $(docker ps -q)
Ejecutar comandos dentro de contenedores
Para ejecutar un comando en un contenedor, este tiene que estar en ejecución, para evitar su cerrado ponemos la opción -di o –detach
docker run -di debian
Ejemplo para ejecutar un comando dentro de un contenedor:
docker exec 683cc25900a6 uname -a

Para entrar dentro de batch y ejecutar múltiples comandos, podremos entrar de modo interactivo con el siguiente comando:
docker exec -it 683cc25900a6 bash
