Docker tiene un amplio conjunto de comandos (subcomandos para ser más precisos). No es posible que los uses todos y no hay necesidad de ir por ese logro también.
La mayor parte del tiempo utilizará un cierto subconjunto de comandos para administrar contenedores e imágenes.
Voy a enumerar comandos de Docker comunes pero esenciales que son extremadamente útiles para el uso diario de los usuarios y administradores de Docker.
He dividido estos comandos de Docker en dos categorías:
- Ejecutable:comandos que se utilizan para ejecutar y administrar contenedores
- Informativo:Comandos que se utilizan para extraer información sobre contenedores, imágenes y capas.
¿Suena bien? Veamos estos comandos Docker imprescindibles junto con ejemplos prácticos.
Comandos de ejecución de Docker [para ejecutar y administrar contenedores]
Estos comandos de Docker se usan para administrar contenedores y crear imágenes. Ejecutan una tarea específica y, por lo tanto, los denominé "Comandos de ejecución de Docker".
En este punto, le recomiendo que actualice su ciclo de vida básico del contenedor Docker con esta imagen:
Dejando eso de lado, veamos los comandos y sus ejemplos.
Si tiene Docker instalado en su sistema, puede ejecutar los ejemplos junto con el tutorial para practicar.1. Ejecutar ventana acoplable
Docker run se usa para crear un contenedor e iniciarlo inmediatamente.
Este comando primero busca una imagen existente para ejecutar el contenedor y, si no la encuentra, la extrae del repositorio, crea un contenedor a partir de la imagen y luego comienza a ejecutarlo de inmediato.
Ejecutemos un contenedor Nginx desde el repositorio oficial.
[email protected]:~$ docker run --name nginx-root -p 80:80 -d nginx
8411c3df0fd7f57395b0732b1b1963c215040eed669dc8327200db197ff6099b
[email protected]:~$
Con el --name
marca, personaliza su nombre local y también asigna el puerto de host al puerto del contenedor. -d
o --detach
ayuda a ejecutar el contenedor en segundo plano en modo separado.
2. Parada de Docker
Este comando se usa para detener contenedores que ya se están ejecutando. La sintaxis es simple:
docker stop container-name-or-id
Detengamos el contenedor que iniciaste en el primer comando.
[email protected]:~$ docker stop nginx-root
nginx-root
[email protected]:~$
En caso de que no haya personalizado un nombre cuando lo ejecutó, puede verificar el nombre generado aleatoriamente con docker ps
comando (discutido más adelante).
Cuando utiliza el comando de parada de la ventana acoplable, envía una señal SIGTERM solicitando la terminación, después de lo cual se administra la señal SIGKILL según la situación de terminación.
3. Inicio de la ventana acoplable
Esto se usa para iniciar contenedores que han sido detenidos. La sintaxis es simple:
docker start container-name-or-id
Comencemos con el contenedor Nginx que acaba de detener en el ejemplo anterior.
[email protected]:~$ docker start nginx-root
nginx-root
[email protected]:~$
Tenga en cuenta que, a diferencia de Docker Run, Docker Start no puede crear nuevos contenedores a partir de imágenes. Solo puede 'ejecutar' los contenedores que están en estado detenido.
Docker Run vs Start vs Create:diferencia explicada Para un principiante de docker, términos como docker start, docker run y docker create pueden ser confusos. Este artículo explica la diferencia con ejemplos. Manual de LinuxAbhishek Prakash4. Ejecutivo de Docker
docker exec
, como sugiere su nombre, se utiliza para la ejecución de nuevos comandos dentro de un contenedor que ya se está ejecutando.
[email protected]:~$ docker exec -ti nginx-root /bin/bash
[email protected]:/#
Ahora está ejecutando un shell bash dentro del contenedor.
En -ti
, t denota un "terminal" y i denota "interactivo" para mantener STDIN (entrada estándar) abierto incluso si no está conectado.
Para salir del shell del contenedor, solo use el comando exit para regresar a su consola host.
[email protected]:/# exit
exit
[email protected]:~$
5. Renombrar ventana acoplable
Para cambiar el nombre de un contenedor, utilice la siguiente sintaxis:
docker rename old_container_name new_container_name
Cambiemos el nombre del contenedor nginx-root a nginx-toor. ¡Tenga en cuenta que puede hacer esto incluso cuando el contenedor está funcionando!
[email protected]:~$ docker rename nginx-root nginx-toor
6. Docker pausa/despausa
Con docker pause
, puede suspender todos los procesos en un contenedor específico. Se utiliza la señal SIGSTOP, que es percibida por el proceso en suspensión.
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
72acb924f667 nginx "nginx -g 'daemon of…" 4 hours ago Up 4 hours 0.0.0.0:80->80/tcp nginx-toor
e2dd68fdd220 wordpress:5.3.0-php7.1-apache "docker-entrypoint.s…" 3 days ago Up 3 days 0.0.0.0:8088->80/tcp wp2_wordpress_1
016709c05add wordpress:5.3.0-php7.1-apache "docker-entrypoint.s…" 3 days ago Up 3 days 0.0.0.0:8080->80/tcp wp1_wordpress_1
656f6761ce0d mariadb:10.4.10-bionic "docker-entrypoint.s…" 8 days ago Up 3 days 3306/tcp wp2_mysql_1
ee953bb14483 mariadb:10.4.10-bionic "docker-entrypoint.s…" 8 days ago Up 3 days 3306/tcp wp1_mysql_1
Hagamos una pausa en el contenedor nginx-toor:
[email protected]:~$ docker pause nginx-toor
nginx-toor
Ahora puede verificar si realmente se detuvo con docker ps
comando de nuevo:
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
72acb924f667 nginx "nginx -g 'daemon of…" 4 hours ago Up 4 hours (Paused) 0.0.0.0:80->80/tcp nginx-toor
e2dd68fdd220 wordpress:5.3.0-php7.1-apache "docker-entrypoint.s…" 3 days ago Up 3 days 0.0.0.0:8088->80/tcp wp2_wordpress_1
016709c05add wordpress:5.3.0-php7.1-apache "docker-entrypoint.s…" 3 days ago Up 3 days 0.0.0.0:8080->80/tcp wp1_wordpress_1
656f6761ce0d mariadb:10.4.10-bionic "docker-entrypoint.s…" 8 days ago Up 3 days 3306/tcp wp2_mysql_1
ee953bb14483 mariadb:10.4.10-bionic "docker-entrypoint.s…" 8 days ago Up 3 days 3306/tcp wp1_mysql_1
Para revertir, simplemente use unpause:
[email protected]:~$ docker unpause nginx-toor
nginx-toor
7. Docker matar
docker kill
se utiliza para enviar la señal KILL predeterminada a un contenedor. A diferencia de docker stop
, envía directamente una señal SIGKILL sin solicitar terminación con la señal SIGTERM.
Es una forma abrupta de forzar la finalización en situaciones de emergencia típicas y, por lo tanto, siempre se recomienda usar docker stop
primero.
[email protected]:~$ docker kill nginx-root
nginx-root
[email protected]:~$
8. Compilación de la ventana acoplable
Si está modificando la imagen de Docker, debe crear su imagen personalizada antes de poder usarla para implementar nuevos contenedores.
docker build
es el comando para construir tales imágenes modificadas.
Recomiendo leer esta guía detallada sobre el uso de Dockerfile para crear imágenes de Docker personalizadas. Aquí, solo mostraré un ejemplo rápido.
Aquí hay un Dockerfile de muestra:
FROM alpine:latest
RUN apk update
RUN apk add vim
Primero descarga una imagen de Alpine Linux del repositorio oficial. Luego actualiza el caché del paquete y luego instala adicionalmente el editor Vim en él.
Esto significa que el contenedor que se ejecuta desde esta imagen tendrá el editor Vim preinstalado.
Cree la imagen de la siguiente manera:
[email protected]:~/docker-build-test$ docker image build -t docker-build-test-image .
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM alpine:latest
---> 965ea09ff2eb
Step 2/3 : RUN apk update
---> Using cache
---> b16ea26b03aa
Step 3/3 : RUN apk add vim
---> Using cache
---> b283eaf606c1
Successfully built b283eaf606c1
Successfully tagged docker-build-test-image:latest
La imagen modificada se denomina docker-build-test-image y el comando busca el Dockerfile en el directorio actual.
9. Docker cp
El comando cp ya es muy conocido entre los usuarios experimentados de Linux para copiar archivos y directorios entre diferentes ubicaciones.
Del mismo modo, docker container cp
, o simplemente docker cp
se utiliza para copiar archivos y directorios entre el contenedor y el host.
[email protected]:~/nginx-root$ docker cp nginx-root:/etc/nginx/nginx.conf ./config
El comando anterior copiará el archivo nginx.conf del contenedor nginx-root a un directorio llamado config que ya debe residir en el directorio de trabajo actual (también llamado nginx-root). Tenga en cuenta la estructura del sistema de archivos similar (/etc/nginx) del contenedor, tal como sería un sistema Linux normal.
10. Docker rm
Similar a la eliminación de archivos y directorios a través de la terminal de Linux, Docker también usa una sintaxis similar para eliminar imágenes y contenedores.
docker rm container_or_image_name_or_id
Intente eliminar el contenedor nginx-root que creó anteriormente en este tutorial:
[email protected]:~$ docker rm nginx-root
nginx-root
El resultado no indicará que se eliminó el contenedor ni nada por el estilo, pero se eliminó de todos modos.
No puede eliminar un contenedor en ejecución. No puede eliminar una imagen que está asociada con un contenedor, incluso una detenida. Cómo eliminar todos los contenedores de Docker (o algunos de ellos) Elimine un contenedor específico o todos los que pertenecen a la misma imagen o todos. Aprenda a eliminar contenedores acoplables en diversas situaciones con estos ejemplos prácticos. Manual de LinuxAbhishek Prakash Cómo eliminar imágenes de Docker:una por una o todasUn artículo completo que analiza varios escenarios de eliminación de imágenes de Docker con ejemplos Manual de LinuxAbhishek PrakashResumamos todos los comandos anteriores:
Volveré a crear el contenedor nginx-root para usarlo en otros ejemplos de comandos.
Comandos informativos de Docker [para obtener información sobre contenedores e imágenes]
Los comandos de Docker que le brindan información relacionada con tareas específicas y parámetros legibles existentes se pueden llamar como comandos informativos de Docker.
Aquí, incluyo 11 comandos de Docker para este propósito:
11. Docker ps/contenedor ls
Abreviatura de docker container ls
, docker ps
se puede usar para enumerar todos los contenedores que se están ejecutando actualmente en un sistema y también verificar su estado con estadísticas adicionales.
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e2dd68fdd220 wordpress:5.3.0-php7.1-apache "docker-entrypoint.s…" 3 days ago Up 3 days 0.0.0.0:8088->80/tcp wp2_wordpress_1
016709c05add wordpress:5.3.0-php7.1-apache "docker-entrypoint.s…" 3 days ago Up 3 days 0.0.0.0:8080->80/tcp wp1_wordpress_1
80e12e4a431c nginx "nginx -g 'daemon of…" 3 days ago Up 3 days 0.0.0.0:80->80/tcp nginx-root
656f6761ce0d mariadb:10.4.10-bionic "docker-entrypoint.s…" 7 days ago Up 3 days 3306/tcp wp2_mysql_1
ee953bb14483 mariadb:10.4.10-bionic "docker-entrypoint.s…" 7 days ago Up 3 days 3306/tcp wp1_mysql_1
[email protected]:~$
12. Imágenes acoplables/imagen ls
Si es un usuario experimentado de Linux, es posible que ya esté familiarizado con ls
comando que se usa para verificar el contenido del directorio con la terminal de Linux.
Del mismo modo, en Docker, docker image ls
o simplemente docker images
se usa para verificar la lista de todas las imágenes de Docker existentes dentro de un sistema. Estas imágenes pueden ser oficiales o personalizadas dependiendo de cómo fueron construidas.
[email protected]:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 4152a9608752 10 days ago 126MB
avimanyu786/flask-test latest f8e2d6f524ef 2 weeks ago 122MB
avimanyu786/nginx-test latest 5fe5e88b9eaa 2 weeks ago 23MB
wordpress 5.3.0-php7.1-apache f0985bcc2ffb 2 weeks ago 530MB
mariadb 10.4.10-bionic c1c9e6fba07a 2 weeks ago 355MB
avimanyu786/alpine-with-vim latest b283eaf606c1 2 weeks ago 34.7MB
jwilder/nginx-proxy latest d1c0beda6804 3 weeks ago 161MB
nginx alpine b6753551581f 5 weeks ago 21.4MB
python alpine 204216b3821e 5 weeks ago 111MB
alpine latest 965ea09ff2eb 5 weeks ago 5.55MB
mysql latest c8ee894bd2bd 6 weeks ago 456MB
hello-world latest fce289e99eb9 11 months ago 1.84kB
[email protected]:~$
Además de contenedores e imágenes, ls
también se usa para fines similares en Docker para administrar redes, volúmenes, nodos y servicios de enjambre.
13. Registros acoplables
Este comando es muy útil en servidores de producción para investigar y resolver problemas. Puede obtener los registros de cualquier contenedor con la ayuda del comando docker logs.
docker logs container_name_or_id
Por ejemplo:
[email protected]:~$ docker logs nginx-toor
178.130.157.61 - - [30/Nov/2019:07:56:14 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" "-"
178.130.157.61 - - [30/Nov/2019:07:56:14 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36" "-"
.
.
.
.
x64|'|'|No|'|'|0.7d|'|'|..|'|'|AA==|'|'|112.inf|'|'|SGFjS2VkDQoxOTIuMTY4LjkyLjIyMjo1NTUyDQpEZXNrdG9wDQpjbGllbnRhLmV4ZQ0KRmFsc2UNCkZhbHNlDQpUcnVlDQpGYWxzZQ==12.act|'|'|AA==" 400 157 "-" "-" "-"
8.36.123.216 - - [30/Nov/2019:10:32:20 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" "-"
202.142.105.74 - - [30/Nov/2019:12:03:39 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0" "-"
14. Versión acoplable
Para obtener información detallada sobre la versión de Docker instalada en el sistema, simplemente use:
docker version
Así es como se ve esta información:
[email protected]:~$ docker version
Client: Docker Engine - Community
Version: 19.03.4
API version: 1.40
Go version: go1.12.10
Git commit: 9013bf583a
Built: Fri Oct 18 15:54:09 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.4
API version: 1.40 (minimum version 1.12)
Go version: go1.12.10
Git commit: 9013bf583a
Built: Fri Oct 18 15:52:40 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683
[email protected]:~$
15. Información acoplable
El siguiente comando le mostrará información de todo el sistema sobre el sistema host donde está instalado Docker:
[email protected]:~$ docker info
Client:
Debug Mode: false
Server:
Containers: 9
Running: 5
Paused: 0
Stopped: 4
Images: 17
Server Version: 19.03.4
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339
runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
init version: fec3683
Security Options:
apparmor
seccomp
Profile: default
Kernel Version: 4.15.0-50-generic
Operating System: Ubuntu 18.04.2 LTS
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 985.4MiB
Name: localhost
ID: MZTJ:L5UF:WMQ3:VOIO:NR3N:336Q:YX2T:MSOU:5Y2N:MA7V:F6BQ:6UDY
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
WARNING: No swap limit support
[email protected]:~$
16. Docker inspeccionar
La docker inspect
El comando se utiliza para revelar información de bajo nivel tanto de contenedores como de imágenes.
Puede obtener información como la suma de comprobación de la imagen, las capas, la dirección IP del contenedor y otra información de red y mucha otra información.
Es aconsejable usar el comando grep para filtrar la salida y obtener solo la información deseada.
En el siguiente ejemplo, inspecciono una imagen de Docker existente llamada avimanyu786/alpine-with-vim:latest .
[email protected]:~$ docker inspect avimanyu786/alpine-with-vim:latest
[
{
"Id": "sha256:b283eaf606c18a4d0cc461ffdf86d53ecb173db5271129090a7421a64b1c514e",
"RepoTags": [
"avimanyu786/alpine-with-vim:latest"
],
"RepoDigests": [],
"Parent": "sha256:b16ea26b03aaf5d9bd84157fbef61670d2f318c1af854ae04f0dbc290afd4b04",
"Comment": "",
"Created": "2019-11-12T11:51:24.458552779Z",
"Container": "5b759e6f98e354a78dfca588eb65316b35f0cfb88c9119844471c8fcba362898",
"ContainerConfig": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh",
"-c",
"apk add vim"
],
"Image": "sha256:b16ea26b03aaf5d9bd84157fbef61670d2f318c1af854ae04f0dbc290afd4b04",
.
.
.
.
"Metadata": {
"LastTagTime": "2019-11-12T11:51:24.563369343Z"
}
}
[email protected]:~$
17. Historial acoplable
Descubra el historial de cualquier imagen existente en su sistema Docker con el nombre de imagen del historial de Docker.
El historial de la imagen le indicará los cambios y las confirmaciones realizadas en orden cronológico inverso.
[email protected]:~$ docker history avimanyu786/alpine-with-vim:latest
IMAGE CREATED CREATED BY SIZE COMMENT
b283eaf606c1 2 weeks ago /bin/sh -c apk add vim 27.7MB
b16ea26b03aa 2 weeks ago /bin/sh -c apk update 1.42MB
965ea09ff2eb 5 weeks ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B
<missing> 5 weeks ago /bin/sh -c #(nop) ADD file:fe1f09249227e2da2… 5.55MB
[email protected]:~$
18. Puerto acoplable
Este comando puede resultar muy útil cuando se administran varios contenedores porque revela muy fácilmente las asignaciones de host a puerto de contenedor:
[email protected]:~$ docker port nginx-root
80/tcp -> 0.0.0.0:80
Aquí puede ver que el puerto de host 80 está asignado al puerto de contenedor 80 para el contenedor denominado nginx-root.
19. Dif de ventana acoplable
Con docker diff, puede inspeccionar los cambios en archivos o directorios en el sistema de archivos de un contenedor. Enumera los archivos y directorios modificados en el sistema de archivos de un contenedor desde que se creó.
Se rastrean tres tipos diferentes de cambios (A/D/C):
- A:Adición de un archivo o directorio
- D:Eliminación de un archivo o directorio
- C:Cambio de un archivo o directorio
Veamos lo mismo para nuestro contenedor nginx-root:
[email protected]:~$ docker diff nginx-root
C /run
A /run/nginx.pid
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
A /var/cache/nginx/uwsgi_temp
[email protected]:~$
20. Parte superior de Docker
Una vez más, top es un comando de Linux con el que quizás ya esté familiarizado. Se utiliza para enumerar los procesos en ejecución en el sistema.
Con docker top, lista los procesos que se ejecutan dentro de un contenedor.
docker top container_ID_or_name
Si lo hago con nginx-root en nuestro ejemplo, muestra el siguiente valor.
[email protected]:~$ docker top nginx-root
UID PID PPID C STIME TTY TIME CMD
root 10355 10330 0 07:54 ? 00:00:00 nginx: master process nginx -g daemon off;
systemd+ 10401 10355 0 07:54 ? 00:00:00 nginx: worker process
root 12054 10330 0 10:22 pts/0 00:00:00 /bin/bash
[email protected]:~$
21. Estadísticas de Docker
El comando docker stats se puede usar tal cual y también para contenedores específicos. Le muestra los detalles del contenedor junto con el uso de recursos del sistema.
Primero, veamos su forma genérica:
[email protected]:~$ docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
72acb924f667 nginx-root 0.00% 2.621MiB / 985.4MiB 0.27% 8.02kB / 8.92kB 6.8MB / 0B 3
e2dd68fdd220 wp2_wordpress_1 0.00% 44.24MiB / 985.4MiB 4.49% 1.9MB / 1.62MB 53.3MB / 61.4kB 11
016709c05add wp1_wordpress_1 0.00% 68.52MiB / 985.4MiB 6.95% 12MB / 4.77MB 136MB / 61.4kB 11
656f6761ce0d wp2_mysql_1 0.05% 70.12MiB / 985.4MiB 7.12% 1.05MB / 1MB 16MB / 2.15MB 30
ee953bb14483 wp1_mysql_1 0.04% 31.73MiB / 985.4MiB 3.22% 1.16MB / 4.76MB 50.6MB / 91.8MB 31
La salida anterior se generará continuamente en tiempo real hasta que salga con Ctrl+C.
Ahora, si lo prueba para un contenedor específico, verá el mismo resultado, pero solo para ese contenedor:
[email protected]:~$ docker stats nginx-root
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
72acb924f667 nginx-root 0.00% 2.621MiB / 985.4MiB 0.27% 8.02kB / 8.92kB 6.8MB / 0B 3
Permítanme resumir también la información de los comandos de Docker:
Para obtener un recurso exhaustivo y completo de todos los comandos de Docker, siempre puede consultar la documentación oficial de Docker.
Notarás un parecido entre los comandos habituales de Linux y algunos comandos de Docker. Creo que es deliberado facilitar la memorización de los comandos de Docker.
Espero que este artículo le resulte útil en su uso diario de Docker. Si tiene más comandos útiles para compartir, no dude en compartirlos a continuación. Comentarios y sugerencias son siempre bienvenidos.