Hoja de trucos de comandos Docker para administradores de sistemas y desarrolladores…

Docker es un sistema de contenedorización que empaqueta y ejecuta la aplicación con sus dependencias dentro de un contenedor. Hay varios comandos Docker que debe conocer cuando trabaje con Docker. Este artículo trata sobre ello.

Si usted no sabe lo que es Docker, entonces usted puede tomar este curso Udemy para principiantes.

Encontrar la versión

Una de las primeras cosas que debe saber es cómo encontrar la versión de Docker instalada.

geekflare@geekflare:/home/geekflare$ docker --version

Docker versión 18.09.6, build 481bc77

Descarga de la imagen

Digamos que necesita tirar de la imagen docker desde dockerhub (repositorio docker). El siguiente ejemplo de tirar de la imagen del servidor HTTP Apache.

geekflare@geekflare:/home/geekflare$ docker pull httpd

Usando la etiqueta por defecto: latest

latest: Extrayendo de library/httpd

f5d23c7fed46: Pull completo

b083c5fd185b: Pull completo

bf5100a89e78: Pull completo

98f47fcaa52f: Pull completo

622a9dd8cfed: Pull completo

Digest: sha256:8bd76c050761610773b484e411612a31f299dbf7273763103edbda82acd73642

Estado: Descargada imagen más nueva para httpd:latest

geekflare@geekflare:/home/geekflare$

Imágenes

Lista todas las imágenes docker extraídas en el sistema con detalles de la imagen como TAG/IMAGE ID/SIZE etc.

geekflare@geekflare:/home/geekflare$ docker images

REPOSITORIO ETIQUETA IMAGEN ID CREADO TAMAÑO

httpd latest ee39f68eb241 hace 2 días 154MB

hello-world latest fce289e99eb9 hace 6 meses 1.84kB

sequenceiq/hadoop-docker 2.7.0 789fa0a3b911 hace 4 años 1.76GB

Ejecute

Ejecute la imagen docker mencionada en el comando. Este comando creará un contenedor docker en el que se ejecutará el servidor HTTP Apache.

geekflare@geekflare:/home/geekflare$ docker run -it -d httpd

09ca6feb6efc0578951a3e2557ed5855b2edda39a795d9703eb54d975930fe6e

¿Qué se está ejecutando?

ps lista todos los contenedores docker se están ejecutando con los detalles del contenedor.

geekflare@geekflare:/home/geekflare$ docker ps

CONTENEDOR ID IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRES

09ca6feb6efc httpd "httpd-foreground" hace 36 segundos Arriba 33 segundos 80/tcp suspicious_bell

Como puede ver, el servidor Apache se está ejecutando en este contenedor docker.

ps -a

Lista todos los contenedores docker en ejecución/salidos/detenidos con los detalles del contenedor.

geekflare@geekflare:/home/geekflare$ docker ps -a

CONTENEDOR ID IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRES

09ca6feb6efc httpd "httpd-foreground" hace 51 segundos Arriba 49 segundos 80/tcp suspicious_bell

2f6fb3381078 sequenceiq/hadoop-docker:2.7.0 "/etc/bootstrap.sh -d" hace 2 semanas Salió (137) hace 9 días quizzical_raman

9f397feb3a46 sequenceiq/hadoop-docker:2.7.0 "/etc/bootstrap.sh -..." hace 2 semanas Salió (255) hace 2 semanas 2122/tcp, 8030-8033/tcp, 8040/tcp, 8042/tcp, 8088/tcp, 19888/tcp, 49707/tcp, 50010/tcp, 50020/tcp, 50070/tcp, 50075/tcp, 50090/tcp determined_ritchie

9b6343d3b5a0 hola-mundo "/hello" hace 2 semanas Salió (0) hace 2 semanas peaceful_mclean

exec

Accede al contenedor docker y ejecuta comandos dentro del contenedor. En este ejemplo estoy accediendo al contenedor del servidor apache.

