¿Cuáles son los comandos de Docker?
Empezamos esta sección utilizando la línea de comandos y para ello vamos a utilizar el comando docker --help
para ver las opciones mostradas por la ayuda de docker.
docker --help
La mayoría de los comandos han sido migrados a grupos, por ejemplo para listar los contenedores antes utilizábamos
docker ps
, ahora usamosdocker container ls
.
¿Cuáles son los comandos administrativos de Docker?
La siguiente tabla muestra las categorías de comandos administrativos de Docker.
Grupo | Descripción |
---|---|
builder | Administra los builds |
config | Administra los configs |
container | Administra los contenedores |
engine | Administra el motor de docker |
image | Administra las imágenes |
network | Administra las redes |
node | Administra los nodos de swarm |
plugin | Administra los plugins |
secret | Administra los docker secrets |
service | Administra los servicios |
stack | Administra los docker stacks |
swarm | Administra Swarm |
system | Administra Docker |
trust | Administra la confianza en las imágenes de Docker |
volume | Administra los volumes |
¿Cómo expandir la documentación de los comandos de Docker?
Si deseamos ver una lista con las opciones de cada uno de estos comandos de administración, podemos pasar el parámetro --help
, por ejemplo.
docker image --help
Usage: docker image COMMAND
Manage images
Commands:
build Build an image from a Dockerfile
history Show the history of an image
import Import the contents from a tarball to create a filesystem image
inspect Display detailed information on one or more images
load Load an image from a tar archive or STDIN
ls List images
prune Remove unused images
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rm Remove one or more images
save Save one or more images to a tar archive (streamed to STDOUT by default)
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
¿Cómo listar las imágenes de Docker?
Vamos a listar las imágenes usando image ls.
docker image ls
¿Cómo descargar una imagen de Docker?
Si no encontramos ninguna imagen listada entonces podemos descargar de la imagen nginx mediante docker pull.
docker image pull nginx
Si la imagen no se encuentra almacenada previamente iniciará la descarga de esta.
Volvemos a listar las imágenes.
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.15 53f3fd8007f7 20 months ago 109MB
La tercer columna nos muestra el identificador de la imagen, con este podemos ver los detalles de ella usando el comando image inspect.
¿Cómo ver la información detallada de una imagen de Docker?
docker image inspect 53f3fd8007f7
Lo que vamos a poder ver es un json bastante grande con los detalles de esta imagen.
Al ejecutar un contenedor docker verifica que este se encuentra disponible dentro de la lista de imágenes, si no es así realiza primero la descarga de la imagen y su posterior ejecución.
docker container run busybox
Si intentamos listar los contenedores busybox no aparecerá en la lista ya que después de ejecutarse se realiza la terminación de este.
docker container ls
Sin embargo podemos listar utilizando el parámetro -a que lista todos los contenedores, incluyendo aquellos que ya han sido terminados.
docker container ls -a
¿Cómo autoasignar puertos a un contenedor de Docker?
Cuando se ejecuta un contenedor, este viene con una lista de puertos que se pueden enrutar a los puertos del host, para autoasignarlos a un puerto aleatorio podemos usar el parámetro -P. En el caso de nginx, el contenedor se mantiene en ejecución ya que es un servidor web, para hacer que esta ejecución se realice en segundo plano sin bloquear nuestra línea de comandos podemos usar el parámetro -d (detached).
docker container run -P -d nginx
Listamos los contenedores en ejecución.
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bf788dc0e726 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:32768->80/tcp compassionate_shockley
Y podemos ver que nuestro servidor web nginx esta en ejecución, además de que el puerto 80 del contenedor esta accesible en el puerto 32768 del host (este valor es distinto en cada ejecución). Si accedemos a http://localhost:32768 podremos ver la página de bienvenida del servidor web.
También es posible acceder directamente desde el puerto 80 del contenedor pero para ello necesitamos su ip.
docker container inspect bf788dc0e726
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "1e4a05ae60e6792880e0ea1937f8a1f8e219bee8ee8e6ebb836b5974deafeae1",
"EndpointID": "cc894db0b34ca84cdebaf00ec847389f29610ed9b1550493e5e31f61393179ce",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
De la información del contenedor tomamos el valor IpAddress, y podemos abrir la dirección http://172.17.0.2 sin especificar el puerto ya que por default el servidor web despliega el puerto 80.
¿Cómo mostrar la ejecución de un contenedor de Docker?
Si deseamos ver la salida de un contener en ejecución podemos usar el comando container attach.
docker container attach bf788dc0e726
En este caso he realizado el attach al contenedor nginx, sin embargo debido a que nginx envía la salida de la ejecución del servidor web a los logs del sistema, no es posible ver la ejecución del programa. Otra cosa importante que mencionar es que en el momento en que realicemos la desconexión del contenedor este se va a detener.
¿Cómo reiniciar la ejecución de un contenedor de Docker?
Para reiniciar el contenedor podemos utilizar el comando docker container start.
docker container start bf788dc0e726
¿Cómo detener la ejecución de un contenedor de Docker?
Si por el contrario lo que deseo es detener la ejecución del contenedor, utilizamos el comando container stop.
docker container stop bf788dc0e726
¿Cómo ver los logs de un contenedor de Docker?
Si deseamos ver los logs de salida de un contenedor podemos usar el comando container logs.
docker container logs bf788dc0e726
Para generar algo de tráfico podemos usar curl ip_del_contenedor
, esto generará una petición que sera visible dentro de los logs.
172.17.0.1 - - [17/Jan/2021:14:36:52 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.68.0" "-"
¿Cómo ver la información de los recursos utilizados por un contenedor de Docker?
Si deseamos ver los recursos utilizados por nuestro contenedor podemos usar el comando container stats.
docker container stats bf788dc0e726
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
bf788dc0e726 compassionate_shockley 0.00% 3.797MiB / 31.21GiB 0.01% 28.9kB / 2.46kB 0B / 0B 2
El comando container stats muestra una tabla con la información del uso del CPU, memoria, trafico de la red, entre otros.
Para entrar dentro del sistema operativo del contenedor y ejecutar cualquiera de los comandos del que este dispone, hacemos uso del comando container exec –it.
docker container exec -it bf788dc0e726 /bin/bash
Una ves dentro del sistema operativo veremos el prompt, en este caso el de linux, y podremos usar cualquiera de los comandos disponibles.
¿Cómo pausar y restablecer la ejecución de un contenedor de Docker?
Si necesitamos pausar/reanudar el contenedor utilizamos los comandos container pause y container unpause.
docker container pause bf788dc0e726
docker container unpause bf788dc0e726
¿Cómo eliminar un contenedor de Docker?
Para eliminar un contenedor utilizamos el comando container rm -f.
docker container rm -f bf788dc0e726
El parámetro -f detiene el contenedor si este se encuentra en ejecución, si este no se especifica y el contenedor esta ejecutándose no podrá ser eliminado.