13.09.2023

Docker para principiantes

In uno de los artículos anteriores, exploramos el proceso de ejecutar un Docker contenedor a partir de una imagen. DockerEl concepto principal de gira en torno a que cada proceso individual tenga su propio contenedor dedicado con el entorno necesario adaptado a sus necesidades específicas. Sin embargo, cuando se trata de aplicaciones complejas, surge un desafío.
Considere una aplicación web que requiere una base de datos, un servidor web y potencialmente un intérprete PHP. Esto ya implica administrar tres contenedores separados, y resulta inconveniente configurarlos y ejecutarlos manualmente de forma individual. Para abordar esta cuestión, el "dockerSe introdujo la utilidad -compose". Permite la gestión de grupos de contenedores, facilitando su creación, configuración y eliminación con un solo comando. Este tutorial tiene como objetivo presentar Docker para principiantes, centrándose en el uso práctico de docker-componer.

Docker-componer configuración

En primer lugar, debes instalar el conjunto de paquetes 'base':

apt-get update && apt-get install -y ca-certificates curl gnupg && sudo install -m 0755 -d /etc/apt/keyrings && curl -fsSL https://descargar.docker. Com /linux/ubuntu/gpg | sudo gpg --dearmo -o /etc/apt/keyrings/docker.gpg && chmod a+r /etc/apt/keyrings/docker.gpg

echo \ "deb [arch="$(dpkg --print-architecture)" firmado-por=/etc/apt/keyrings/docker.gpg] https://descargar.docker. Com /linux/ubuntu \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" estable" | \ sudo tee /etc/apt/sources.list.d/docker.lista > /dev/null

apt-get actualización && apt-get instalación docker-esta docker-esta-cli contenedord.io docker-complemento-buildx docker-componer-complemento -y

El proceso adicional es muy simple, basta con descargar el archivo precompilado:

rizo -L "https://github. Com /docker/compose/releases/download/1.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-componer

Luego conceda permisos de ejecución:

chmod +x /usr/local/bin/docker-componer

Luego, verifique la versión del paquete:

docker-componer --versión

Creando un proyecto

Si ha trabajado o visto proyectos utilizando Docker, habrás notado que hay un docker-componer archivo en la carpeta del proyecto.yaml". Es en este archivo donde se configuran los contenedores que deben crearse para su proyecto. Se crearán automáticamente usando docker-componer. El archivo utiliza sintaxis YAML y debe contener los siguientes datos:

versión: 'versión_archivo'
redes: 'redes_usadas'
volúmenes: 'used_storages'
servicios: 'contenedores_usados'

La versión indica la versión de sintaxis del archivo, diferentes versiones tienen diferentes palabras clave disponibles, lo cual se hace por compatibilidad con versiones anteriores. Usaremos la versión 3.5. A continuación, debemos enumerar los volúmenes, las redes y los propios contenedores.
La sintaxis de YAML es similar a JSON, hay pares clave-valor separados por dos puntos, pero aquí el valor puede estar completamente vacío, puede contener otras claves y también puede ser una matriz de valores, en cuyo caso cada elemento de la matriz comienza con un estrellarse "-". Pero a diferencia de JSON, la sangría aquí es muy importante para mostrar el anidamiento de valores, así que no te los pierdas.
Creemos una carpeta llamada 'serverspace-docker' y crea un archivo llamado 'docker-compose.yaml' dentro de él:

mkdir /optar/serverspace-docker && nano /optar/docker-componer.yaml

Y pon este código dentro:

versión: '3.5'
servicios: docker-nginx: imagen: nginx

Basta con ejecutar el contenedor.

Contenedores en ejecución

Para iniciar un grupo de contenedores configurados en docker-compose.yaml, debe navegar a la carpeta donde se encuentra este archivo de configuración y ejecutar el comando docker-componer allí. Por ejemplo:

cd / opt /serverspace-docker/
docker-componer

Después de eso, se lanzarán los contenedores, sus flujos de salida se fusionarán en uno y verá información en la terminal. Para detener los contenedores, simplemente presione Ctrl+C. Si desea ejecutar los contenedores en segundo plano, utilice el -d opción:

docker-componer -d

Para detener la ejecución de contenedores en segundo plano, puede utilizar el docker-componer parada mando:

La docker-componer El comando no solo detiene todos los contenedores en ejecución sino que también los elimina:

