¡Esta es una revisión vieja del documento!
Tabla de Contenidos
Primeros pasos (Docker avanzado)
Contenido perteneciente al curso 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 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 <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:
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)
Para eliminar los contenedores de forma definitiva:
docker rm {ID}
La opción de borrado es irreversible.
Para eliminar todos los contenedores:
docker rm $(docker ps -aq)
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 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 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.
Recursos
- https://killercoda.com/: diferentes escenarios para trabajar con contenedores.