geekflare@geekflare:/home/geekflare$ docker exec -it 09ca6feb6efc bash

root@09ca6feb6efc:/usr/local/apache2# ls

bin build cgi-bin conf error htdocs icons include logs modules

root@09ca6feb6efc:/usr/local/apache2#

Escriba exit y pulse intro para salir del contenedor.

Eliminación del contenedor

Elimine el contenedor docker con el id de contenedor mencionado en el comando.

geekflare@geekflare:/home/geekflare$ docker rm 9b6343d3b5a0

9b6343d3b5a0

Ejecute el siguiente comando para comprobar si el contenedor se ha eliminado o no.

geekflare@geekflare:/home/geekflare$ docker ps -a

CONTENEDOR ID IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRES

09ca6feb6efc httpd "httpd-foreground" Hace aproximadamente un minuto Arriba Hace aproximadamente un minuto 80/tcp suspicious_bell

2f6fb3381078 sequenceiq/hadoop-docker:2.7.0 "/etc/bootstrap.sh -d" hace 2 semanas Salió (137) hace 9 días quizzical_raman

9f397feb3a46 sequenceiq/hadoop-docker:2.7.0 "/etc/bootstrap.sh -..." hace 2 semanas Salió (255) hace 2 semanas 2122/tcp, 8030-8033/tcp, 8040/tcp, 8042/tcp, 8088/tcp, 19888/tcp, 49707/tcp, 50010/tcp, 50020/tcp, 50070/tcp, 50075/tcp, 50090/tcp determined_ritchie

Eliminación de la imagen

Elimine la imagen docker con el id de imagen docker mencionado en el comando

geekflare@geekflare:/home/geekflare$ docker rmi fce289e99eb9

Sin etiquetar: hello-world:latest

Untagged: hello-world@sha256:41a65640635299bab090f783209c1e3a3f11934cf7756b09cb2f1e02147c6ed8

Deleted: sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e

Deleted: sha256:af0b15c8625bb1938f1d7b17081031f649fd14e6b233688eea3c5483994a66a3

geekflare@geekflare:/home/geekflare$

Reinicie Docker

Reinicie el contenedor docker con el id de contenedor mencionado en el comando.

geekflare@geekflare:/home/geekflare$ docker restart 09ca6feb6efc

09ca6feb6efc

Ejecute el siguiente comando y compruebe el parámetro STATUS para verificar si el contenedor se ha iniciado recientemente.

geekflare@geekflare:/home/geekflare$ docker ps

CONTENEDOR ID IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRES

09ca6feb6efc httpd "httpd-foreground" hace 6 minutos Arriba 9 segundos 80/tcp suspicious_bell

Deteniendo Docker

Detenga un contenedor con el id de contenedor mencionado en el comando.

geekflare@geekflare:/home/geekflare$ docker stop 09ca6feb6efc

09ca6feb6efc

Ejecute el siguiente comando para comprobar si el contenedor sigue funcionando o se ha detenido.

geekflare@geekflare:/home/geekflare$ docker ps

CONTENEDOR ID IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRES

Iniciando Docker

Este comando en docker inicia el contenedor docker con el id de contenedor mencionado en el comando.

geekflare@geekflare:/home/geekflare$ docker start 09ca6feb6efc

09ca6feb6efc

Ejecute el siguiente comando para comprobar si el contenedor se ha iniciado o no.

geekflare@geekflare:/home/geekflare$ docker ps

CONTENEDOR ID IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRES

09ca6feb6efc httpd "httpd-foreground" hace 8 minutos Arriba 3 segundos 80/tcp suspicious_bell

Matar

Detiene el contenedor Docker inmediatamente. El comando Docker stop detiene el contenedor con gracia, esa es la diferencia entre un comando kill y stop.

geekflare@geekflare:/home/geekflare$ docker kill 09ca6feb6efc

09ca6feb6efc

Ejecute el siguiente comando para ver si el contenedor fue matado o no.

