Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En DevOps Última actualización: 25 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

Docker es una herramienta popular para construir y ejecutar aplicaciones en contenedores. Está disponible para múltiples plataformas y se utiliza como una de las tecnologías de contenedores back-end en Kubernetes

En Docker, usted puede construir sus propias imágenes para ejecutar su aplicación como contenedor, o puede extraer y utilizar miles de imágenes públicas del repositorio de Docker y utilizarlas en su proyecto. Una vez que su imagen está lista, puede lanzar sus contenedores utilizando esas imágenes. Un contenedor es una instancia en ejecución de una imagen Docker

La gestión de contenedores Docker es uno de los aspectos más importantes que debe cuidar como administrador de sistemas que gestiona hosts/contenedores Docker

En este artículo, nos centraremos en la gestión de contenedores utilizando el comando docker

comando run

el comando docker run se utiliza para ejecutar un contenedor desde una imagen especificando el ID de la imagen o el nombre del repositorio y/o etiqueta

$ docker run {imagen}

Ejemplo
$ docker run

 nginx

El comando anterior ejecuta una instancia de la aplicación<span class="NormalTextRun SpellingErrorV2 SCXW251451022 BCX0">nginx</span> en un host docker, si ya existe. Si no existe en el host Docker, sale al hub Docker (por defecto) y baja la imagen. Pero esto se hace sólo la primera vez. Para las veces siguientes se reutiliza la misma imagen

Si desea ejecutar una versión concreta de una imagen, especifique su versión separada por dos puntos. Esto se conoce como Etiqueta. En caso de que no especifique ninguna etiqueta, docker la considerará por defecto como la más reciente

Además, si desea ejecutar el contenedor en segundo plano en modo separado para que vuelva al prompt después de que Docker lance el contenedor, utilice la bandera -d

Ejemplo