Reenvío de puertos de contenedores

El contenedor está funcionando, pero de momento nos sirve de poco. Con Docker, podemos reenviar el puerto 80 del contenedor al sistema operativo host y obtener acceso a él. Para hacer esto, use el 'puertos'directiva. La sintaxis es la siguiente:

puertos:
- puerto_externo: puerto_interno

Entonces, reenviemos el puerto 80 al 8098.

Como resultado podemos abrir nginx en el puerto 'externo':

Carpetas de montaje

Para montar almacenamiento externo o carpetas de host en el contenedor, se utiliza la sección "volúmenes". La sintaxis es muy similar a trabajar con puertos:

volúmenes:
- /ruta/a/carpeta/externa:/ruta/a/carpeta/interna

Creemos un archivo llamado "index.html" en la carpeta del proyecto actual y montemos esta carpeta en lugar del "/usr/share/" del contenedor.nginx/html/" carpeta:

echo "¡Eres el mejor!" > index.html

Y agregue la directiva de montaje de carpetas al docker-componer archivo:

Después de reiniciar el contenedor, verá su propia página en el navegador.

Configurar volúmenes

Podemos montar no sólo carpetas externas sino también volúmenes creados en Docker al contenedor. Para hacer esto, primero debe agregar el volumen a la sección principal de "volúmenes". Por ejemplo, "serverspace-vl". La mayoría de las aplicaciones web requieren una base de datos, como MySQL. Agreguemos otro contenedor para esta base de datos y agreguemosle nuestro volumen. El volumen se agrega de la misma manera que una carpeta externa, excepto que en lugar de una carpeta, se especifica el nombre del volumen. agreguemos MySQL a nuestra configuración:

docker-mysql:
imagen: mysql
volúmenes:
- serverspace-vl:/var/lib/mysql
ambiente:
- MYSQL_ROOT_PASSWORD=ContraseñaMuyStr0ng
- MYSQL_DATABASE=base de datos
- MYSQL_USER=usuario
- MYSQL_PASSWORD=Otra Contraseña

Aquí, también agregamos la sección "entorno" donde configuramos variables de entorno para el contenedor. Son necesarios para especificar el nombre de la base de datos predeterminada y la contraseña de root.

 

Configurando redes

Los contenedores necesitan comunicarse entre sí. Nosotros ya tenemos Nginx y MySQLy no necesitan comunicarse entre sí todavía. Pero una vez que tengamos un contenedor para PhpMyAdmin, que necesita acceder a MariaDB, la situación cambiará. Las redes virtuales se utilizan para la comunicación entre contenedores y se pueden agregar de manera similar a los volúmenes. Primero, agregue la red al " principal "telecomunicaciones " sección:

redes:
serverspace-red:

Luego, agregue esta red para cada contenedor que necesite acceso "externo". Posteriormente, los contenedores estarán disponibles en la red por sus nombres. Por ejemplo, agreguemos PhpMyAdmin y démosle acceso a la base de datos:

docker-phpmyadmin:
imagen: phpmyadmin/phpmyadmin:último
puertos:
- "8099: 80"
ambiente:
-PMA_HOST=docker-mysql
redes:
- serverspace-red

Aquí, en la variable PMA_HOST, nos referimos a "docker-mysql" host, al que se puede acceder gracias a la red compartida entre estos contenedores. De manera similar, en el "docker-mysql" contenedor, se puede acceder a nuestro contenedor PhpMyAdmin como "docker-phpmyadmin". Puedes abrir la dirección http://docker-server:8099 y autenticarse para comprobar si la base de datos está funcionando.

Conexión a un contenedor

Con docker-compose, puede conectarse a cualquier contenedor del grupo. Simplemente use el ejecutivo dominio. Por ejemplo, inicie el proyecto en segundo plano:

docker-componer -d

Luego vamos a conectarnos al contenedor con Nginx:

docker-componer ejecutivo docker-nginx / bin / bash

Conclusiones

En este artículo, cubrimos el uso de Docker para principiantes. También describimos cómo usar algunos docker contenedores como un complejo, una unidad. El tema es bastante extenso y complejo, pero muy interesante. Al implementar el proyecto en una máquina de esta manera, puede implementarlo donde lo necesite simplemente copiando la configuración allí. Es por eso que esta tecnología ha ganado tanta popularidad entre los desarrolladores y DevOps.