Introducción a Docker

Instalar Docker

Hay muchas formas de instalar Docker. Hay para Windows, Mac y Linux. Se puede instalar de manera local, en nuestros laptops, on premises, y en la nube.

Aunque existan tantas formas tan diversas, para hacerlo es tan fácil como una búsqueda en Google: “Como instalar Docker en Mac” por ejemplo y seleccionar la documentación oficial.

Para no tener que escribir en Google, dejo aquí los enlaces directos:

En caso de no tener acceso a una instalación local, podemos hacer uso de:

Un poco de contexto

Cuando instalamos Docker instalamos dos componentes:

  • El cliente de Docker
  • El demonio de Docker(También conocido como el motor de Docker)

El demonio de Docker implementa el entorno de ejecución y el cliente de Docker todo lo demás requerido para ejecutar Docker.

En una instalación normal de Linux, el motor de Docker se encuentra en /var/run/docker.sock

Antes de ejecutar comando de Docker, si estamos en Windows o Mac tenemos que iniciar Docker desktop, en caso de estar en Linux tenemos que asegurarnos que Docker se está ejecutando y si no queremos anteponer sudo a todos los comando de Docker que ejecutemos tenemos que añadir a nuestro usuario al grupo de Docker, es tan fácil como ejecutar los siguientes comandos:

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

Podemos ver más al respecto en la documentación oficial:

Una vez que tenemos instalado Docker y nos hemos asegurado que se está ejecutando, podemos probarlo con los siguientes comandos:

docker version # Nos mostrara la version de nuestro docker client y nuestro docker engine
docker info # Muestra información de todo el sistema con respecto a la instalación de Docker

Imágenes Docker

Es muy útil pensar en una imagen como un objeto que contiene la estructura de archivos de un sistema operativo, una aplicación y todas las dependencias de esa aplicación. Si eres un desarrollador puedes pensar en una imagen de Docker como una clase de la programación orientada a objetos.

Para ver las imágenes que tenemos en nuestro Docker host(lugar donde tenemos instalado Docker), podemos ejecutar el comando: docker image ls

En este caso él resulta no nos muestra ninguna imagen, ya que estamos en un entorno Docker recién instalamos Docker.

Para obtener imágenes en nuestro entorno tenemos que hacer “pulling” de una imagen. Que básicamente es descargarla de un repositorio en la nube a nuestro entorno local. Por ejemplo, para descargar la imagen llamada ubuntu:latest ejecutamos el sig. Comando: docker pull ubuntu:latest

Ahora cuando ejecutamos docker image ls nuevamente podemos ver que ya tenemos una imagen descargada

La imagen que descargamos es una versión simplificada de Ubuntu y las librerías comunes de Ubuntu, cuando descargamos imágenes como ngins:latest estamos descargando algún SO simplificado, así como el código y las dependencias de nginx.

Para descargar la imagen de nginx ejecutamos docker image pull nginx:latest

Cuando ejecutamos este comando le decimos a Docker que descargue la imagen con el nombre nginx y el tag latest, podemos ver el tag como la versión de la imagen a descargar, por defecto el tag latest nos descarga la última versión.

Contenedores de Docker

Para facilitar el que es un contenedor podemos verlo como la instancia de una imagen, en programación orientada a objetos la clase sería la imagen y el contenedor sería la construcción en tiempo real de esa imagen.

Para ejecutar un contenedor basado en la imagen que descargamos de nginx podemos ejecutar el sig. Comando: docker container run -it -p 8080:80 --name web nginx:latest

Este comando parece demasiado largo, veámoslo por partes:

docker container run Le decimos a Docker que queremos ejecutar un contenedor

-i Deja el estándar input(STDIN) abierto, incluso si no se está usándose

-t Asigna una pseudo-tty

usualmente, se usan juntos -it para especificar que queremos ejecutar el contenedor de manera interactiva

-p Publica el puerto de un contenedor en un puerto del host donde se está ejecutando, en este caso, publicamos el puerto 80 del contenedor en el puerto 8080 de nuestro host

--name con este flag podemos poner un nombre a nuestro contenedor para no tener que usar el id que se le genera para realizar operaciones sobre él

nginx:latest para finalizar indicamos el nombre y el tag de la imagen que queremos ejecutar.

Así es como ejecutamos un contenedor de nginx con el nombre web y publicamos el puerto 80 para poder verlo desde nuestro local. Ahora para hacer una petición podemos hacer una petición a localhost:8080 y el contenedor debería de respondernos:

A su vez podemos ver los logs de nuestro nginx, ya que ejecutamos el contenedor con los flags -it

Esto es genial!, para detener salirnos del contenedor podemos pulsar ctrl + c

Ahora listaré algunos otros comando muy útiles:

  • listar contenedores ejecutándose: docker container ls, en la siguiente imagen podemos ver el resultado del comando, para poder hacerlo abrí una nueva sesión de la terminal, ya que lo ejecutamos en primer plano con los flags -it
  • Eliminar un contenedor: docker container rm web , en este caso estamos eliminando el contenedor con el nombre web, pero fallo porque se está ejecutando en el otro terminal, así que para forzar la eliminación podemos el flag -f
  • Ejecutar un contenedor en segundo planodocker container run -d --name web nginx:latest, como podemos ver a continuación ejecutamos un contenedor en background y de esa forma podemos seguir ejecutando los comandos en la misma sesión de la terminal.

Próximas entradas:

Como crear una imagen propia de un servidor web creado con node y express

--

--