geekflare@geekflare:/home/geekflare$ docker ps

CONTENEDOR ID IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRES

Cometer

Guarde una nueva imagen docker con el id de contenedor mencionado en el comando en el sistema local. En el siguiente ejemplo, geekflare es el nombre de usuario y httpd_image es el nombre de la imagen.

geekflare@geekflare:/home/geekflare$ docker commit 09ca6feb6efc geekflare/httpd_image

sha256:d1933506f4c1686ab1a1ec601b1a03a17b41decbc21d8acd893db090a09bb31c

Inicio de sesión

Inicie sesión en docker hub. Se le pedirán sus credenciales de docker hub para iniciar sesión.

geekflare@geekflare:/home/geekflare$ docker login

Inicie sesión con su ID de Docker para enviar y recibir imágenes desde Docker Hub. Si no tiene un ID de Docker, diríjase a https://hub.docker.com para crear uno.

Nombre de usuario: geekflare

Contraseña:

Configure un ayudante de credenciales para eliminar esta advertencia. Consulte

https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Inicio de sesión exitoso

Empuje

Suba una imagen docker con el nombre de imagen mencionado en el comando en el dockerhub.

geekflare@geekflare:/home/geekflare$ docker push geekflare/httpd_image

El push hace referencia al repositorio [docker.io/geekflare/httpd_image]

734d9104a6a2: Empujado

635721fc6973: Montado desde library/httpd

bea448567d6c: Montado desde library/httpd

bfaa5f9c3b51: Montado desde library/httpd

9d542ac296cc: Montado desde library/httpd

d8a33133e477: Montado desde library/httpd

último: digest: sha256:3904662761df9d76ef04ddfa5cfab764b85e3eedaf10071cfbe2bf77254679ac tamaño: 1574

Red Docker

El siguiente comando en docker lista los detalles de toda la red en el cluster.

geekflare@geekflare:/home/geekflare$ docker network ls

RED ID NOMBRE CONTROLADOR ÁMBITO

85083e766f04 bridge bridge local

f51d1f3379e0 host host local

5e5d9a192c00 none null local

Hay varios otros comandos de red docker.

geekflare@geekflare:/home/geekflare$ docker network

Uso: docker network COMANDO

Gestionar redes

Comandos:

conectar Conectar un contenedor a una red

crear Crear una red

desconectar Desconectar un contenedor de una red

inspeccionar Mostrar información detallada sobre una o varias redes

ls Listar redes

prune Eliminar todas las redes no utilizadas

rm Eliminar una o más redes

Ejecute 'docker network COMMAND --help' para obtener más información sobre un comando.

Información Docker

Obtenga información detallada sobre docker instalado en el sistema, incluyendo la versión del kernel, el número de contenedores e imágenes, etc.

geekflare@geekflare:/home/geekflare$ docker info

Contenedores: 3

En ejecución: 1

En pausa 0

Detenido: 2

Imágenes: 3

Versión del servidor: 18.09.6

Controlador de almacenamiento: overlay2

Sistema de archivos de respaldo: extfs

Soporta d_type: true

Native Overlay Diff: true

Controlador de registro: json-file

Controlador Cgroup: cgroupfs

Plugins:

Volumen: local

Red: bridge host macvlan null overlay

Registro: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog

Enjambre: inactivo

Tiempos de ejecución: runc

Tiempo de ejecución por defecto: runc

Binario de inicio: docker-init

versión containerd: bb71b10fd8f58240ca47fbb579b9d1028eea7c84

runc versión: 2b18fe1d885ee5083ef9f0838fee39b62d653e30

versión init: fec3683

Opciones de seguridad:

apparmor

seccomp

Perfil: por defecto

Versión del núcleo: 4.18.0-25-generic

Sistema operativo: Ubuntu 18.10

Tipo de sistema operativo: linux

Arquitectura: x86_64

CPUs: 1

Memoria total: 4.982GiB

Nombre: geekflare

