Mi Blog

No te olvides seguirme en Facebook.

Tan solo tienes que hacer click en Me Gusta

 

 

x

Primeros pasos con Docker

Primeros pasos con Docker

(Tiempo estimado: 6 - 11 minutos)

En este tutorial aprenderemos los primeros pasos para comenzar a usar Docker y ver como funciona. Este tutorial es muy sencillo y aprenderemos a descargar las imágenes, arrancar los contenedores y detenerlos. En tutoriales posteriores aprenderemos opciones mas avanzadas.

Seguid leyendo y os enseñaré los primeros pasos para aprender a trabajar con Dockers...

⬇️ Conoce el hardware que utilizo ⬇️

🔥 HAZ CLICK AHORA 🔥

 

 

¿QUÉ ES UNA IMAGEN DE DOCKER?

Dos conceptos fundamentales a la hora de entender Docker son: los contenedores y las imágenes.

Docker encapsula las aplicaciones en contenedores. Un contenedor es el equivalente a una máquina virtual de la virtualización clásica, pero mucho más liviana porque utiliza recursos del sistema operativo del host. Las aplicaciones de cada contenedor "ven" un sistema operativo, que puede ser diferente en cada contenedor, pero quien realiza el trabajo es el sistema operativo común que hay por debajo.

Docker crea los contenedores a partir de imágenes. Las imágenes son una especie de plantillas que contienen como mínimo todo el software que necesita la aplicación para ponerse en marcha. Las imágenes se pueden crear a partir de otras imágenes más básicas incluyendo software adicional en forma de capas. Todos los contenedores creados a partir de una imagen contienen el mismo software, aunque en el momento de su creación se pueden personalizar algunos detalles.

 

 

Docker puede arrancar varios contenedores a partir de una imagen

 

 

1.- ELEMENTOS NECESARIOS PARA ESTE TUTORIAL

  • Un PC con Dockers instalado
  • Conexión a Internet

 

 

2.- INSTALAR DOCKER

El proceso de instalación de Dockers no se tratará en este tutorial. Si queréis, podéis visitar el siguiente enlace y aprender paso a paso Cómo Instalar Dockers en GNU/Linux Debian.

 

3.- IMAGEN DE APACHE

Para instalar la imagen de Apache desde el repositorio oficial de Docker Hub ejecutaremos el siguiente comando:

raul@debian:~$ sudo docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
f7ec5a41d630: Pull complete
d1589b6d8645: Pull complete
83d3755a8d28: Pull complete
f8459b08e404: Pull complete
30fabbf5a067: Pull complete
Digest: sha256:a6e472ad921c93d9fc2cbe2ff07560b9a526c145c4e10faff3aeb28c48cce585
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest

 

 

Para comprobar las imágenes que tenemos en el sistema, ejecutaremos el siguiente comando. Se puede ver que solo tenemos la imagen de Apache (httpd) descargada:

raul@debian:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest 0b932df43057 2 weeks ago 138MB

 

 

Para ejecutar la imagen, ejecutaremos el siguiente comando con las siguientes opciones:

  • -dit: Ejecutar en modo "detached" e interactivo.
  • -p 8000:80: Redirige el puerto 8000 del Docker al 80 local.
  • --name="servidorweb1": Nombre del contenedor

 

raul@debian:~$ sudo docker run -dit -p 8000:80 --name="servidorweb1" httpd
1644f9751f23e5215e0369dd9aae4590ed389f62d9028ad49712894f4c7c87ab

 

 

Una vez arrancada la imagen, se creará un contenedor con un ID único para dicha ejecución. Si queremos ver los contenedores que están actualmente funcionando en el equipo ejecutaremos el siguiente comando:

raul@debian:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1644f9751f23 httpd "httpd-foreground" 20 seconds ago Up 19 seconds 0.0.0.0:8000->80/tcp, :::8000->80/tcp servidorweb1

 

 

Se pueden ejecutar las imágenes tantas veces como queramos (siempre que tengamos recursos de hardware suficiente). Por ejemplo, podemos volvemos a lanzar la imagen de Apache pero utilizando otro puerto:

raul@debian:~$ sudo docker run -dit -p 9000:80 --name="servidorweb2" httpd
a1fbb58af06695b9ccfc493b5825047cc215eaef4eb42b3097123c3016725765

 

 

Si comprobamos ahora los contenedores que están funcionando, veremos que están funcionando los 2 que hemos ejecutado pero en diferentes puertos:

raul@debian:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1fbb58af066 httpd "httpd-foreground" About a minute ago Up About a minute 0.0.0.0:9000->80/tcp, :::9000->80/tcp servidorweb2
1644f9751f23 httpd "httpd-foreground" 2 minutes ago Up 2 minutes 0.0.0.0:8000->80/tcp, :::8000->80/tcp servidorweb1

 

 

Si accedemos a la IP del equipo donde está corriendo el contenedor con la imagen de Apache, veremos que funciona perfectamente:

Primeros pasos DockerContenedor puerto 8000 Apache

 

 

Si accedemos a la IP del equipo donde está corriendo el contenedor con la imagen de Apache pero en el otro puerto, veremos que funciona perfectamente:

Primeros pasos DockerContenedor puerto 9000 Apache

 

 

Si queremos detener un contenedor, podemos hacerlo a través del id o a través de nombre del contenedor: 

raul@debian:~$ sudo docker stop servidorweb1
servidorweb1
raul@debian:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1fbb58af066 httpd "httpd-foreground" 3 minutes ago Up 2 minutes 0.0.0.0:9000->80/tcp, :::9000->80/tcp servidorweb2
1644f9751f23 httpd "httpd-foreground" 3 minutes ago Exited (0) 7 seconds ago servidorweb1

 

 

Si detenemos uno de los contenedores y volvemos a acceder vía Web, veremos que efectivamente ya no funciona:

Primeros pasos DockerContenedor parado

 

 

Si queremos arrancar un contenedor, podemos hacerlo también a través del id o a través de nombre del contenedor: 

raul@debian:~$ sudo docker start 1644f9751f23
1644f9751f23
raul@debian:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1fbb58af066 httpd "httpd-foreground" 5 minutes ago Up 5 minutes 0.0.0.0:9000->80/tcp, :::9000->80/tcp servidorweb2
1644f9751f23 httpd "httpd-foreground" 6 minutes ago Up 3 seconds 0.0.0.0:8000->80/tcp, :::8000->80/tcp servidorweb1

 

 

Para borrar definitivamente contenedor, podemos hacerlo a través del id o a través de nombre del contenedor utilizando el siguiente comando. Si nos da error, podemos añadir -f para forzar el borrado:

raul@debian:~$ sudo docker rm a1fbb58af066
Error response from daemon: You cannot remove a running container a1fbb58af06695b9ccfc493b5825047cc215eaef4eb42b3097123c3016725765. Stop the container before attempting removal or force remove
raul@debian:~$ sudo docker rm a1fbb58af066 -f
a1fbb58af066

 

 

Si tenemos muchos contenedores y queremos eliminarlos, ejecutaremos el siguiente comando que elimina todos los contenedores del listado de una vez:

raul@debian:~$ sudo docker rm $(docker ps -aq) -f
8f25977ebd61
612332e442a3
46f1d9dc9890
feebe0a74db8
1644f9751f23
raul@debian:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

 

 

Si queremos borrar una imagen, en ese caso la imagen de Apache, ejecutaremos el siguiente comando: 

raul@debian:~$ sudo docker rmi httpd
Untagged: httpd:latest
Untagged: httpd@sha256:a6e472ad921c93d9fc2cbe2ff07560b9a526c145c4e10faff3aeb28c48cce585
Deleted: sha256:0b932df43057fbcc4276ae50fc0efe2f446d1955066d5774e764ef1f77638511
Deleted: sha256:2a455380a6b6556b6c74970d3ed6ed7cdf129faf017b0df678cf90c661df7971
Deleted: sha256:cb1255155eeaa614a1c12714454886e6581b78bc5942d1edf1910f67b9b81ea2
Deleted: sha256:6e35a2713ae7c4b470f2e3e245c3f0f7808911d4086ecd32e1dc9b53c184a94a
Deleted: sha256:902d020d1a22522b22d02e2787652b9f4b306d619d742216eeee0af2d800cde2
Deleted: sha256:7e718b9c0c8c2e6420fe9c4d1d551088e314fe923dce4b2caf75891d82fb227d
raul@debian:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE

 

 

Comprobamos que ya no existe ninguna imagen descargada:

raul@debian:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE

 

 

En los siguientes tutoriales os enseñaré a modificar el contenido del contenedor, y a crear una nueva imagen.

 

 

ENJOY!


⬇️ Conoce el hardware que utilizo ⬇️

🔥 HAZ CLICK AHORA 🔥
Raúl Prieto Fernández

Sitio Web: raulprietofernandez.net

Si quieres ir rápido, ve solo. Si quieres llegar lejos, ve acompañado.

No tienes permisos para escribir comentarios. Debes autenticarte con Facebook, Linkedin, Twitter o Google.