En este doc vas a encontrar un listado de comandos y ejemplos prácticos de Docker. Si tienes cualquier duda o quieres darme feedback no dudes en dejarme un Tweet.
Ahora sí. Empecemos con el código!
🎖 Comandos
Construyendo imágenes
🔹 Construir una imagen utilizando un Dockerfile que se encuentra en el directorio donde estemos.
docker build .
🔹 Construir una imagen utilizando un fichero Dockerfile específico.
docker build -f <file>
Ejemplo:
docker build -f ./Dockerfile.local
🔹 Construir una imagen utilizando un fichero Dockerfile específico e indicandole una etiqueta para identificar nuestra imagen.
docker build -f <file> -t <repository/image_name:tag>
Ejemplo:
docker build -f ./Dockerfile.local -t barckcode/flask_blog:1.0
Levantando contenedores
🔹 Arrancar un contenedor.
docker run <image_container>
Ejemplo:
docker run hello-world
🔹 Arrancar un contenedor asignándole un nombre.
docker run --name <name_container> <image_container>
Ejemplo:
docker run --name contenedor_test ubuntu
🔹 Arrancar un contenedor con una terminal interactiva. Pasándole una shell para acceder al contenedor.
docker run -it <image_container> <shell>
Ejemplo:
docker run -it ubuntu bash
🔹 Arrancar un contenedor. Mapeando un puerto del host a un puerto del contenedor.
- puerto_host : puerto_contenedor
docker run -p <host_port>:<container_port> <image_container>
Ejemplo:
docker run -p 8080:80 nginx
Igual que el ejemplo anterior pero dejándolo en segundo plano.
docker run -p 8080:80 -d nginx
🔹 Arrancar un contenedor. Que tras terminar su periodo de vida. Será eliminado automáticamente.
docker run --rm <image_container>
Ejemplo:
docker run -p 8080:80 -d --rm nginx
🔹 Arrancar un contenedor con un volume.
docker run -v <volume_name>:<mount_point>:<options> <image_container>
Ejemplo:
- Volume -> test
- Punto de montaje en el contenedor -> /apps
- Opciones -> rw (Lectura y escritura)
docker run -v test:/apps:rw nginx
🔹 Arrancar un contenedor con un bind mount.
docker run -v <shared_folder>:<mount_point>:<options> <image_container>
Ejemplo:
- Ruta del host a compartir -> /home/application
- Punto de montaje en el contenedor -> /apps
- Opciones -> ro (Solo lectura)
docker run -v /home/application:/apps:ro ubuntu
🔹 Arrancar un contenedor con tmpfs.
docker run \
--mount type=tmpfs,destination=<mount_point>,tmpfs-mode=<permisos>,tmpfs-size=<bytes_size> \
<image_container>
Ejemplo:
- Punto de montaje en el contenedor -> /temporal
- Permisos -> Todos los permisos solo para el propietario.
- Tamaño del FS -> 21474836480 bytes = 20G
docker run \
--mount type=tmpfs,destination=/temporal,tmpfs-mode=700,tmpfs-size=21474836480 \
nginx
Listando contenedores
🔹 Lista de los contenedores activos.
docker ps
🔹 Lista de todos los contenedores activos e inactivos del sistema.
docker ps -a
🔹 Lista los ID de todos los contenedores.
docker ps -aq
Debugging
🔹 Inspeccionar la data de un contenedor.
- Por su ID:
docker inspect <id_container>
- Por su nombre:
docker inspect <name_container>
- Aplicando filtros. Por ejemplo buscando las variables de entorno:
docker inspect -f '{{ json .Config.Env }}' <name_container>
🔹 Ver los logs del contenedor.
docker logs <name_container>
Eliminando contenedores
🔹 Eliminar un contenedor que no este arriba.
- Se puede hacer tanto por nombre como por ID.
docker rm <name_container>
🔹 Eliminar un contenedor aunque este arriba. Forzándolo.
- Se puede hacer tanto por nombre como por ID.
docker rm -f <id_container>
🔹 Eliminar todos los contenedores que no esten arriba a la vez.
docker rm $(docker ps -aq)
Administrando contenedores
🔹 Parar un contenedor.
- Se puede hacer tanto por nombre como por ID.
docker stop <name_container>
🔹 Reiniciar un contenedor.
- Se puede hacer tanto por nombre como por ID.
docker restart <name_container>
🔹 Copiar un fichero local a un path dentro del contenedor.
docker cp <local_file> <container:path>
🔹 Copiar un fichero del contenedor a un path local.
docker cp <container:file> <local_path>
Docker Swarm
🔹 Iniciar el clúster de docker swarm en una IP específica.
docker swarm init --advertise-addr <IP_server>
🔹 Añadir workers al clúster de docker swarm.
docker swarm join --token <token>
🔹 Ver las instrucciones y obtener el token para añadir un worker.
docker swarm join-token manager
🔹 Ver los nodos del clúster.
docker node ls
🔹 Crear un servicio en docker swarm indicandole:
- Nombre del servicio.
- Número de réplicas.
- Puntos de montaje.
- Interfaz de red.
- Exposición y mapeo de puertos.
- Variable de entorno.
- Imagen a utilizar por los contenedores y el comando a ejecutar.
docker service create \
--name <name_svc> \
--replicas <num_replicas> \
--mount <type=[volume|bind|tmpfs|npipe]>,<source=name_volume>,<destination=/container_path> \
--network <interface_name> \
--publish <published=exposed_port_container>,<target=app_port> \
--env <key=value> \
<img_container> <command>
Ejemplo:
docker service create \
--name prod_app \
--replicas 4 \
--mount type=bind,source=/var/www,destination=/app \
--network net_app \
--publish published=8000,target=8000 \
--env FLASK_ENV=production \
python:3.9 flask run --host=0.0.0.0
🔹 Listar los servicios del cluster.
docker service ls
🔹 Ver los servicios que estan corriendo en el cluster.
docker service ps <svc>
🔹 Escalar un servicio.
docker service scale <id_svc=num_replicas>
Ejemplo:
docker service scale prod_app=2
🔹 Ver detalles de un servicio.
docker service inspect --pretty <svc>
🔹 Actualizar la imagen de un servicio.
docker service update --image <img_container> <svc>
🔹 Reiniciar un servicio / Forzar actualización.
docker service update <svc> --force
Espero que este post te haya sido de utilidad, si tienes cualquier consulta o quieres darme feedback puedes enviarme un mensaje a través Telegram o sino siempre puedes mandarme un Tweet.
Hasta la próxima!
By Helmcode