¿Qué es Docker y cómo puedo usarlo?
Hace un par de años he sido usuario de docker por mi trabajo, generalmente lo uso para que mi entorno de desarrollo sea igual al de mis compañeros de trabajo. La cosa es que este año toooodo cambió o.o, este año aprendí que docker sirve para más cosas, docker me permitió instalar y gestionar aplicaciones en mi Raspberry Pi y en mi MiniPC (de ahora en adelante lo llamaré, Freya). Acá les cuento un poco de qué es y cómo lo pueden usar también para instalar software.
¿Qué es docker?
Comienzo diciendo que: en esto no me voy a extender y que tampoco es una explicación técnica 😛.
Entonces... qué es docker? no se si todos lo saben pero normalmente un programa tiene dependencias, es decir, depende de otros programas para que funcione (🤯). Por ejemplo, pensemos en... este blog. Este blog se puede visualizar porque almacena la información en una base de datos (una base de datos es un programa). Este blog también funciona porque existe otro programa (nginx) que gestiona las páginas y las conexiones de varios usuarios. Entonces en este simple ejemplo vemos que este blog funciona por tres programas (son más, muuuchos mas jeje):
- Programa 1: Ghost (muy recomendado), en pocas palabras: me permite escribir nuevas entradas.
- Programa 2: la base de datos. Hay muchas en el mercado, pongo una solo por poner un ejemplo, https://www.postgresql.org/
- Programa 3: nginx, un servidor web para el blog.
Si se dan cuenta, un solo blog depende de otros programas. Justo aquí es donde viene docker a la ayuda, docker permite instalar una aplicación y sus dependencias en un contenedor aislado de otras aplicaciones.
En el ejemplo de arriba se muestra a docker teniendo varias aplicaciones instaladas: tomcat, java, debian, php, mysql, etc. Cada una de estas puede ser reemplazadas por el ejemplo de ahorita: ghost, postgresql y nginx.
Entonces simplemente es eso 😛:
Lo chévere del asunto es que como esta en un contenedor aislado, no tiene conflictos con las otras aplicaciones que tengas en tu computador.
¿Cómo lo uso?
Bueno, ya sabemos que docker te permite empaquetar en un contenedor aislado una aplicación y sus dependencias. Docker puede hacer esto mediante una aplicación que se llama docker compose. Ahora... te preguntarás, dónde o cómo docker/docker compose sabe qué instalar y qué no instalar? Todo esto se escribe en un archivo de tipo yaml
, veamos un ejemplo:
Exploremos cada línea:
services
: Esto dice que se van a declarar servicios (contenedores)plex
: Esto dice que estamos creando un contenedor llamado plex, acá podemos poner cualquier nombre siempre y cuando este separado con guiones bajos o guiones medios, ejemplo:mi-plex
,mi_plex
image
: Esta línea dice de donde se va a descargar plex. En este caso vamos a descargar plex delscr.io/linuxserver
.
- Antes de seguir, si se dan cuenta después de
lscr.io/linuxserver/plex
hay más información:latest
. Esto define la versión que se va a descargar, en este caso vamos a descargar el taglatest
el cual lleva a la última versión.
container_name
: Esta definición es opcional, esta permite ponerle el nombre al contenedor, aquí estamos diciendo que se va a llamarplex
environment
: Con esta definición podemos especificar variables de entorno, estas dependerán de lo que queramos instalar. Generalmente estas variables se describen en el proyecto github que deseamos instalar. En este caso, se esta definiendo solo una variable de entorno, la zona horaria (tz)volumes
: Aquí definiremos las carpetas que se compartirán entre nuestra máquina y el contenedor.
- En este caso estamos diciendo que se va a compartir la carpeta
/path/to/movies
que esta en nuestra máquina con la carpeta/movies
que esta en el contenedor. Esto significa que todos los archivos que pongamos en/path/to/movies
van a aparecer dentro del contenedor y viceversa. - Algo importante, si se dan cuenta, las carpetas están separadas por un
:
, lo que esta a la izquierda será la carpeta de nuestro computador (host) y lo de la derecha será la carpeta de nuestro contenedor.
Algo muy importante de mencionar es que los archivos yaml
tienen un orden/estructura, esto te permite saber qué esta dentro de qué. En el caso del ejemplo, image
y container_name
son "hijos" de un servicio llamado plex
.
Bueno, ahora que ya entendemos unos conceptos básicos sobre docker compose, ahora se preguntarán... y de dónde saco otros yamls para instalar otras aplicaciones? Generalmente pueden encontrarlo en:
- Repositorios Github: Normalmente estos archivos o ejemplos de estos se encuentran en la documentación de cada proyecto en github.
- Repositorio de linuxserver.io: Es un sitio muy reconocido que aloja proyectos con su respectiva documentación, muy recomendado.
- Buscando en Google: Si buscan por el nombre de la aplicación seguido de "docker-compose", podrán encontrar varios ejemplos de la configuración. Por ejemplo, si quiero buscar como instalar sonarr, podría buscar por:
sonarr docker compose
Y bueno, esto fue un overview de docker y de como usarlo 👍