Docker es una herramienta que fue creada para hacer más fácil la generación, despliegue y ejecución de aplicaciones dentro de contenedores. Los contenedores sirven como paquetes para las aplicaciones y cuentan con todos los componentes importantes que requiere para ejecutarse, tales como librerías y otras dependencias, todo esto es colocado dentro de un paquete. Debido a esto último, el desarrollador puede asegurarse de que su aplicación se ejecutará en cualquier otra máquina.
Relacionado: Las 6 mejores soluciones de administración de contenedores.
En la siguiente guía se comenzará por explicar los aspectos básicos de Docker para después pasar a los comandos importantes requeridos para la operación de Docker.
Arquitectura de Docker.
La arquitectura de DevOps consiste en cinco entidades principales: registro, imagen, contenedor, demonio y cliente.
- Registro. Hospeda las imágenes públicas y oficiales.
- Imágenes. Pueden ser descargadas desde el registro directamente o de forma indirecta cuando se inicia un contenedor.
- Contenedores. Instancias de imágenes. Es posible tener múltiples contenedores a partir de una sola imagen.
- Demonio de Docker. Crea, ejecuta y monitorea contenedores. Construye y almacena imágenes.
- Cliente. Le habla al demonio por medio de http.
Orquestación.
La orquestación se utiliza para gestionar el ciclo de vida de un contenedor, especialmente en entornos dinámicos. Se utiliza para controlar y automatizar muchas tareas para los contenedores.
Hay muchas herramientas de orquestación Docker como Docker Swarm, Kubernetes, etc. En esta guía, estamos dilucidando los comandos de Docker Swarm. Echemos un vistazo a los comandos utilizados para la orquestación Docker.
Comandos:
- Para iniciar el modo Swarm y escuchar interfaces específicas:
Docker swarm init -advertise-addr 10.1.0.2
- Unirse a un Swarm existente como un nodo administrador:
Docker swarm join -token<token-del-administrador> 10.1.0.2:2377
- Unirse a un Swarm como un nodo «worker»:
Docker swarm join -token<token-del-worker> 10.1.0.2:2377
- Listar todos los nodos en el swarm:
Docker node ls
- Crear un servicio a partir de una imagen y desplegar 3 instancias:
Docker service create -replicas 3 -p 80:80 name -webngix
- Listar servicios que se ejecutan en el Swarm:
Docker service ls
- Escalar un servicio:
Docker service scale web=5
- Listar tareas de un servicio:
Docker service ps web
Construcción (build).
El comando de construcción (build) se usa para construir imágenes desde un archivo Docker. Veamos ahora algunos de los comandos de construcción esenciales de Docker.
Comandos:
- Para construir una imagen a partir de un archivo de Docker (Docker file) y etiquetarlo:
Docker build -t myapp :1.0
- Para enlistar todas las imágenes que están almacenadas localmente:
Docker images
- Para eliminar una imagen del almacenamiento de Docker:
Docker rmi alpine: 3.4
Ejecución (run).
El comando de ejecución (run) se utiliza para crear un contenedor a partir de una imagen especificada. Echa un vistazo a los siguientes comandos de ejecución.
Comandos:
- Para crear y ejecutar un comando:
Docker run --name container_name docker_image
Flags utilizadas:
- -d: Para separar un contenedor en el inicio.
- -rm: Para eliminar un contenedor una vez que se haya detenido.
- -p: Para publicar la IP y el puerto del huésped hacia el puerto del contenedor.
- -v: Para definir y compartir el volumen a través de contenedores.
- –read-only: Para configurar permiso de sólo lectura.
Envío
Docker nos da la capacidad de enviar nuestro contenedor de aplicaciones a cualquier lugar, en cualquier plataforma. Veamos algunos comandos utilizados para ello.
Comandos:
- Para extraer una imagen del registro:
Docker pull alpine:3.4
- Para reetiquetar una imagen local con un nuevo nombre de imagen:
Docker tag alpine:3.4 myrepo/ myalpine:3.4
- Para iniciar sesión en el registro:
Docker login my.registry.com:8000
- Para enviar una imagen al registro:
Docker push myrepo/ myalpine:3.4
Limpieza.
Para evitar el desperdicio de recursos, debemos saber cómo limpiar. En esta guía se proporcionan algunos comandos de limpieza esenciales.
Comandos:
- Para limpiar imágenes sin utilizar:
Docker image prune
- Para eliminar imágenes no utilizadas en contenedores:
Docker image prune -a
- Para depurar todo el sistema:
Docker system prune
- Para dejar un Swarm:
Docker swarm leave
- Para eliminar un swarm:
Docker stack rm stack_name
- Para detener todos los contenedores en ejecución:
Docker kill $ (docker ps -q)
- Para eliminar todos los contenedores detenidos:
docker rm $(docker ps -a -q)
- Para eliminar todas las imágenes:
docker rmi $(docker images -q)
Servicios.
Echemos ahora un vistazo a los comandos utilizados para ver los servicios en ejecución, para ejecutar los servicios, para ver todos los registros de servicios, y para dimensionar los servicios.
Comandos:
- Para enlistar todos los servicios que se ejecutan en un swarm:
Docker service ls
- Para ver todos los procesos en ejecución:
Docker stack services stack_name
- Para ver todos los registros de servicio:
Docker service logs stack_name service_names
- Para dimensionar un servicio entre nodos calificados:
Docker service scale stack_name_service_name= replicas
Interacción con un contenedor.
Vamos a ver cómo hacer una interacción con un contenedor en Docker.
Comandos:
- Para ejecutar un comando en un contenedor:
Docker exe -ti container_name command.sh
- Para seguir los registros del contenedor:
Docker logs -ft container name
- Para guardar como imagen un contenedor que se encuentra en ejecución:
Docker commit -m “commit message” -a “author” container_name username/image_name: tag
Términos importantes:
A continuación se enumeran algunos de los términos importantes que deben conocerse al utilizar los contenedores Docker:
Capa (Layer): Archivos de sólo lectura para aprovisionar el sistema.
Imagen (Image): Capa de sólo lectura que es la base de una imagen.
Contenedor (Container): Una instancia ejecutable de la imagen.
Registro/centro (Registry/hub): Un lugar central donde residen las imágenes.
Máquina de Docker (Docker Machine): Una máquina virtual para ejecutar contenedores de Docker.
Docker Compose: Una máquina virtual para ejecutar múltiples contenedores como un sistema.
Los anteriores fueron los comandos más importantes que se utilizan en Docker y Docker Swarm, los comandos de Orquestación varían dependiendo del orquestador, pero los comandos de Docker son los mismos en esencia.
Si quieres saber más acerca de la orquestación de contenedores en Kubernetes, por ejemplo, le recomendamos el siguiente seminario web: [Webinar] Arquitectura de microservicios con Kubernetes en Amazon EKS