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 no sabe lo que es Docker, entonces 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
Versión de Docker 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: Pulling from library/httpd
f5d23c7fed46: Pull complete
b083c5fd185b: Pull completo
bf5100a89e78: Pull completo
98f47fcaa52f: Pull completo
622a9dd8cfed: Pull completo
Digest: sha256:8bd76c050761610773b484e411612a31f299dbf7273763103edbda82acd73642
Estado: Downloaded newer image for 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 TAG IMAGEN ID CREADO TAMAÑO
httpd latest ee39f68eb241 2 days ago 154MB
hello-world latest fce289e99eb9 6 months ago 1.84kB
sequenceiq/hadoop-docker 2.7.0 789fa0a3b911 4 years ago 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
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
09ca6feb6efc httpd "httpd-foreground" hace 36 segundos Up 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
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
09ca6feb6efc httpd "httpd-foreground" 51 seconds ago Up 49 seconds 80/tcp suspicious_bell
2f6fb3381078 sequenceiq/hadoop-docker:2.7.0 "/etc/bootstrap.sh -d" 2 weeks ago Exited (137) 9 days ago 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 hello-world "/hello" Hace 2 semanas Salió (0) Hace 2 semanas peaceful_mclean
exec
Acceda 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 a salida 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 ID DEL CONTENEDOR IMAGEN COMANDO CREADO ESTADO ESTADO PORTS 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" 2 weeks ago Exited (137) 9 days ago 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
No etiquetado: hello-world:latest
No etiquetado: hello-world@sha256:41a65640635299bab090f783209c1e3a3f11934cf7756b09cb2f1e02147c6ed8
Eliminado: 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
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
09ca6feb6efc httpd "httpd-foreground" 6 minutes ago Up 9 seconds 80/tcp suspicious_bell
Detener 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
ID DEL CONTENEDOR 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
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
09ca6feb6efc httpd "httpd-foreground" 8 minutes ago Up 3 seconds 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
ID DEL CONTENEDOR 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 ejemplo siguiente, 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
Iniciar 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 empujar y extraer imágenes de 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. Ver
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Inicio de sesión exitoso
Empuje
Cargue 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: Mounted from library/httpd
bea448567d6c: Mounted from library/httpd
bfaa5f9c3b51: Mounted from library/httpd
9d542ac296cc: Mounted from library/httpd
d8a33133e477: Montado desde library/httpd
latest: digest: sha256:3904662761df9d76ef04ddfa5cfab764b85e3eedaf10071cfbe2bf77254679ac size: 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
NETWORK ID NAME DRIVER SCOPE
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:
connect Conectar un contenedor a una red
create Crear una red
disconnect Desconectar un contenedor de una red
inspect Mostrar información detallada sobre una o más 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 de cgroup: cgroupfs
Plugins:
Volumen: local
Red: bridge host macvlan null overlay
Log: 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 de containerd: bb71b10fd8f58240ca47fbb579b9d1028eea7c84
versión de runc: 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
OSType: 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
Debug Mode (client): false
Debug Mode (server): 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 habilitada: false
Licencia del producto: Community Engine
Copiar un 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
Documentos de escritorio example examples.desktop httpd.pid nginx_new.yml nginx.yml
Comprobación del historial
Muestra el historial de una imagen acoplada con el nombre de imagen mencionado en el comando.
geekflare@geekflare:/home/geekflare$ docker history httpd
IMAGEN CREADA CREADA POR TAMAÑO COMENTARIO
ee39f68eb241 hace 2 días /bin/sh -c #(nop) CMD ["httpd-foreground"] 0B
<missing> hace 2 días /bin/sh -c #(nop) EXPOSE 80 0B
<missing> hace 2 días /bin/sh -c #(nop) COPY file:c432ff61c4993ecd... 138B
<missing> 4 days ago /bin/sh -c set -eux; savedAptMark="$(apt-m... 49.1MB
<missing> 4 days ago /bin/sh -c #(nop) ENV HTTPD_PATCHES= 0B
<missing> 4 days ago /bin/sh -c #(nop) ENV HTTPD_SHA256=b4ca9d05... 0B
<missing> 4 days ago /bin/sh -c #(nop) ENV HTTPD_VERSION=2..4.39 0B
<missing> 4 days ago /bin/sh -c set -eux; apt-get update; apt-g... 35.4MB
<missing> 4 days 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 atrás /bin/sh -c #(nop) ENV PATH=/usr/local/apach.. 0B
<missing> 4 días atrás /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 atrás /bin/sh -c #(nop) ADD file:71ac26257198ecf6a... 69.2MB
Comprobación de registros
Mostrar los logs del contenedor docker con id contenido mencionado en el comando.
geekflare@geekflare:/home/geekflare$ docker logs 09ca6feb6efc
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: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'
[Mon 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
[Mon Jul 15 14:08:38.259870 2019] [mpm_event:notice] [pid 1:tid 139974087980160] AH00489: Apache/2.4.39 (Unix) configurado -- reanudando operaciones normales
[Mon Jul 15 14:08:38.260007 2019] [core:notice] [pid 1:tid 139974087980160] AH00094: Línea de comandos: 'httpd -D FOREGROUND'
[Mon 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
[Mon 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
NAME DESCRIPTION STARS OFICIAL AUTOMATIZADO
sequenceiq/hadoop-docker Una forma sencilla de probar Hadoop 611 [OK]
uhopper/hadoop Imagen Hadoop base 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 clúster hadoop 22 [OK]
kiwenlau/hadoop Ejecutar clúster Hadoop en contenedores Docker 19
izone/hadoop Hadoop 2.8.5 Ecosistema totalmente distribuido, Ju.. 14 [OK]
uhopper/hadoop-namenode Hadoop namenode 9 [OK]
bde2020/hadoop-datanode Hadoop datanode de un cluster hadoop 9 [OK]
singularities/hadoop Apache Hadoop 8 [OK]
uhopper/hadoop-datanode Hadoop datanode 7 [OK]
harisekhon/hadoop-dev Apache Hadoop (HDFS Yarn) Dev Tools Gi.. 6 [OK]
Actualizando configuración
Actualizar 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...]
Actualice 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 la cuota CFS (Programador Completamente Justo) de la CPU
--cpu-rt-period int Limitar el periodo de tiempo real de la CPU en microsegundos
--cpu-rt-runtime int Limitar el tiempo de ejecución de la CPU en tiempo real en microsegundos
-c, --cpu-shares int Participaciones de la CPU (peso relativo)
--cpus decimal Número de CPUs
--cpuset-cpus cadena 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 habilitar 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
Creación del 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
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" solicita los siguientes privilegios:
- network: [host]
- mount: [/var/lib/docker/plugins/]
- mount: []
- dispositivo: [/dev/fuse]
- capacidades: [CAP_SYS_ADMIN]
¿Concede los permisos anteriores? [y/N] y
último: Extrayendo de vieux/sshfs
52d435ada6a4: Descarga completa
Digest: sha256:1d3c3e42c12138da5ef7873b97f7f32cf99fb6edde75fa4f0bcf9ed277855811
Estado: Downloaded newer image for vieux/sshfs:latest
Plugin instalado vieux/sshfs
Ejecute el siguiente comando para listar los plugins de docker.
geekflare@geekflare:/home/geekflare$ docker plugin ls
ID NAME DESCRIPTION ENABLED
2a32d1fb95af vieux/sshfs:latest sshFS plugin for Docker true
Cierre de sesión
Cerrar sesión en dockerhub.
geekflare@geekflare:/home/geekflare$ docker logout
Eliminando 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.
-
Avi es un entusiasta de la tecnología con experiencia en tecnologías de tendencia como DevOps, Cloud Computing, Big Data y muchas más. Le apasiona aprender tecnologías de vanguardia y compartir sus conocimientos con los demás a través de... Seguir leyendo