¿Qué es Docker?
Si lee sitios web de noticias de tecnología, lo más probable es que haya oído hablar de Docker y de todas las cosas maravillosas que puede hacer esta plataforma abierta que permite a los desarrolladores y administradores de sistemas crear, enviar y ejecutar aplicaciones distribuidas. Pero, ¿por qué leer sobre Docker cuando puedes probarlo de primera mano? En este tutorial, le enseñaremos cómo instalar y configurar Docker en Arch Linux, y también le mostraremos algunos ejemplos de lo que puede hacer con Docker.
En su sitio web oficial , Docker se describe como “la plataforma de contenedores de software líder en el mundo”. Está bien, pero ¿qué es un contenedor? Un contenedor es un paquete autónomo de bibliotecas y configuraciones que garantiza que una pieza de software siempre se ejecutará exactamente igual, independientemente de dónde se implemente.
En otras palabras, los contenedores y Docker resuelven el problema de la fragmentación que ha estado plagando el mundo Unix durante décadas. Finalmente, los desarrolladores pueden llevar fácilmente el software de las máquinas de desarrollo a servidores remotos y saber con certeza que todo funcionará como se espera.
Docker fue lanzado inicialmente en 2013 por la empresa Docker, Inc. La persona que inició Docker es Solomon Hykes, quien fue cofundador y director ejecutivo de dotCloud, una empresa de plataforma como servicio. Varios ingenieros de dotCloud contribuyeron a Docker, incluidos Andrea Luzzardi y Francois-Xavier Bourlet.
Solo tres años después del lanzamiento inicial de Docker, un análisis reveló que los principales contribuyentes a Docker incluyen a Red Hat, IBM, Microsoft, Huawei, Google y Cisco. En poco tiempo, Docker ha llamado la atención de algunas de las empresas más grandes del mundo y se ha consolidado como la plataforma líder en contenedores de software.
Docker versus virtualización
A diferencia de las máquinas virtuales, que obtienen acceso virtual a los recursos del host a través de un hipervisor, los contenedores Docker se ejecutan de forma nativa en el kernel de la máquina host, cada uno se ejecuta como un proceso discreto y no ocupa más memoria que cualquier otro ejecutable.
Los contenedores de Docker no ejecutan ningún sistema operativo invitado. En cambio, contienen solo un ejecutable y sus dependencias de paquete. Esto hace que los contenedores requieran menos recursos y permite que las aplicaciones en contenedores se ejecuten en cualquier lugar.
Cómo instalar Docker en Arch Linux
0. Antes de comenzar
Aunque Arch Linux todavía permite que las instalaciones de i686 reciban paquetes actualizados, de acuerdo con los planes de la distribución para eliminar gradualmente el soporte de esta arquitectura, Docker solo admite sistemas de 64 bits. Esa vieja máquina polvorienta que puede tener en su armario puede ser excelente para algunos juegos retro, pero no podrá ejecutar Docker en ella.
1. Habilite el módulo de bucle
Además de la arquitectura de 64 bits, Docker también depende del módulo de bucle, que es un dispositivo de bloque que asigna sus bloques de datos no a un dispositivo físico como un disco duro o una unidad de disco óptico, sino a los bloques de un archivo normal en un archivo. sistema de archivos oa otro dispositivo de bloque, de acuerdo con el Manual del programador de Linux .
Docker debería habilitar el módulo de bucle automáticamente durante la instalación. Compruebe si se ha cargado “loop” como módulo del kernel:
# lsmod | grep loop |
Si se ha cargado el módulo de bucle, puede pasar al siguiente paso. De lo contrario, ejecute los dos comandos siguientes:
# tee /etc/modules-load.d/loop.conf <<< "loop" |
# modprobe loop |
El primer comando pasa la palabra “loop” a la entrada estándar del comando de la izquierda, que es el comando tee. Luego, tee escribe la palabra “loop” en el archivo loop.conf. El comando modprobe agrega el módulo de bucle al kernel de Linux.
2. Instale Docker
Puede elegir si desea instalar una versión estable de Docker desde el repositorio de la Comunidad o una versión de desarrollo de AUR . El primero se llama simplemente docker y el segundo se llama docker-git. Si es nuevo en el uso de Docker en general o simplemente usa Docker en Arch Linux, le recomendamos encarecidamente que instale el paquete estable:
# pacman -S docker |
3. Inicie y habilite Docker
Antes de poder usar Docker en Arch Linux, debe iniciar y habilitar el demonio Docker usando system:
# systemctl start docker.service |
# systemctl enable docker.service |
El primer comando inicia inmediatamente el demonio de Docker y el segundo comando asegura que el demonio se iniciará automáticamente al arrancar.
Opcionalmente, use el siguiente comando para verificar la instalación y activación:
# docker info |
Tenga en cuenta que puede ejecutar Docker solo como root. Para ejecutar Docker como usuario normal, agréguese al grupo de Docker:
# groupadd docker |
# gpasswd -a user docker [replace user with your username] |
El primer comando crea un nuevo grupo llamado Docker y el segundo comando agrega un usuario al grupo. No olvide volver a iniciar sesión para aplicar los cambios.
Configuración posterior a la instalación
Siempre que su máquina host esté configurada correctamente para empezar, no queda mucho por hacer después de la instalación antes de que pueda comenzar a usar Docker en Arch Linux.
Sin embargo, es posible que desee cambiar la ubicación de las imágenes de Docker. Docker almacena imágenes de forma predeterminada en / var / lib / docker. Para cambiar su ubicación, primero detenga el demonio de Docker:
# systemctl stop docker.service |
Luego, mueva las imágenes al destino de destino. Finalmente, agregue el siguiente parámetro al ExecStart en /etc/systemd/system/docker.service.d/docker-storage.conf:
ExecStart=/usr/bin/dockerd --data-root=/path/to/new/location/docker -H fd:// |
Para obtener más opciones de configuración posteriores a la instalación, consulte la página wiki oficial de Arch de Docker
Usando Docker en Arch Linux
Con Docker instalado y configurado, es hora de finalmente divertirse con él.
Primeros pasos
Para ver lo que puede hacer Docker, pídale que enumere todos los comandos disponibles:
# docker |
También puede pedirle a Docker que le diga su versión o que le brinde información de todo el sistema:
# docker version |
# docker info |
Descarga de imágenes de Docker
Cuando esté listo para probar algo más interesante, puede descargar una imagen de Arch Linux x86_64:
# docker pull base/archlinux |
Si desea descargar alguna otra imagen de Docker, búsquela con el siguiente comando (asegúrese de reemplazar [nombre de la imagen] con su consulta de búsqueda preferida:
# docker search [image name] |
A medida que experimente con Docker, su colección de imágenes de Docker aumentará naturalmente y la cantidad de espacio de almacenamiento disponible se reducirá. Cuando Docker comienza a ocupar demasiado espacio, es posible que desee cambiar su ubicación de almacenamiento predeterminada y moverla a un disco duro o partición diferente. De forma predeterminada, Docker almacena imágenes y contenedores en / var / lib / docker. Para establecer una nueva ubicación de almacenamiento, detenga el demonio de Docker:
# systemctl stop docker.service |
A continuación, cree un archivo desplegable “docker.conf” en un nuevo directorio desplegable /etc/systemd/system/docker.service.d. Todos los archivos con el sufijo “.conf” del nuevo directorio desplegable se analizarán después de analizar el archivo de configuración original, lo que le permitirá anular su configuración sin tener que modificarlo directamente.
# mkdir /etc/systemd/system/docker.service.d |
# touch /etc/systemd/system/docker.service.d/docker.conf |
A continuación, abra el archivo desplegable recién creado en su editor de texto favorito y agregue las siguientes líneas:
[Service] |
ExecStart= |
ExecStart=/usr/bin/dockerd --graph= "/mnt/new_volume" --storage-driver=devicemapper |
No olvide cambiar “new_volume” a su nueva ubicación de almacenamiento preferida y “devicemapper” a su controlador de almacenamiento actual, que controla cómo se almacenan y administran las imágenes y los contenedores en su host Docker. Puede averiguar qué controlador de almacenamiento utiliza actualmente Docker mediante el siguiente comando, con el que ya debería estar familiarizado:
# docker info |
Lo único que queda es volver a cargar el demonio de servicio para buscar unidades nuevas o cambiadas e iniciar Docker nuevamente:
# systemctl daemon-reload |
# systemctl start docker.service |
Creación de contenedores nuevos
Una vez que haya descargado su primera imagen de Docker, puede usarla para crear un nuevo contenedor especificando un comando para ejecutar usando la imagen:
# docker run [image name] [command to run] |
Si el contenedor se detiene repentinamente, puede comenzar de nuevo:
# docker run [container ID] |
Y si quieres que se detenga, también puedes hacerlo:
# docker stop [container ID] |
De vez en cuando, es posible que desee confirmar los cambios o la configuración del archivo de un contenedor en una nueva imagen. Enumere todos los contenedores Docker en ejecución para encontrar el contenedor que le gustaría comprometer en una nueva imagen:
# docker ps |
Emita el siguiente comando para confirmar los cambios y crear una nueva imagen:
# docker commit [container ID] [image name] |
Solo tenga en cuenta que cuando confirma los cambios o la configuración del archivo de un contenedor en una nueva imagen, la imagen recién creada no incluirá ningún dato contenido en los volúmenes montados dentro del contenedor.
Finalmente, puede eliminar fácilmente un contenedor y comenzar desde cero:
# docker rm [container ID] |
Supervisión de contenedores de Docker
Hay varias opciones disponibles para recopilar métricas útiles de los contenedores de Docker. Una opción disponible es el comando docker stats, que brinda acceso a la CPU, la memoria, la red y la utilización del disco para todos los contenedores que se ejecutan en su host.
# docker stats |
Si ejecuta varios contenedores de Docker al mismo tiempo, es posible que desee restringir la salida del comando a solo uno o más contenedores especificando los identificadores de contenedor, separados por un espacio:
# docker stats [container ID] [container ID] [container ID] |
Para obtener una instantánea única del uso actual de los recursos del contenedor, agregue la opción –no-stream:
# docker stats --no-steam |
También puede utilizar la opción –todos, que muestra los contenedores detenidos:
# docker stats --all |
Además de las estadísticas de Docker, también puede utilizar cAdvisor (una herramienta de monitoreo de contenedores de Google), Prometheus (un sistema de monitoreo de código abierto y una base de datos de series de tiempo) o Agentless System Crawler (ASC) (una herramienta de monitoreo en la nube de IBM con soporte para contenedores). ), entre otros servicios.
Configuración de redes
De forma predeterminada, Docker crea tres redes automáticamente y puede enumerarlas con el siguiente comando:
# docker network ls |
Debería ver algo como esto:
NETWORK ID NAME DRIVER |
7fca4eb8c647 bridge bridge |
9f904ee27bf5 none null |
cf03ee007fb4 host host |
La red puente corresponde a la red docker0, que está presente en todas las instalaciones de Docker. La red none no tiene acceso a la red externa, pero se puede usar para ejecutar trabajos por lotes. Finalmente, la red del host agrega un contenedor en la pila de la red del host sin ningún aislamiento entre la máquina host y el contenedor.
Utilice el siguiente comando para ver información sobre la red de puente predeterminada:
# docker network inspect bridge |
Docker recomienda el uso de redes puente definidas por el usuario para controlar qué contenedores pueden comunicarse entre sí. Docker no limita la cantidad de redes nuevas que los usuarios pueden crear utilizando las redes predeterminadas como plantillas, y los contenedores se pueden conectar a varias redes al mismo tiempo. Cree una nueva red de puentes:
# docker network create --driver bridge bridge_new |
E inspeccionarlo:
# docker network inspect bridge_new |
Inicie un contenedor busybox (o cualquier otro) conectado a la red recién creada:
# docker run --network= bridge_new -itd --name=[container ID] busybox |
SSH en un contenedor
Para SSH en contenedores Docker, puede instalar un servidor SSH en las imágenes en las que desea ssh-into y ejecutar cada contenedor mapeando el puerto ssh a uno de los puertos del host. Sin embargo, este no es el enfoque correcto. “Para reducir la complejidad, las dependencias, el tamaño de los archivos y los tiempos de compilación, debe evitar la instalación de paquetes adicionales o innecesarios solo porque podría ser ‘agradable tenerlos’”, afirma la guía del usuario de Docker .
En cambio, es una mejor idea usar un servidor SSH en contenedor y pegarlo a cualquier contenedor en ejecución. El único requisito es que el contenedor tenga bash. El usuario Jeroen Peeters proporciona el siguiente ejemplo en Stack Exchange y anima a los lectores a visitar su GitHub para obtener más información:
$ docker run -d -p 2222:22 |
- v /var/run/docker.sock:/var/run/docker.sock |
-e CONTAINER=my-container -e AUTH_MECHANISM=noAuth |
jeroenpeeters/docker- ssh |
$ ssh -p 2222 localhost |
Alternativamente, puede usar el comando docker exec para ejecutar un comando en un contenedor en ejecución. Por ejemplo:
# docker exec -it <mycontainer> bash |
Compartir datos entre un contenedor Docker y el host
Puede utilizar los volúmenes de Docker para compartir archivos entre un sistema host y el contenedor de Docker. Esto puede resultar útil, por ejemplo, cuando desee crear una copia permanente de un archivo de registro para analizarlo más tarde.
Primero, cree un directorio en el host en una ubicación a la que un usuario de Docker tendrá acceso:
# mkdir /container-share |
Luego, adjunte el directorio de host al volumen del contenedor ubicado en el directorio / data dentro del contenedor:
#docker run -d -P --name test-container -v /home/user/container-share:/data archlinux |
Verá el ID del contenedor recién creado. Obtenga acceso de caparazón al contenedor:
docker attach [container ID] |
Una vez que haya ingresado el comando anterior, será el directorio de datos que agregamos en el tiempo de ejecución del contenedor. Cualquier archivo que agregue a este directorio estará disponible en la carpeta del host.
Conclusión
Docker es una tecnología de software inmensamente poderosa, y este tutorial es solo una introducción para aquellos que nunca lo han usado antes. Puede aprender mucho más sobre Docker en la documentación oficial , que siempre se mantiene actualizada. Si desea aprender a definir e implementar aplicaciones con Docker, consulte la guía Introducción a Docker . Si tiene algún problema con Docker, la página de solución de problemas es el mejor lugar donde buscar una solución.