Introducción
Docker está desempeñando un papel muy importante como formato de empaquetado para las aplicaciones y como interfaz unificadora y metodología que permite que los equipos de la aplicación sean propietarios de las imágenes de contenedor con formato de Docker (Nota: se supone que incluye todas las dependencias). Esto ha convertido a Docker en uno de los líderes líderes en microservicios y adaptación y uso basados en microservicios.
Muchas de las utilidades basadas en Docker y Docker nos ayudan a brindar mayores eficiencias de escalabilidad y rendimiento al reducir el espacio de las aplicaciones a través de dockerizado contenedores En muchos casos, las dependencias a nivel del sistema se reducen al mínimo, lo que ayuda a reducir el uso de la memoria en términos de MB (megabytes).
Todos estos aspectos ayudaron a hacer de Docker una de las principales utilidades basadas en contenedores. Docker tiene muchas utilidades y capacidades de línea de comandos. Docker Daemon puede proporcionar muchas de estas funciones adicionales y facilita la configuración de Docker.
Lea también:Cómo instalar Docker (Community Edition) en Ubuntu 16.04 / 18.04 LTS
Espero que el lector/usuario de este artículo sepa cómo hacer spin-off de docker-container en cualquier entorno Linux dado. Asumiendo esto, se describen algunas de las siguientes instalaciones,
Algunas de estas instalaciones se pueden utilizar para las siguientes funciones,
- Verifique la información del servidor Docker
- Descargar imágenes y actualizaciones de docker
- inspeccionar contenedores
- Ver y monitorear registros
- Supervisar varias estadísticas y detalles
1) Cómo verificar la versión actual de la ventana acoplable
Conocer la versión de docker es uno de los aspectos muy importantes ya que en función de esto se toman muchas de las decisiones basadas en la versión.
[email protected]:~$ sudo docker version Client: Version: 18.09.5 API version: 1.39 Go version: go1.10.8 Git commit: e8ff056 Built: Thu Apr 11 04:43:57 2019 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.5 API version: 1.39 (minimum version 1.12) Go version: go1.10.8 Git commit: e8ff056 Built: Thu Apr 11 04:10:53 2019 OS/Arch: linux/amd64 Experimental: false [email protected]:~$
Esta salida anterior proporciona las mismas versiones de la API del servidor y del cliente, y la versión del sistema operativo y la arquitectura también deberían ser las mismas. Si hay alguna discrepancia en las versiones basadas en el cliente y el servidor, la comunicación entre el cliente y el servidor fallará. Uno tiene que asegurarse de cuáles son las versiones compatibles y tomar decisiones en consecuencia.
2) Capturar y analizar la información del servidor
Usando docker info también podemos encontrar la siguiente información. Parte de la información útil que podemos recopilar es algo como qué servidor se está ejecutando como backend, qué versión de kernel es, qué sistema operativo y directorio raíz de Docker, etc.
[email protected]:~$ sudo docker info Containers: 2 Running: 1 Paused: 0 Stopped: 1 Images: 4 Server Version: 18.09.5 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 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: bb71b10fd8f58240ca47fbb579b9d1028eea7c84 runc version: 2b18fe1d885ee5083ef9f0838fee39b62d653e30 init version: fec3683 Security Options: apparmor seccomp Profile: default Kernel Version: 4.15.0-20-generic Operating System: Ubuntu 18.04 LTS OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 1.947GiB Name: linuxtechi ID: VRUY:AWXX:7JWE:YWU7:X4QW:TNKE:6H26:PNRR:QFGI:XYRQ:QUXF:MTXC Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false Product License: Community Engine WARNING: No swap limit support [email protected]:~$
Toda la información anterior se basa en cómo está configurado Docker Daemon, la versión del sistema operativo subyacente y el tipo de sistema de archivos. Todo esto se puede capturar usando el siguiente conjunto de comandos,
Ejecute el siguiente comando para obtener el nombre del sistema operativo, su versión y el nombre del código
[email protected]:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04 LTS" [email protected]:~$
o
[email protected]:~$ cat /etc/*-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04 LTS" NAME="Ubuntu" VERSION="18.04 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 18.04 LTS" VERSION_ID="18.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=bionic UBUNTU_CODENAME=bionic [email protected]:~$
Ejecute el siguiente comando para obtener los detalles del sistema de archivos:
[email protected]:~$ mount | grep "^/dev" /dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered) [email protected]:~$
3) Demonio acoplable
El demonio de la ventana acoplable juega un papel muy importante en el entorno de la ventana acoplable en su conjunto.
Sin un demonio adecuado, el sistema docker completo será inútil. Uno puede verificar el estado del demonio usando el siguiente comando,
Nota:- Suponiendo que se haya realizado la instalación adecuada de la ventana acoplable
[email protected]:~$ sudo service docker status
Si el servicio docker se está ejecutando, la salida del comando anterior debería ser similar a la siguiente:
En caso de que el servicio Docker no se esté ejecutando, use el siguiente comando para iniciarlo
[email protected]:~$ sudo systemctl start docker or [email protected]:~$ sudo service docker start [email protected]:~$
Utilice a continuación “ventana acoplable pdComando para enumerar los contenedores en ejecución
[email protected]:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [email protected]:~$
Para enumerar todos los contenedores en ejecución y detenidos, use «ventana acoplable ps -a”
[email protected]:~$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 497e6733d760 ubuntu "bash" 19 minutes ago Exited (0) 2 minutes ago goofy_morse 0862fe109f96 hello-world "/hello" 19 minutes ago Exited (0) 19 minutes ago vibrant_shannon [email protected]:~$
El directorio raíz predeterminado de Docker es “/var/lib/docker”
[email protected]:~$ sudo ls -l /var/lib/docker total 48 drwx------ 2 root root 4096 Apr 14 07:00 builder drwx------ 4 root root 4096 Apr 14 07:00 buildkit drwx------ 4 root root 4096 Apr 14 07:09 containers drwx------ 3 root root 4096 Apr 14 07:00 image drwxr-x--- 3 root root 4096 Apr 14 07:00 network drwx------ 16 root root 4096 Apr 14 07:27 overlay2 drwx------ 4 root root 4096 Apr 14 07:00 plugins drwx------ 2 root root 4096 Apr 14 07:27 runtimes drwx------ 2 root root 4096 Apr 14 07:00 swarm drwx------ 2 root root 4096 Apr 14 07:27 tmp drwx------ 2 root root 4096 Apr 14 07:00 trust drwx------ 2 root root 4096 Apr 14 07:00 volumes [email protected]:~$
El demonio docker, si no se inicia, se puede invocar con el siguiente comando,
[email protected]:~$ sudo dockerd
Salida de arriba estibador El comando será algo como a continuación:
Lea también: Cómo instalar Docker en CentOS 7
4) Descargar la imagen del contenedor docker e inspeccionar el contenedor
[email protected]:~$ sudo docker pull ubuntu:latest Using default tag: latest latest: Pulling from library/ubuntu 898c46f3b1a1: Pull complete 63366dfa0a50: Pull complete 041d4cd74a92: Pull complete 6e1bee0f8701: Pull complete Digest: sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8 Status: Downloaded newer image for ubuntu:latest [email protected]:~$ latest: Pulling from library/ubuntu898c46f3b1a1: Pull complete 63366dfa0a50: Pull complete 041d4cd74a92: Pull complete6e1bee0f8701: Pull complete Digest: sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8Status: Downloaded newer image for ubuntu:latest
Lanzamiento de un contenedor, el ejemplo se muestra a continuación
[email protected]:~$ sudo docker run -d -t ubuntu /bin/bash 58c023f0f5689ff08b858221ca10c985936a8c9dd91d08e84213009facb64724 [email protected]:~$ [email protected]:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 58c023f0f568 ubuntu "/bin/bash" 27 seconds ago Up 26 seconds boring_dijkstra [email protected]:~$
Inspeccionemos este contenedor usando el siguiente comando,
[email protected]:~$ sudo docker inspect 58c023f0f568 [ { "Id": "58c023f0f5689ff08b858221ca10c985936a8c9dd91d08e84213009facb64724", "Created": "2019-04-14T06:55:26.289022884Z", "Path": "/bin/bash", "Args": [], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 15538, "ExitCode": 0, "Error": "", "StartedAt": "2019-04-14T06:55:27.142274111Z", "FinishedAt": "0001-01-01T00:00:00Z" }, "Image": "sha256:94e814e2efa8845d95b2112d54497fbad173e45121ce9255b93401392f538499", "ResolvConfPath": "/var/lib/docker/containers/58c023f0f5689ff08b858221ca10c985936a8c9dd91d08e84213009facb64724/resolv.conf", ………………………………………………
Nota: – La salida completa de este comando no se muestra aquí, porque su salida es demasiado grande
5) Ir dentro de la imagen del contenedor en ejecución
Como uno sabe, Docker usó originalmente todo lo basado en el backend LXC, el comando lxc-attach de Linux se usó durante bastante tiempo. Pero una vez que Docker se creó como un paquete independiente y comenzó a usar «libcontainer” como backend predeterminado, el uso del comando “docker exec” se hizo popular
A continuación, el conjunto de comandos explica cómo iniciar sesión en el contenedor usando la línea de comando,
:~$ sudo docker exec -t
[email protected]:~$ sudo docker exec -t 58c023f0f568 ls -a . .dockerenv boot etc lib media opt root sbin sys usr .. bin dev home lib64 mnt proc run srv tmp var [email protected]:~$ sudo docker exec -t 58c023f0f568 ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 06:55 pts/0 00:00:00 /bin/bash root 20 0 0 07:17 pts/1 00:00:00 ps -ef [email protected]:~$
La forma alternativa de ejecutar comandos dentro del contenedor es, primero inicie sesión en el contenedor usando «adjuntar ventana acoplable” y luego ejecutar comandos
:~$ sudo docker adjuntar
[email protected]:~$ sudo docker attach 58c023f0f568 [email protected]:/#
Hay algunas situaciones en las que desea iniciar un contenedor, adjuntarle un volumen y cuando salimos del contenedor, debería eliminarse automáticamente, el ejemplo se muestra a continuación.
[email protected]:~$ sudo docker run -it --rm -v /usr/local/bin:/target jpetazzo/nsenter bash [email protected]:/src# df -h /target/ Filesystem Size Used Avail Use% Mounted on /dev/sda1 18G 5.6G 12G 34% /target [email protected]:/src# exit exit [email protected]:~$
Ahora verifique si docker se elimina o no automáticamente cuando salimos del contenedor, ejecute «docker ps»
[email protected]:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 58c023f0f568 ubuntu "/bin/bash" About an hour ago Up About an hour boring_dijkstra [email protected]:~$
6) Ventana acoplable de monitoreo
Usar «estadísticas de la ventana acoplableComando para mostrar la utilización de recursos de todos los contenedores,
[email protected]:~$ sudo docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 58c023f0f568 boring_dijkstra 0.00% 1.059MiB / 1.947GiB 0.05% 4.75kB / 0B 4.74MB / 0B 1 CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 58c023f0f568 boring_dijkstra 0.00% 1.059MiB / 1.947GiB 0.05% 4.75kB / 0B 4.74MB / 0B 1 [email protected]:~$
7) Eventos acoplables
Muchas veces, la captura de eventos de la ventana acoplable será crucial, ya que esto proporcionará información sobre varias operaciones y eventos de la ventana acoplable que tienen lugar. A continuación se muestra la instantánea de la misma.
[email protected]:~$ sudo docker events 2019-04-14T09:29:07.636990738+01:00 image pull wordpress:latest (name=wordpress) 2019-04-14T09:29:46.936676431+01:00 volume create 36187e0a44d277439fea0df2446fc44987fa814c52744091929e5c81bd8134e5 (driver=local) 2019-04-14T09:29:46.998798935+01:00 container create b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058 (image=wordpress, name=friendly_heisenberg) 2019-04-14T09:29:47.000202026+01:00 container attach b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058 (image=wordpress, name=friendly_heisenberg) 2019-04-14T09:29:47.209257002+01:00 network connect 18dd93c3c6fc9ce51a98f7d2359b319db251efcae6b991157965ef727a580702 (container=b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058, name=bridge, type=bridge) 2019-04-14T09:29:47.239846902+01:00 volume mount 36187e0a44d277439fea0df2446fc44987fa814c52744091929e5c81bd8134e5 (container=b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058, destination=/var/www/html, driver=local, propagation=, read/write=true) 2019-04-14T09:29:47.942997316+01:00 container start b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058 (image=wordpress, name=friendly_heisenberg) 2019-04-14T09:29:47.944521098+01:00 container resize b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058 (height=39, image=wordpress, name=friendly_heisenberg, width=130) 2019-04-14T09:29:59.829378089+01:00 container die b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058 (exitCode=0, image=wordpress, name=friendly_heisenberg) 2019-04-14T09:30:00.147435896+01:00 network disconnect 18dd93c3c6fc9ce51a98f7d2359b319db251efcae6b991157965ef727a580702 (container=b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058, name=bridge, type=bridge) 2019-04-14T09:30:00.845336887+01:00 volume unmount 36187e0a44d277439fea0df2446fc44987fa814c52744091929e5c81bd8134e5 (container=b97f6a565c518eb1464cf81e6e09db1acfd84a0fdcbaea94255f1f182d79c058, driver=local) ………………
Conclusión
La combinación de todos estos comandos y utilidades es muy importante para hacer de docker y container un entorno exitoso basado en microservicios. Como muchas de las arquitecturas de microservicios necesitan este tipo de utilidades para depurar, comprender y aprender más sobre ellas para el uso diario, espero que este artículo desempeñe un papel para ayudar en estos casos.
Lea también: Cómo instalar y usar docker-compose para implementar contenedores en CentOS 7