$ docker run nginx
No se pudo encontrar la imagen 'nginx:latest' localmente
latest: Pulling from library/nginx
33847f680f63: Pull completo
dbb907d5159d: Pull completo
8a268f30c42a: Pull completo
b10cf527a02d: Pull completo
c90b090c213b: Pull completo
1f41b2f2bf94: Pull completo
Digest: sha256:8f335768880da6baf72b70c701002b45f4932acae8d574dedfddaf967fc3ac90
Estado: Downloaded newer image for nginx:latest
/docker-entrypoint.sh: /docker-entrypoint.d/ no está vacío, intentará realizar la configuración
/docker-entrypoint.sh: Buscando scripts de shell en /docker-entrypoint.d/
/docker-entrypoint.sh: Lanzando /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Obteniendo la suma de comprobación de /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Habilitada la escucha en IPv6 en /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Lanzando /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Lanzando /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuración completada; listo para arrancar
2021/08/15 12:13:23 [notice <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1: usando el método de evento "epoll"
2021/08/15 12:13:23 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> notice] 1#1: nginx/1.21.1
2021/08/15 12:13:23 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1: construido por gcc 8.3.0 (Debian 8.3.0-6)
2021/08/15 12:13:23 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1: OS: Linux 5.8.0-1039-azure
2021/08/15 12:13:23 [notice <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576

2021/08/15 12:13:23

 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x>

1#1: iniciar

 proceso trabajador
2021/08/15 12:13:23 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1: iniciar proceso trabajador 33
2021/08/15 12:13:23 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1: iniciar proceso trabajador 34

comando ps

el comando docker ps lista todos los contenedores en ejecución y alguna información básica sobre ellos. Como el ID del contenedor, el nombre de la imagen, la hora de creación del contenedor, el estado actual y el nombre del contenedor. Cada contenedor obtiene un nombre aleatorio (si no se especifica explícitamente) y un ID

Ejemplo

$ docker ps
ID DE CONTENEDOR IMAGEN ORDEN CREADO ESTADO PUERTOS NOMBRES
133f5e0267a5 nginx "/docker-entrypoint...." hace 10 segundos Arriba 10 segundos 80/tcp jolly_elion 

Para listar todos los contenedores en ejecución y no en ejecución/salidos a la vez, puede utilizar

$ docker ps -a

Ejemplo
$ docker ps

-a
ID DE CONTENEDOR IMAGEN ORDEN CREADO ESTADO PUERTOS NOMBRES

fcec129f0eb4

 nginx "/docker-entrypoint...." hace 46 horas Salió (0) hace 46 horas interesting_ishizaka

6e8b1e441aa6

 hello-world "/hello" hace 2 días Salió (0) hace 2 días keen_shirley 

ls Comando

Al igual que el comando ps, ls también puede utilizarse para listar contenedores. -se puede utilizar una bandera para listar todos los contenedores (no sólo los que están en ejecución)

$ docker contenedor l

s
Ejemplo
$

 docker container ls
ID DEL CONTENEDOR IMAGEN ORDEN CREADO ESTADO PUERTOS NOMBRES
15796e91c30b redis "docker-entrypoint.s..." hace 2 segundos Arriba 1 segundo 6379/tcp flamboyant_neumann
904390b65d45 nginx "/docker-entrypoint...." hace 14 minutos Arriba 14 minutos 80/tcp nginx_new

$

 docker container ls

comando stop

el comando docker stop se utiliza para detener un contenedor en ejecución. Aquí necesitamos poner el nombre o ID del contenedor junto con esto
$

 docker stop {id-contenedor}

En caso de éxito, devolvería el nombre o ID del docker

Ejemplo
$

 docker ps
ID DE CONTENEDOR IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRES
133f5e0267a5 nginx "/docker-entrypoint...." hace 50 segundos Arriba 49 segundos 80/tcp jolly_elion 

Esto devolverá el ID del contenedor que puede utilizar para detener el contenedor

$ docker stop 133f5
133f5

Para este ejemplo y los siguientes, tenga en cuenta que no necesita especificar un valor completo de ID DE CONTENEDOR. Aceptará hasta la parte, que lo hace único entre otros contenedores en ejecución ya que Docker sabe qué contenedor detener

comando rm

el comando docker rm elimina un contenedor detenido o salido

$ docker rm {NOMBRE o ID DEL CONTENEDOR}

Ejemplo
$ docker rm

 133f5
133f5

$

comando exec

Podemos utilizar el comando exec para entrar dentro de un contenedor en ejecución. Esto es útil para depurar contenedores en ejecución o hacer algunas cosas dentro de un contenedor
$

 docker exec -it {contenedor} {comando}

Ejemplo

Suponga que quiere lanzar el shell bash (asumiendo que la imagen tiene Bash disponible, puede utilizar otros shells disponibles también) dentro de un contenedor llamado unruffled_meninsky en modo interactivo, utilice

$ docker exec -it unruffled_meninsky /bin/bash

Esto debería llevarlo dentro del contenedor a un shell bash. Aquí la bandera -i significa modo interactivo y -t terminal. Si sólo desea ejecutar uno o varios comandos y salir del contenedor, puede utilizar

$ docker exec unruffled_meninsky cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet

ff00

::0 ip6-mcastprefix

ff02

::1 ip6-allnodes

ff02

::2 ip6-allrouters
172.17.0.2 cd2eed4acf34 

comando logs

En caso de que un contenedor sea lanzado en modo detached, y queramos ver sus logs, podemos utilizar el comando logs para revisar sus logs

$ docker logs {NOMBRE o ID DEL CONTENEDOR}

Ejemplo

$ docker logs 7da6dcebaf9c
/docker-entrypoint.sh: /docker-entrypoint.d/ no está vacío, intentará realizar la configuración
/docker-entrypoint.sh: Buscando scripts de shell en /docker-entrypoint.d/
/docker-entrypoint.sh: Lanzando /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Obteniendo la suma de comprobación de /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Habilitada la escucha en IPv6 en /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Lanzando /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Lanzando /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuración completada; listo para arrancar
2021/08/15 12:14:09 [notice <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1: utilizando el método de evento "epoll"
2021/08/15 12:14:09 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> ] 1#1: nginx/1.21.1
2021/08/15 12:14:09 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1: construido por gcc 8.3.0 (Debian 8.3.0-6)
2021/08/15 12:14:09 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1: OS: Linux 5.8.0-1039-azure
2021/08/15 12:14:09 [notice <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/08/15 12:14:09 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> notice] 1#1: iniciar proceso de trabajo
2021/08/15 12:14:09 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1: iniciar proceso de trabajo 31
2021/08/15 12:14:09 <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[notice]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> 1#1: iniciar proceso de trabajo 32

$

cp Comando

Para copiar archivos entre un contenedor y el sistema de archivos localhost, puede utilizar el comando cp
$

 docker container cp {NOMBRE o ID DEL CONTENEDOR:SRC_PATH} {DEST_PATH}|-

Ejemplo
$ docker container cp

 quirky_cray:/etc/nginx/nginx.conf nginx.conf.bkp

comando export

El comando docker container ofrece una opción para exportar el sistema de archivos de un contenedor como un archivo TAR

$ docker container export {NOMBRE o ID DEL CONTENEDOR}

comando inspeccionar

Podemos comprobar información detallada sobre un contenedor utilizando el comando inspect como
$ docker

 inspect

{NOMBRE o ID DEL CONTENEDOR}
O

$ docker container inspect{NOMBRE o ID DEL CONTENEDOR}

comando kill

Un contenedor en ejecución puede ser matado usando el comando kill con una bandera opcional --signal o -s. Se pueden especificar varios contenedores para matarlos de una sola vez

$ docker kill {NOMBRE o ID DEL CONTENEDOR} [--signal VAL]

Ejemplo
$

 docker kill cd9005a0b5d2 -s 9
cd9005a0b5d2

$

comando stats

Para visualizar un flujo en directo del uso de recursos de un contenedor, puede utilizar el comando stats
$

 docker container stats {NOMBRE o ID DEL CONTENEDOR}

Ejemplo
$

 docker container stats thirsty_volhard
ID DEL CONTENEDOR NOMBRE CPU % MEM USO / LIMITE MEM % NET I/O BLOQUE I/O PIDS
904390b65d45 thirsty_volhard

0

.00% 3.406MiB / 7.775GiB

0

.04% 1.02kB / 0B 0B / 8.19kB 3

top Comando

Al igual que el comando top en Linux, podemos utilizarlo con Docker para obtener una lista de los procesos en ejecución

$ docker contenedor top {NOMBRE o ID DEL CONTENEDOR}

Ejemplo

$ docker container top thirsty_volhard
UID PID PPID C STIME TTY TIME CMD
root 2603 2582 0 12:34 ?                   00:00:00 nginx: proceso maestro nginx -g daemon off;
systemd 2659 2603 0 12:34 ?                   00:00:00 nginx: proceso trabajador
systemd 2660 2603 0 12:34 ?

00:00:00 nginx: proceso worker


$

rename Comando

Para renombrar un contenedor existente, utilice el comando rename

$ docker container rename {nombre del contenedor antiguo} {NUEVO

NOMBRE DE CONTENEDOR}
Ejemplo

$ docker ps
ID DE CONTENEDOR IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRES
904390b65d45 nginx "/docker-entrypoint...." hace 7 minutos Arriba 7 minutos 80/tcp nginx_container
$ docker container rename nginx_container nginx_new
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
904390b65d45 nginx "/docker-entrypoint...." hace 7 minutos Arriba 7 minutos 80/tcp nginx_new

$

comando diff

Podemos inspeccionar los cambios en los archivos o directorios del sistema de archivos de un contenedor con el comando diff
$

 docker container diff {NOMBRE o ID DEL CONTENEDOR}

Ejemplo

$ docker container diff nginx_new
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/uwsgi_temp
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
C /etc
C /etc/nginx
C /etc/nginx/conf.d
C /etc/nginx/conf.d/default.conf
C /run

A

/run/nginx.pid

$

Resumen

Para concluir, Doker ofrece un extenso conjunto de comandos para gestionar contenedores desde su creación hasta su destrucción. Hemos cubierto algunos de los comandos importantes y su uso en este artículo que debería darle una buena idea sobre la gestión de contenedores Docker

A continuación, descubra algunos de los recursos para aprender DevOps.

  • Abhishek Nair
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre DevOps
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder