Docker es una plataforma de código abierto que facilita la creación, implementación y administración de aplicaciones en contenedores. Los contenedores permiten empaquetar una aplicación y todas sus dependencias en una única unidad portátil, lo que garantiza que la aplicación se ejecute de la misma manera en cualquier entorno.
Contenedores vs Máquinas virtuales
Contenedores:
- Los contenedores usan el kernel del sistema operativo host, solo se virtualiza el sistema operativo
- Usa pocos recursos del equipo host
- Solo podemos crear contenedores con kernel basado en GNU/LINUX
- Al eliminarlo se borran todos los archivos que contenia
- Para persistir data usamos los Volúmenes
- Capacidades avanzadas de redes LV2, LV3
Máquinas Virtuales:
- Se virtualiza el hardware
- Se usan hipervisores (VMware, Virtual Box, KVM, Gnome boxes, Microsoft Virtual PC)
- Son pesadas (ocupan mucho espacio)
- Reservan el hardware del equipo host (el host no puede utilizarlos)
- Tipos de redes: NAT, BRIDGE
Instalación de Docker
- Instalar Docker Desktop: Visita el sitio web oficial de Docker Desktop (https://www.docker.com/products/docker-desktop/) y sigue las instrucciones de instalación para tu sistema operativo.
Uso básico de Docker
Ejecución de Contenedores
Ejecutar un contenedor:
docker run IMAGE:tag
docker run nginx
docker run node:latest
Ejecutar un contenedor y darle un nombre:
docker run --name CONTAINER IMAGE
docker run --name webserver nginx
Mapear un puerto:
docker run -p HOSTPORT: CONTAINERPORT IMAGE
docker run -p 8080:80 nginx
Mapear todos los puertos:
docker run -P IMAGE
docker run -P nginx
Ejecutar un contenedor en background:
docker run -d IMAGE docker run -d nginx
Asignar un hostname:
docker run --hostname HOSTNAME IMAGE
docker run --hostname srv nginx
Mapear un directorio local dentro del contenedor:
docker run -v HOSTDIR: TARGETDIR IMAGE
docker run -v ~/mydir:/usr/share/nginx/html nginx
Definir Variables de Entorno:
docker run -e ENV_VAR=value IMAGE
docker run -e POSTGRES_PASSWORD=passsword postgres
Ejecutar un contenedor interactivo:
docker run -it ubuntu
Detener un contenedor en ejecución:
docker stop <ID del contenedor o nombre>
Ejecutar un contenedor detenido:
docker start <ID del contenedor o nombre>
Ejecutar una Terminal dentro de un contenedor:
docker exec -it CONTAINER EXECUTABLE
docker exec -it webserver bash
Administración de Contenedores
Eliminar un contenedor:
docker rm <ID del contenedor o nombre>
Listar contenedores en ejecución:
docker ps
Listar todos los contenedores: (incluso los detenidos),
docker ps -a
Descargar una imagen:
docker pull IMAGE:TAG
docker pull ubuntu
docker pull ubuntu:18.04
Subir una imagen a un repositorio:
docker push IMAGE
docker push myimage:1.0
Eliminar una imagen:
docker rmi IMAGE
Mostrar una lista de todas las imágenes:
docker images
Eliminar imágenes:
docker image prune
Eliminar todas las imágenes no utilizadas:
docker image prune -a
Construir una imagen desde un Dockerfile:
docker build DIRECTORIO
docker build .
Etiquetar una imagen:
docker tag IMAGEN NUEVA_IMAGEN
docker tag ubuntu ubuntu:18.04
Construir y etiquetar una imagen desde un Dockerfile:
docker build -t IMAGEN DIRECTORIO
docker build -t myimage .
Administración de Redes
Listar todas las redes:
docker network ls
Crear una red Bridge (default driver):
docker network create NETWORK
docker network create atitlan
Eliminar una red:
docker network rm NETWORK
docker network rm atitlan
Obtener información detallada de una red:
docker network inspect NETWORK
docker network inspect atitlan
Mostrar los puertos mapeados de un contenedor:
docker port CONTAINER
docker port web
Administración de Volúmenes
Listar todos los volúmenes:
docker volume ls
Crear un volumen:
docker volume create VOLUME
docker volume create fuego
Eliminar un volumen:
docker volume rm VOLUME
docker volume rm fuego
Obtener información detallada de un volumen:
docker volume inspect VOLUME
docker volume inspect fuego
Remover todos los volúmenes sin usar:
docker volume prune
Docker Cheat Sheet PDF: