====== 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.