====== Primeros pasos (Docker avanzado) ======
Contenido perteneciente al curso [[informatica:sistemas_operativos:cursos:docker_avanzado|Docker avanzado]].
===== El comando ''docker'' =====
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
==== Hello, world! ====
Y como no, todo empieza con un “Hello World”:
docker run hello-world
==== Busybox ====
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
==== Iniciar un ubuntu ====
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.
===== Práctica: explorando el entorno =====
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''?
===== Listando contenedores =====
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
===== run, start, attach =====
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"
===== Contenedores con nombre personalizado =====
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_.-]''
===== logs, top =====
Para ver lo que está pasando dentro de un contenedor podemos usar el comando ''logs'':
docker logs |
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
===== stop, rm =====
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 contenedor
Para 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
===== inspect =====
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 [[https://support.smartbear.com/alertsite/docs/monitors/api/endpoint/jsonpath.html|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)
===== docker pull =====
A diferencia del comando ''run'', ''docker pull'' descarga la imagen y no hace nada más.
docker pull ubuntu:23.04
===== docker images =====
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.
===== Práctica =====
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
===== Recursos =====
* https://killercoda.com/: diferentes escenarios para trabajar con contenedores.