A través de esta guía vamos a instalar la aplicación Docker a fin de poder fabricar una imagen para posteriormente manipularla y encenderla, apagarla, exportarla, modificarla o bien eliminarla del sistema.
sudo apt install docker -y-y para asumir los "yes" automáticamente.
Importante: vamos a agregar el usuario al grupo Docker para que no tengamos que usar sudo, con el peligro que ello representa.
sudo usermod -aG docker <tu-usuario>
newgrp docker
groups
Para verificar la inclusión correcta en el grupo de docker, ejecutamos el comando:
cat /etc/group | grep docker
¿Qué hace esta línea? Muestra el contenido del archivo /etc/group usando cat.
Pasa ese contenido a grep (Global Regular Expression Print), que filtra y muestra solo las líneas que contienen la palabra “docker”. Este comando busca y muestra información sobre el grupo docker en el sistema, incluyendo su idenfiticador de grupo (GID) y los usuarios que pertenecen a él.
Ahora si probamos el comando para listar contenedores en ejecución:
docker ps
Tiene que devolver algo así, ya sin necesidad de usuario root...
CONTAINER ID IMAGE COMMAND CREATED STATUS
A continuación, procederemos a la creación del directorio donde buildear (construir) nuestra imagen.
mkdir janito
cd janito/
Ahora vamos a crear el archivo Dockerfile. “Un Dockerfile es como una receta de cocina que le dice a Docker cómo crear una imagen (un "molde" para tus contenedores). Es un archivo de texto plano que contiene una serie de instrucciones paso a paso que Docker sigue para construir una imagen personalizada”(Definición de IA QWEN2.5-MAX).
nano Dockerfile
Escribimos dentro del mismo:
# Vamos a traer la imagen oficial de Apache 2.4 de DockerHub
FROM httpd:2.4
Guardamos los cambios y a continuación creamos un archivo index.html para mostrar contenido del servidor Apache.
Mediante Nano, editor de texto de línea de comandos, ahora escribimos:
nano index.html
Y copiamos los siguiente:
<!DOCTYPE html>
<html>
<head>
<title>Bienvenido a Docker</title>
</head>
<body>
<h1>Hola, bienvenidos al primer contenedor de LW9ERO sobre Raspberry PI 400!!!</h1>
</body>
</html>
Guardamos con Ctrl+O ¡Ya tenemos página web!
Momento de construir formalmente esto dentro de una imagen, por lo que volvemos a editar con Nano el DockerFile y agregamos ésta línea:
COPY ./index.html /usr/local/apache2/htdocs/
Guardamos y salimos.
Si hacemos un cat DockerFile (mostrar contenido) debe mostrar algo así:
#Vamos a traer de DockerHub la imagen de Apache 2.4
FROM httpd:2.4
COPY ./index.html /usr/local/apache2/htdocs/
¿Que hace la línea que acabamos de agregar?
Copia el index desde la ubicación actual a la imagen del directorio janito
Con el Dockerfile ya listo, procedemos a construir la imagen.
docker build -t <nombrequetendralaimagen> en nuestro caso “janito” y el punto porque el Dockerfile está dentro del directorio actual, entonces quedaría así:
docker build -t janito .
Una vez fabricada la imagen, la corremos con:
docker run -d -p 80:80 --name micontainer janito-d es para ejecutar el contenedor en segundo plano
-p es para exponer un puerto, en este caso el 80, forwardeado al 80 del container. <puerto externo>:<puerto interno>
--name asignamos un nombre del contenedor, espacio y luego el nombre de la imagen que vamos a usar, en nuestro caso, janito.
Si todo está bien mostrará un hash algo así:
500028651b4f663ae80079e35b2065e97cec335e5daf9ffe427e341212121212
Desde el navegador ingresamos localhost o la dirección ip en el caso de uso remoto.
¡Si todo va bien debería aparecer nuestra web con el contenido el html!
GLOSARIO DE TÉRMINOS:DOCKER: Docker es una herramienta que permite empaquetar aplicaciones y todo lo que necesitan para funcionar (como código, bibliotecas, configuraciones y dependencias) en un "paquete" llamado contenedor. Este contenedor puede ejecutarse en cualquier computadora, sin importar el sistema operativo o las diferencias de configuración.
Es como si metieras tu aplicación en una “caja mágica” que la hace funcionar igual en cualquier lugar donde la lleves: tu laptop, un servidor en la nube, o incluso la computadora de un amigo.
IMAGEN: Una imagen en Docker es como un molde o plantilla inmutable que contiene todo lo necesario para ejecutar una aplicación: el sistema operativo base, las dependencias (bibliotecas, paquetes, etc.), los archivos de configuración y el código de la aplicación.
Es decir, una imagen es una instantánea estática que define exactamente cómo debe ser un contenedor cuando se ejecute.
Analogía: piensa en una imagen como un molde para hacer galletitas:
-El molde define la forma y tamaño de la galletitas.
-Cada vez que usas el molde puedes crear una galletita idéntica.
En Docker:
-La imagen es el molde.
-Un contenedor es la "galletita" (instancia en ejecución basada en la imagen).
Características principales de una imagen: Inmutable: Una vez creada, no se puede modificar. Si necesitas cambios, debes crear una nueva imagen.
Portátil: Puedes compartir imágenes entre diferentes sistemas o servidores sin preocuparte por diferencias de entorno.
Capas: Las imágenes están compuestas de capas superpuestas. Cada capa representa un cambio específico (por ejemplo, instalar una dependencia o copiar un archivo). Esto hace que las imágenes sean eficientes en términos de almacenamiento y reutilización.
Basada en un Dockerfile: Las imágenes suelen crearse a partir de un archivo Dockerfile, que contiene instrucciones paso a paso sobre cómo construir la imagen.
Resumen de comandos principalesdocker ps
Muestra los contenedores en ejecución.
docker ps -a
Muestra todos los contenedores (incluidos los detenidos).
docker start
Inicia un contenedor detenido.
docker stop
Detiene un contenedor en ejecución.
docker rm
Elimina un contenedor detenido.
docker run
Crea y ejecuta un nuevo contenedor a partir de una imagen.
docker images
Lista todas las imágenes disponibles en tu sistema.
docker pull
Descarga una imagen desde Docker Hub.
docker build
Construye una imagen a partir de un Dockerfile.
docker rmi
Elimina una imagen de tu sistema.
docker logs
Muestra los logs de un contenedor.
docker exec
Ejecuta un comando dentro de un contenedor en ejecución.
docker inspect
Proporciona información detallada sobre un contenedor o imagen.
docker system prune
Limpia recursos no utilizados