ID: RBCP:YGAP:QG6H:B6XH:JCT2:DTI5:AYJA:M44Z:ETRP:6TO6:OPAY:KLNJ

Docker Root Dir: /var/lib/docker

Modo depuración (cliente): false

Modo depuración (servidor): false

Nombre de usuario: geekflare

Registro: https://index.docker.io/v1/

Etiquetas:

Experimental: false

Registros inseguros:

127.0.0.0/8

Restauración en vivo activada: false

Licencia del producto: Motor comunitario

Copiando archivo

Copie un archivo de un contenedor Docker al sistema local.

En este ejemplo, estoy copiando el archivo httpd.pid dentro de un contenedor docker con id 09ca6feb6efc a /home/geekflare/

geekflare@geekflare:/home/geekflare$ sudo docker cp 09ca6feb6efc:/usr/local/apache2/logs/httpd.pid /home/geekflare/

[sudo ] contraseña para geekflare:

Ejecute el siguiente comando para comprobar si el archivo se ha copiado o no.

geekflare@geekflare:/home/geekflare$ ls

Escritorio Documentos ejemplo ejemplos.escritorio httpd.pid nginx_new.yml nginx.yml

Comprobación del historial

Muestra el historial de una imagen docker con el nombre de imagen mencionado en el comando.

geekflare@geekflare:/home/geekflare$ docker history httpd

IMAGEN CREADA POR TAMAÑO COMENTARIO

ee39f68eb241 hace 2 días /bin/sh -c #(nop) CMD ["httpd-foreground"] 0B

<missing> 2 días ago /bin/sh -c #(nop) EXPOSE 80 0B

<hace 2 días /bin/sh -c #(nop) COPY file:c432ff61c4993ecd... 138B

<ausente> hace 4 días /bin/sh -c set -eux; savedAptMark="$(apt-m... 49.1MB

<Hace 4 días /bin/sh -c #(nop) ENV HTTPD_PATCHES= 0B

<missing> 4 days ago /bin/sh -c #(nop) ENV HTTPD_SHA256=b4ca9d05... 0B

<missing> 4 días atrás /bin/sh -c #(nop) ENV HTTPD_VERSION=2.4.39 0B

<falta> hace 4 días /bin/sh -c set -eux; apt-get update; apt-g... 35.4MB

<missing> 4 días ago /bin/sh -c #(nop) WORKDIR /usr/local/apache2 0B

<missing> 4 days ago /bin/sh -c mkdir -p "$HTTPD_PREFIX" && chow... 0B

<missing> 4 días ago /bin/sh -c #(nop) ENV PATH=/usr/local/apach... 0B

<missing> 4 días ago /bin/sh -c #(nop) ENV HTTPD_PREFIX=/usr/loc... 0B

<missing> 5 días atrás /bin/sh -c #(nop) CMD ["bash"] 0B

<missing> 5 días ago /bin/sh -c #(nop) ADD file:71ac26257198ecf6a... 69.2MB

Comprobación de registros

Muestra los logs del contenedor docker con id contenido mencionado en el comando.

geekflare@geekflare:/home/geekflare$ docker logs 09ca6feb6efc

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Establezca la directiva 'ServerName' globalmente para suprimir este mensaje

AH00558: httpd: No se ha podido determinar de forma fiable el nombre de dominio completo del servidor, utilizando 172.17.0.2. Establezca la directiva 'ServerName' globalmente para suprimir este mensaje

[Lun Jul 15 14:01:55.400472 2019] [mpm_event:notice] [pid 1:tid 140299791516800] AH00489: Apache/2.4.39 (Unix) configurado -- reanudando operaciones normales

[Lun Jul 15 14:01:55.400615 2019] [core:notice] [pid 1:tid 140299791516800] AH00094: Línea de comandos: 'httpd -D FOREGROUND'

[lun jul 15 14:08:36.798229 2019] [mpm_event:notice] [pid 1:tid 140299791516800] AH00491: atrapado SIGTERM, cerrando

