Docker: Guía de comandos Básicos

Última actualización: 22/07/2020

Docker es el sistema de contenedores de moda. Aprende en esta guía los comandos prácticos de Docker más usados para desarrolladores de software. Podrás entender el listado de comandos esenciales que te permitirán empezar a usar contenedores en tus proyectos.

Comandos Básicos Docker

Antes de empezar, te recomiendo que leas la entrada de Introducción a Docker, en la que explico brevemente en qué consiste Docker, cuáles son sus componentes y sus ventajas más destacadas.

Instalación de Docker

Podemos comprobar las especificaciones y los requisitos necesarios para instalar Docker en este enlace de la documentación oficial. Como vemos, soporta la mayoría de los sistemas Linux, Mac e incluso Windows.

Una vez instalado en nuestro sistema, podemos comprobar la versión que acabamos de instalar con el siguiente comando:

> docker -v
Docker version 19.03.12, build 48a66213fe

Para comprobar que la instalación funciona correctamente, ejecutamos un contenedor de prueba o “hello world” con docker run de la siguiente forma:

> docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world

Digest: sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Como vemos, nos mostrará un mensaje de bienvenida en el caso de que todo haya funcionado correctamente. Ya estaría listo.

Comandos básicos en Docker

Simplemente con el comando docker sin argumentos, la CLI nos mostrará todos los comandos que tenemos disponibles.

> docker
Usage:	docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default "/home/oscarfmdc/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and
                           default context set with "docker context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/home/oscarfmdc/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/home/oscarfmdc/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/home/oscarfmdc/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

Management Commands:
  builder     Manage builds
  config      Manage Docker configs
  container   Manage containers
  context     Manage contexts
  engine      Manage the docker engine
  image       Manage images
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem

[...]

Run 'docker COMMAND --help' for more information on a command.

Podemos listar los contenedores en ejecución en nuestro sistema con el comando docker ps. Si queremos listar también los contenedores que no se encuentran en ejecución en ese momento lo podremos hacer añadiendo el argumento -a.

> sudo docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

> sudo docker ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS                     PORTS               NAMES
28e8d9c948bd        hello-world               "/hello"                 4 minutes ago       Exited (0) 4 minutes ago                       kind_sinoussi

En esta lista se nos muestra el identificador del contenedor, el nombre de la imagen, el comando ejecutado, el momento de creación, el estado del contenedor, los puertos expuestos y el nombre aleatorio que se le ha asignado.

Para listar las imágenes presentes en el sistema usamos el comando docker image ls.

> docker image ls
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
<none>                <none>              ecc90e329606        5 months ago        870MB
mongo                 latest              105a8b77784b        5 months ago        364MB
golang                1.12                8639ad3fc384        5 months ago        810MB
hello-world           latest              bf756fb1ae65        6 months ago        13.3kB
golang                1.12                f50db16df5da        11 months ago       774MB
mongo                 latest              785c65f61380        12 months ago       412MB
mesosphere/janitor    latest              048f72c638e1        2 years ago         462MB

Para parar un contenedor en ejecución debemos usar docker stop seguido del identificador del contenedor o de su nombre. De la misma manera, podemos eliminarlo usando el comando docker rm.

> sudo docker stop e7e8165c699a
e7e8165c699a
> sudo docker rm e7e8165c699a
e7e8165c699a

Para eliminar una imagen, usamos el comando docker rmi seguido del identificador o del nombre de la imagen.

> sudo docker rmi bf756fb1ae65
Untagged: hello-world:latest
Untagged: [email protected]:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9
Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
Deleted: sha256:9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63

A menudo, necesitaremos acceder a la terminal de de un contenedor en ejecución de forma interactiva. Para hacerlo, y suponiendo que tiene disponible bash, podemos ejecutar el comando docker exec -it <idcontenedor> /bin/bash. En el siguiente ejemplo lo ejecutamos junto a un nuevo contenedor para terminar dentro de su consola.

> docker run -it ubuntu bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
a4a2a29f9ba4: Pull complete 
127c9761dcba: Pull complete 
d13bf203e905: Pull complete 
4039240d2e0b: Pull complete 
Digest: sha256:35c4a2c15539c6c1e4e5fa4e554dac323ad0107d8eb5c582d6ff386b383b7dce
Status: Downloaded newer image for ubuntu:latest
[email protected]:/#

Volúmenes en contenedores Docker

En los contenedores Docker, podemos agregar almacenamiento de datos externo. De esta forma, es posible crear directorios que se montarán en el contenedor cada vez que éste ejecute. Sobre este directorio podrán trabajar las aplicaciones.

> mkdir /tmp/testdir
> docker run -v /tmp/testdir:/root/testdir httpd

El ejemplo ejecuta un contenedor con el software httpd y tiene montado el directorio /tmp/testdir de la máquina host en la ruta /root/testdir del contenedor.

[En construcción]

Sigue aprendiendo Docker con los siguientes libros:


¡Echa un ojo a mi lista de reproducción de Big Data en Youtube!

Si te ayuda el contenido del blog, por favor considera unirte a la lista de correo para reconocer el trabajo!

Deja una respuesta