Directorio de artículos
Prefacio: Problemas con la implementación de Docker
En aplicaciones prácticas, cuando necesitamos implementar una gran cantidad de contenedores Docker, resulta muy engorroso administrar manualmente la configuración y la implementación de estos contenedores. Cada contenedor puede requerir diferentes parámetros, asignaciones de puertos, configuraciones de red, etc., lo que genera complejidad en la gestión y el mantenimiento. Para resolver este problema, podemos utilizar la herramienta Docker Compose, que proporciona una forma simple y unificada de definir y administrar aplicaciones Docker de múltiples contenedores.
1. Primera introducción a Docker Compose
1.1 ¿Qué es Docker Compose?
Docker Compose es una herramienta proporcionada por Docker Company para definir y ejecutar aplicaciones Docker de múltiples contenedores. Con Docker Compose, puede utilizar archivos YAML simples para configurar varios parámetros, como servicios, redes, volúmenes, etc., para toda la aplicación. De esta manera, podemos implementar y administrar fácilmente múltiples contenedores Docker con un solo clic, simplificando la configuración y administración de aplicaciones de múltiples contenedores.
1.2 Instalar Docker Compose en CentOS
Instalar Docker Compose es muy sencillo y se puede instalar en CentOS siguiendo estos pasos:
-
Abra una terminal e inicie sesión como usuario root.
-
Descargue los binarios de Docker Compose usando el siguiente comando:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
Conceder permisos de ejecución:
sudo chmod +x /usr/local/bin/docker-compose
-
Verificar la instalación:
docker-compose --version
Si la instalación se realiza correctamente, se mostrará la información de la versión de Docker Compose.
Mediante los pasos anteriores, Docker Compose se instaló correctamente en CentOS. A continuación, exploraremos en profundidad cómo usar Docker Compose para escribir y administrar aplicaciones de múltiples contenedores.
2. Comprensión profunda de los archivos Docker Compose
2.1 Descripción general del archivo Docker Compose
Un archivo Docker Compose es un archivo YAML que se utiliza para definir y configurar servicios, redes, volúmenes, etc. para una aplicación Docker de múltiples contenedores. A través de los archivos Docker Compose, podemos describir la estructura y los parámetros de la aplicación de forma declarativa, simplificando así la implementación y gestión de aplicaciones en contenedores.
Un archivo Docker Compose básico generalmente incluye las siguientes partes:
version
: Especifique la versión del archivo de redacción.services
: Defina cada servicio, cada servicio corresponde a un contenedor.networks
: define la configuración de red.volumes
: Defina volúmenes para datos persistentes.
A continuación se muestra un ejemplo de un archivo Docker Compose simple:
version: '3'
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
networks:
app_net:
volumes:
data_vol:
En este ejemplo se definen dos servicios web
y db
, así como una red app_net
y un volumen data_vol
.
2.2 Explicación detallada de los archivos Docker Compose
version
instrucción
version
La directiva se utiliza para especificar la versión del archivo Compose. Diferentes versiones pueden admitir diferentes características y sintaxis. Las versiones comunes incluyen 2
, 2.1
, 3
, etc. Elija la versión adecuada según sus necesidades.
services
instrucción
services
La directiva define cada servicio y cada servicio corresponde a un contenedor. Cada servicio puede incluir los siguientes elementos de configuración comunes:
image
: Especifique la imagen que se utilizará.build
: especifique la ruta del Dockerfile para crear la imagen.ports
: Especifique la asignación de puertos.environment
: Especifique variables de entorno.volumes
: monte el volumen especificado.
A continuación se muestra un ejemplo de un servicio:
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
En este ejemplo, web
el servicio utiliza nginx:latest
una imagen, ./html
monta el directorio del host en el /usr/share/nginx/html
directorio del contenedor y asigna el 8080
puerto del host al 80
puerto del contenedor.
networks
instrucción
networks
Las directivas se utilizan para definir la configuración de la red. Se puede especificar una red específica para el servicio. A continuación se muestra un ejemplo de una red:
networks:
app_net:
En este ejemplo, app_net
se define una red denominada.
volumes
instrucción
volumes
Las directivas se utilizan para definir volúmenes de datos persistentes. A continuación se muestra un ejemplo de un volumen:
volumes:
data_vol:
En este ejemplo, data_vol
se define un volumen llamado.
2.3 Ejemplo: escribir archivos Docker Compose
version: '3'
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
networks:
app_net:
volumes:
data_vol:
En este ejemplo se definen dos servicios web
y db
, además de una red app_net
y un volumen data_vol
:
web
El servicio utilizanginx:latest
la duplicación para./html
montar el directorio del host en el/usr/share/nginx/html
directorio del contenedor y asignar el puerto del host8080
al80
puerto del contenedor.db
El servicio utilizamysql:5.7
duplicación y establece la contraseña raíz de MySQL. Redapp_net
y Volumendata_vol
definen una red y un volumen respectivamente.
A través de este ejemplo, podrá comprender mejor la estructura básica y la sintaxis de los archivos Docker Compose. En la próxima lección, aprenderemos más sobre cómo usar Docker Compose para implementar y administrar aplicaciones de múltiples contenedores.
3. Comandos relacionados con Docker Compose
Docker Compose proporciona una serie de comandos para administrar aplicaciones de múltiples contenedores. A continuación, presentaremos algunos comandos de Docker Compose de uso común para ayudar a utilizar y administrar mejor las aplicaciones en contenedores.
3.1 Comandos Docker Compose de uso común
docker-compose up
Inicie el contenedor. Ejecute este comando en el directorio del proyecto y Compose iniciará docker-compose.yml
el servicio correspondiente según el archivo. Si no hay ningún docker-compose.yml
archivo, puede usar -f
el parámetro para especificar otros archivos de redacción.
docker-compose up
docker-compose down
Detener y eliminar contenedores, redes, volúmenes. La ejecución de este comando en el directorio del proyecto hará que Compose detenga y elimine todos los servicios asociados con el proyecto. También puede utilizar -f
el parámetro para especificar otros archivos de composición.
docker-compose down
docker-compose ps
Muestra el estado de todos los servicios del proyecto. Ejecute este comando en el directorio del proyecto y Compose enumerará el estado de todos los servicios en el proyecto, incluido el estado de ejecución, la asignación de puertos y otra información.
docker-compose ps
docker-compose logs
Muestra la salida del registro del servicio. Ejecute este comando en el directorio del proyecto y Compose mostrará la salida del registro en tiempo real de todos los servicios del proyecto.
docker-compose logs
docker-compose exec
Ejecute el comando en el servicio. Puede utilizar este comando para ejecutar comandos específicos en el servicio especificado, por ejemplo:
docker-compose exec web ls -l
Los anteriores son algunos comandos de Docker Compose de uso común. A través de estos comandos, podemos iniciar, detener y administrar fácilmente aplicaciones de múltiples contenedores.
3.2 Ejemplo: implementar una aplicación web sencilla utilizando Docker Compose
El siguiente es un ejemplo sencillo para demostrar cómo utilizar Docker Compose para implementar una aplicación que incluye servicios web y servicios de bases de datos.
- Escribir archivos Docker Compose
Cree un docker-compose.yml
archivo llamado y agregue el siguiente contenido:
version: '3'
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
En este ejemplo, se definen dos servicios web
y db
. web
El servicio utiliza nginx:latest
duplicación para 8080
asignar el puerto del host al 80
puerto del contenedor. db
El servicio utiliza mysql:5.7
duplicación y establece la contraseña raíz de MySQL.
- Iniciar aplicación
En el directorio que contiene docker-compose.yml
el archivo, ejecute el siguiente comando para iniciar la aplicación:
docker-compose up
Compose iniciará dos servicios, ejecutándose en dos contenedores respectivamente. web
El servicio utiliza Nginx para proporcionar servicios web y db
el servicio utiliza MySQL para proporcionar servicios de bases de datos.
- Acceder a aplicaciones web
Cuando acceda en el navegador http://宿主机IP:8080
, verá la página de bienvenida proporcionada por Nginx. En este punto, una aplicación simple de múltiples contenedores se implementa y ejecuta exitosamente.
- detener y limpiar
Cuando la aplicación ya no sea necesaria, puede detener y limpiar los contenedores, redes y volúmenes ejecutando los siguientes comandos:
docker-compose down
A través de este simple ejemplo, puede ayudarnos a escribir archivos Docker Compose y cómo usar Docker Compose para iniciar, detener y administrar aplicaciones de múltiples contenedores. Esto será muy útil para la gestión de aplicaciones complejas en contenedores.
4. Utilice Docker Compose para implementar clústeres de microservicios
Objetivo: utilizar Docker Compose para cloud-demo
implementar un clúster de proyectos de microservicio en un contenedor Docker.
- Primero cree un directorio de demostración en la nube y luego cree cuatro carpetas en este directorio:
gateway
,mysql
,order-service
,user-service
y cree otradocker-compose.yml
para escribir la información de configuración de Docker Compose.
- Escribir archivos Docker Compose
version: "3.2"
services:
nacos:
image: nacos/nacos-server
environment:
MODE: standalone
ports:
- "8848:8848"
mysql:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: 123
volumes:
- "$PWD/mysql/data:/var/lib/mysql"
- "$PWD/mysql/conf:/etc/mysql/conf.d/"
userservice:
build: ./user-service
orderservice:
build: ./order-service
gateway:
build: ./gateway
ports:
- "10010:10010"
Descripción:
Este es un docker-compose.yml
archivo utilizado para definir la información de configuración de Docker Compose, contiene la definición de múltiples servicios, cada servicio tiene una configuración específica.
-
nacos
El servicio utilizanacos/nacos-server
la imagen, establece la variable de entornoMODE
enstandalone
y asigna el puerto 8848 del contenedor al puerto 8848 del host. -
mysql
El servicio utilizamysql:5.7.25
duplicación, establece la contraseña del usuario raíz de MySQL123
y monta dos directorios locales en el contenedor para almacenar datos de MySQL y archivos de configuración, respectivamente. -
userservice
,orderservice
y los tres servicios se creangateway
utilizando en sus respectivos directorios de microservicios .Dockerfile
Esto significa que el proceso de construcción de estos tres servicios necesita ver los archivos en sus respectivos directorios por separadoDockerfile
. -
Para
gateway
los servicios, también asigne el puerto 10010 del contenedor al puerto 10010 del host.
El propósito de este archivo es describir la configuración y las dependencias de cada servicio en toda la arquitectura de microservicios. Al ejecutar el docker-compose up -d
comando, Docker Compose creará e iniciará todo el clúster de microservicios de acuerdo con esta información de configuración.
- Modifique
cloud-demo
la configuración en el proyecto: nombre la base de datos MySQL,nacos
la dirección y la dirección IP del microservicio como eldocker-compose
nombre del servicio en
Por ejemplo:
- Utilice
maven
herramientas de empaquetado para empaquetar cada microservicio en el proyecto comoapp.jar
Es decir, cambie en todos los microservicios a build
la siguiente forma:
<build>
<finalName>app</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
- Copie cada paquete de microservicio
app.jar
en su directorio correspondiente y cree un archivo Dockerfile en su propio directorio:
Contenido del archivo Dockerfile:
FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
ENTRYPOINT java -jar /tmp/app.jar
estructura del directorio de demostración en la nube:
Entre ellos, mysql
los archivos de configuración de la base de datos y los archivos de la tabla de la base de datos se almacenan en el directorio.
- Implementar
cloud-demo
clúster de microservicios
Comando de implementación:
docker-compose up -d
Después de ejecutar este comando, dado que actualmente no hay imágenes de Nacos y MySQL en Docker, estas dos imágenes se extraerán primero. Luego se crearán las imágenes del microservicio y finalmente se ejecutarán todas las imágenes.
- Ver contenedores en ejecución
Tenga en cuenta que es posible que otros servicios no se inicien porque Nacos no se inicia primero. En este caso, puede reiniciar otros microservicios para resolver el problema:
docker-compose restart gateway userservice orderservice
gateway
Acceda al clúster de microservicios a través de la puerta de enlace
Usuario visitante:
Para acceder a los pedidos:
Hasta ahora, nuestro clúster de microservicios se ha creado con éxito a través de Docker Compose.