AH00558: httpd: No se ha podido determinar de forma fiable el nombre de dominio completo del servidor, utilizando 172.17.0.2. Establezca la directiva 'ServerName' globalmente para suprimir este mensaje

AH00558: httpd: No se ha podido determinar de forma fiable el nombre de dominio completo del servidor, utilizando 172.17.0.2. Establezca la directiva 'ServerName' globalmente para suprimir este mensaje

[Lun Jul 15 14:08:38.259870 2019] [mpm_event:notice] [pid 1:tid 139974087980160] AH00489: Apache/2.4.39 (Unix) configurado -- reanudando operaciones normales

[Lun Jul 15 14:08:38.260007 2019] [core:notice] [pid 1:tid 139974087980160] AH00094: Línea de comandos: 'httpd -D FOREGROUND'

[lun jul 15 14:09:01.540647 2019] [mpm_event:notice] [pid 1:tid 139974087980160] AH00491: atrapado SIGTERM, cerrando

AH00558: httpd: No se ha podido determinar de forma fiable el nombre de dominio completo del servidor, utilizando 172.17.0.2. Establezca la directiva 'ServerName' globalmente para suprimir este mensaje

AH00558: httpd: No se ha podido determinar de forma fiable el nombre de dominio completo del servidor, utilizando 172.17.0.2. Establezca la directiva 'ServerName' globalmente para suprimir este mensaje

[Lun Jul 15 14:10:43.782606 2019] [mpm_event:notice] [pid 1:tid 140281554879616] AH00489: Apache/2.4.39 (Unix) configurado -- reanudando operaciones normales

[Lun Jul 15 14:10:43.782737 2019] [core:notice] [pid 1:tid 140281554879616] AH00094: Línea de comandos: 'httpd -D FOREGROUND'

AH00558: httpd: No se ha podido determinar de forma fiable el nombre de dominio completo del servidor, utilizando 172.17.0.2. Establezca la directiva 'ServerName' globalmente para suprimir este mensaje

AH00558: httpd: No se ha podido determinar de forma fiable el nombre de dominio completo del servidor, utilizando 172.17.0.2. Establezca la directiva 'ServerName' globalmente para suprimir este mensaje

[Mon Jul 15 14:14:08.270906 2019] [mpm_event:notice] [pid 1:tid 140595254346880] AH00489: Apache/2.4.39 (Unix) configurado -- reanudando operaciones normales

[Lun Jul 15 14:14:08.272628 2019] [core:notice] [pid 1:tid 140595254346880] AH00094: Línea de comandos: 'httpd -D FOREGROUND'

Buscando imagen

Buscar una imagen docker en dockerhub con el nombre mencionado en el comando.

geekflare@geekflare:/home/geekflare$ docker search hadoop

NOMBRE DESCRIPCIÓN ESTRELLAS OFICIAL AUTOMATIZADO

sequenceiq/hadoop-docker Una forma sencilla de probar Hadoop 611 [OK]

uhopper/hadoop Imagen base de Hadoop con configuración dinámica... 98 [OK]

harisekhon/hadoop Apache Hadoop (HDFS Yarn, etiquetas 2.2 - 2.8) 54 [OK]

bde2020/hadoop-namenode Hadoop namenode de un cluster hadoop 22 [OK]

kiwenlau/hadoop Ejecutar un clúster Hadoop en contenedores Docker 19

izone/hadoop Ecosistema Hadoop 2.8.5 totalmente distribuido, Ju... 14 [OK]

uhopper/hadoop-namenode Hadoop namenode 9 [OK]

bde2020/hadoop-datanode Hadoop datanode de un cluster hadoop 9 [OK]

singularidades/hadoop Apache Hadoop 8 [OK]

uhopper/hadoop-datanode Nodo de datos Hadoop 7 [OK]

harisekhon/hadoop-dev Apache Hadoop (HDFS Yarn) Dev Tools Gi... 6 [OK]

