Muy buenas!
Primeramente realizaremos la instalación sobre centos 7 y luego haremos una breve introducción y comandos básicos
Introducción:
Antes de empezar, primero te explico que es docker. Antes y te hablo de hace puede 40 años para cada aplicación que se quería desplegar (web comercial, etc) se desplegaba todo en un servidor físico, sí como oyes.
Luego debido al alto coste que tenía esto y al gasto de electricidad tan alto empezaron a pensar en otras soluciones y una de ellas que apareció fue vmware con el nuevo concepto llamado <virtualización>, el caso es que también te digo que antes de vmware ya existía la virtualización en IBM pero bueno.
Total que el mundo de la virtualización es muy bonito, y tanto, pero hasta cierto punto, ¿Qué quiero decir con esto? Pues que hay que ser práctico, con la virtualización y los hypervisores solucionan el hecho de que antes todo se tenía que instalar en un solo server físico, pero es que con esto tendrás el mismo problema de forma virtual, aparte que llega un punto que desplegar wordpress y derivados sobre una vm no es eficiente. Y no es eficiente por un simple punto: tener que instalar todas las librerías y software cada vez y esto te va a llevar bastante tiempo.
¿Entonces qué? Pues Ahí es donde viene el papel de docker. Docker nos permite desplegar contenedores que solo ejecutan una aplicación (PHP, NGINX, NextCloud), entonces todo el proceso de despliegue es mucho mas sencillo. Tu imagínate en un servidor, le tienes que instalar mysql, php, nginx y configurar todo esto para que funcione bien y sea seguro. Con docker creas un docker-compose con los servicios que quieres, los enlazas (todo esto lo veremos mas adelante) y una vez enlazados montas volúmenes y a córrer. Cada vez que tengas que desplegar un wordpress por poner un ejemplo no tendrás que instalar todo otra vez si no que cogerás las imágenes ya configuradas por ti y lo pondrás en el docker-compose con sus volúmenes respectivos.
Todo esto te va a llevar algo de tiempo aprenderlo, pero una vez aprendas te darás cuenta que para según que entornos te va a ser muy eficiente.
¿Cómo funciona docker?
Lo bueno de docker y la diferencia on virtualbox/vmware/proxmox, es que puedes crear espacios pequeños dentro de un sistema operativo de manera aislada y con la aplicación que quieras sin necesidad de emular todo el sistema operativo entero.
Docker al correr por encima del sistema operativo y al utilizar el mismo kernel de linux puede utilizar todos los recursos del host (RAM, CPU, etc).
Para poder crear un contenedor docker, primeramente te tienes que bajar la imagen de hub.docker.com con el repositorio de la aplicación que quieras. Una vez te bajes la imagen de docker en tu sistema ya podrás hacer un docker run.
Instalación docker:
En mi caso lo haré sobre un vps contratado que tengo.
Primeramente instalamos estas herramientas para poder añadir el repositorio a nuestro sistema.
yum install -y yum-utils
Añadimos repositorio de docker al sistema.
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
Instalación de paquetería
yum install docker-ce docker-ce-cli containerd.io
Para habilitar el daemon de docker cada vez que iniciemos el servidor:
systemctl enable docker
Para ejecutar el servicio de docker.
systemctl start docker
Verificamos que docker esté ejecutándose:
systemctl status docker
Verificar que docker funciona
Para verificar que docker funciona correctamente ejecutaremos un contenedor hello-world.
docker run hello-world
Veremos que funciona correctamente.
Comandos básicos:
docker ps
-> Listar contenedores.
Parámetros:
— all o -a -> Lista todos los contenedores estén encendidos o apagados.
— filter o -f -> Filtrar contenedores según unos parámetros que le pasemos.
id -> ID del contenedor
name -> Nombre del contenedor
status -> Estado del contenedor que puede ser: created, restarting, running, removing, paused, exited o dead.
volume -> filtra los contenedores que tengan volúmenes montados.
network -> filtra los contenedores running con la network que le pasemos.
— last [numero] -> muestra los últimos contenedores creados.
— latest -> Muestra el último contenedor creado.
— quiet -> mostrar sólo el nombre del contenedor en ejecución.
— size -> Mostrar el volumen total de lo que ocupan los ficheros de los contenedores en ejecución.
docker start
-> Encender contenedor.
Parámetros:
— attach o -a -> Encendemos el contenedor y directamente entramos en la shell del contenedor.
docker stop
-> Parar contenedor.
Parámetros:
— time -> tiempo que esperará para parar el contenedor antes de matarlo.
docker run
El comando docker run según docker es para ejecutar comandos sobre un contenedor, pero en la mayoría de casos si no utilizamos docker-compose utilizaremos este comando para levantar los contenedores.
Parámetros:
— attach -> Ejecutamos una shell dentro del contenedor.
STDIN
STDOUT
STDERR
Ejemplo: creamos el contenedor y solo estará encendido mientras ejecuta el comando que le pasamos, una vez ejecute el comando y nos retorne la salida se apagará.
— name -> Darle un nombre al contenedor.
— detach -> Correr el contenedor en segundo plano, de forma que no se parará a menos que ejecutemos docker stop.
— dns [IP,IP] -> Configurar las IP de los DNS del contenedor.
Mediante docker exec que lo explicaré mas adelante de este post, lo que nos permite es que podemos ejecutar comandos en un contenedor corriendo y nos devuelve la salida sin apagar el contenedor.
— env -> Configurar variables de entorno del contenedor (en mysql por ejemplo se le puede poner la variable de entorno de la password de root).
En el caso del contenedor de mysql podemos configurar que la password de root sea la que le pasemos al comando mediante la variable de entorno.
docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=hola1234 -d mysql:latest
Veremos que empieza a descargar la imagen del contenedor.
Veremos que el contenedor esta creado y esta running.
Una de las ventajas que tiene setear la password de mysql a través de variables de entorno es que una vez entramos al contenedor ya tenemos la password actualizada.
— expose -> Abrir al exterior uno o un rango de puertos sólo para los contenedores enlazados, en ningún caso se expondrán al host ni a la red. Normalmente esto se usa en el docker-compose.yml
— memory -> establecer límite de memoria.
— mount -> montar un sistema de ficheros dentro del contenedor.
— net -> conectar un contenedor a una red.
— publish o -p -> publicar un puerto o un rango de puertos al host o a la red para ser accesible.
— rm -> automáticamente eliminar el contenedor una vez lo paremos.
docker exec
Según docker este comando sirve para ejecutar comandos dentro de un contenedor.
Parámetros:
— detach o -d -> Ejecuta un comando en segundo plano.
— env -> Setea variables de entorno.
— interactive -> El contenedor se ejecuta en primer plano y podemos entrar dentro de él pero sin el parámetro — tty no nos dejará ejecutar órdenes des de la shell en el que estamos.
— tty o -t -> para alojar una terminal dentro del contenedor. Pasa algo similar que con el — interactive, que entraremos dentro de la shell, pero no podremos ejecutar órdenes.
Mi recomendación es usar -it de este modo nos asigna una shell y podemos ejecutar comandos.
Y hasta aquí llega este post, si quieres puedes seguir leyendo los otros post de docker que he escrito 🙂