Contenido perteneciente al curso Docker avanzado.
El comando docker es nuestra herramienta para interactuar con toda la arquitectura de Docker
La sintaxis es la siguiente:
docker [option] [command] [arguments]
Si introducimos únicamente el comando docker en la terminal nos responderá con la lista de todos los subcomandos de los que dispone:
docker
Lo primero que podemos hacer es verificar la versión de Docker que tenemos instalada en nuestro equipo
docker versión
O consultar los detalles de la instalación y el host:
docker info
Y como no, todo empieza con un “Hello World”:
docker run hello-world
Busybox es una imagen Docker mínima que nos permite trastear de forma rápida
Para ejecutar un único comando dentro de una imagen podemos usar lo siguiente:
docker run busybox echo Hola mundo
Si lo que queremos es abrir una terminal para trastear más en detalle:
docker run -it busybox sh
De igual modo si queremos iniciar un contenedor con Ubuntu es tan sencillo como usar el comando:
docker run -it ubuntu /bin/bash
Veremos que se descarga la imagen desde el registro y se inicia el contenedor. Podemos verificar la versión concreta que está montando:
cat /etc/lsb-reléase
Si lo preferimos podemos especificar la versión concreta de ubuntu que queremos iniciar:
docker run –it ubuntu:14.04 /bin/bash
Podríamos ejecutar de nuevo docker run y se creará un nuevo contenedor, pero la imagen será la misma.
Inicia un contenedor interactivo de Ubuntu:
docker run –it ubuntu /bin/bash
Explora tu entorno:
hostname
cat /etc/hosts
ifconfig
Instala el editor de textos vim:
apt-get update apt-get install vim
Sal del entorno con el comando exit y repite el paso 1. ¿Tenemos el comando vim?
Con el subcomando ps podemos listar la información de todos los contenedores en ejecución:
docker ps
Si incorporamos la opción –a obtendremos la lista incluyendo los contenedores ya finalizados:
docker ps -a
Si solo necesitamos los IDs de los contenedores podemos usar la opción -q:
docker ps -aq
Podemos especificar un nombre para nuestro contenedor [a-zA-Z0-9_.-]
docker run --name myUbuntu -it ubuntu /bin/bash
Podemos reiniciar un contenedor parado anteriormente:
docker start {ID}
Por ejemplo:
docker start myUbuntu
Para arrancar el contenedor con los parámetros iniciales podemos usar attach:
docker attach {ID}
También es posible crear un contenedor e iniciar como un demonio (en segundo plano) con la opción -d:
docker run --name myDaemon -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
Por defecto, Docker genera un nombre aleatorio para cada contenedor que creemos.
Sin embargo, podemos especificar un nombre para nuestro contenedor con la opción --name:
docker run --name myUbuntu -it ubuntu /bin/bash
Podemos dar cualquier nombre mientras usemos alguno de los siguientes caracteres de acuerdo a la expresión regular: [a-zA-Z0-9_.-]
Para ver lo que está pasando dentro de un contenedor podemos usar el comando logs:
docker logs <ID_CONTENEDOR>|<NOMBRE_CONTENEDOR>
Estos logs no se refiere a los logs del sistema operativo sino a la salida por pantalla de los contenedores. Los logs del contenedor depende de cómo haya sido creada la imagen.
Podemos abrir el streaming para verlo en tiempo real con la opción -f:
docker logs -f myDaemon
Ver los últimos 10 mensajes:
docker logs –f –-tail 10 myDaemon
Podemos pedir que incluya la marca temporal (-t):
docker logs -ft myDaemon
También podemos consultar los procesos en ejecución:
docker top myDaemon
Si se necesita terminar un contenedor de forma externa tenemos el subcomando stop:
docker stop {ID}
Si lo que queremos es parar todos los contenedores en ejecución:
docker stop $(docker ps -q)
-q: muestra solo el identificador del contenedorPara eliminar los contenedores de forma definitiva:
docker rm {ID}
La opción de borrado es irreversible. Por seguridad, no se pueden eliminar contenedores que no estén parados ni con volúmenes asociados.
Para eliminar todos los contenedores:
docker rm $(docker ps -aq)
-q: muestra solo el identificador del contenedor
Para obtener más detalle sobre el contenedor tenemos inspect:
docker inspect {ID}
Podemos usar –-format para obtener detalles concretos:
docker inspect --format='{{.State.Running}}' myDaemon
La sintaxis es JSONPath.
docker inspect -f='{{.NetworkSettings.IPAddress}}' myDaemon
Podemos consultar múltiples contenedores indicando sus nombre uno detrás de otro:
docker inspect --format='{{.Name}} {{.State.Running}}' $(docker ps -aq)
A diferencia del comando run, docker pull descarga la imagen y no hace nada más.
docker pull ubuntu:23.04
Para ver las imágenes que tenemos descargadas:
docker images
Ejemplo de salida:
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 3565a89d9e81 2 weeks ago 77.8MB lscr.io/linuxserver/kavita latest 8d78b59f517b 6 weeks ago 388MB
El kernel de las imágenes debe ser compatible con el kernel que usa Docker Engine.
Crear un contenedor con Ubuntu 23.04 y desde otra terminal detenerlo.
docker run --name paquito -it ubuntu:23.04 /bin/bash
Para detenerlo:
docker stop paquito