Actualizando configuración

Actualizar la configuración del contenedor. Esto muestra todas las opciones de actualización.

geekflare@geekflare:/home/geekflare$ docker update --help

Uso: docker update [OPCIONES] CONTENEDOR [CONTENEDOR...]

Actualiza la configuración de uno o más contenedores

Opciones:

--blkio-weight uint16 Block IO (peso relativo), entre 10 y 1000, o 0 para desactivar

(por defecto 0)

--cpu-period int Limitar el periodo CFS (Programador Completamente Justo) de la CPU

--cpu-quota int Limitar CFS de CPU (Programador completamente justo) cuota

--cpu-rt-period int Limitar el periodo en tiempo real de la CPU en microsegundos

--cpu-rt-runtime int Limitar el tiempo de ejecución en tiempo real de la CPU en microsegundos

-c, --cpu-shares int Cuotas de la CPU (peso relativo)

--cpus decimal Número de CPU

--cpuset-cpus string CPUs en las que permitir la ejecución (0-3, 0,1)

--cpuset-mems cadena MEMs en las que permitir la ejecución (0-3, 0,1)

--kernel-memory bytes Límite de memoria del núcleo

-m, --memory bytes Límite de memoria

--memory-reservation bytes Límite suave de memoria

--memory-swap bytes Límite de swap igual a la memoria más el swap: '-1' para activar el swap ilimitado

--restart string Política de reinicio a aplicar cuando un contenedor sale

Ejecute el siguiente comando para actualizar la configuración de la CPU del contenedor docker con el id de contenedor mencionado en el comando.

geekflare@geekflare:/home/geekflare$ docker update -c 1 2f6fb3381078

2f6fb3381078

Creando volumen

Cree un volumen que el contenedor docker utilizará para almacenar datos.

geekflare@geekflare:/home/geekflare$ docker volume create

7e7bc886f69bb24dbdbf19402e31102a25db91bb29c56cca3ea8b0c611fd9ad0

Ejecute el siguiente comando para saber si el volumen se ha creado o no.

geekflare@geekflare:/home/geekflare$ docker volume ls

NOMBRE DEL VOLUMEN CONTROLADOR

local 7e7bc886f69bb24dbdbf19402e31102a25db91bb29c56cca3ea8b0c611fd9ad0

Instalación del plugin

Instale un plugin docker vieux/sshfs con el entorno de depuración establecido en 1.

geekflare@geekflare:/home/geekflare$ docker plugin install vieux/sshfs DEBUG=1

El plugin "vieux/sshfs" está solicitando los siguientes privilegios:

- red: [host]

- mount: [/var/lib/docker/plugins/]

- mount: []

- dispositivo: [/dev/fuse]

- capacidades: [CAP_SYS_ADMIN]

¿Concede los permisos anteriores? [sí/no] sí

último: Extrayendo de vieux/sshfs

52d435ada6a4: Descarga completada

Digest: sha256:1d3c3e42c12138da5ef7873b97f7f32cf99fb6edde75fa4f0bcf9ed277855811

Estado: Descargada imagen más reciente para vieux/sshfs:latest

Plugin vieux/sshfs instalado

Ejecute el siguiente comando para listar los plugins docker.

geekflare@geekflare:/home/geekflare$ docker plugin ls

ID NOMBRE DESCRIPCIÓN ENABLED

2a32d1fb95af vieux/sshfs:último plugin sshFS para Docker true

Cierre de sesión

Saliendo de dockerhub.

geekflare@geekflare:/home/geekflare$ docker logout

Eliminación de las credenciales de inicio de sesión para https://index.docker.io/v1/

Conclusión

Espero que haya conseguido una buena comprensión de los comandos docker por ahora. Pruebe estos comandos en su entorno dev o de laboratorio para practicar y aprender.

Si usted está interesado en aprender Docker y Kubernetes, a continuación, echa un vistazo a este curso en línea.