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.