[Docker Compose] Instalación, uso e implementación de clústeres de microservicios de Docker Compose


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:

  1. Abra una terminal e inicie sesión como usuario root.

  2. 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
    
  3. Conceder permisos de ejecución:

    sudo chmod +x /usr/local/bin/docker-compose
    
  4. 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 weby db, así como una red app_nety un volumen data_vol.

2.2 Explicación detallada de los archivos Docker Compose

  1. versioninstrucción

versionLa 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.

  1. servicesinstrucción

servicesLa 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, webel servicio utiliza nginx:latestuna imagen, ./htmlmonta el directorio del host en el /usr/share/nginx/htmldirectorio del contenedor y asigna el 8080puerto del host al 80puerto del contenedor.

  1. networksinstrucción

networksLas 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_netse define una red denominada.

  1. volumesinstrucción

volumesLas 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_volse 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 weby db, además de una red app_nety un volumen data_vol:

  • webEl servicio utiliza nginx:latestla duplicación para ./htmlmontar el directorio del host en el /usr/share/nginx/htmldirectorio del contenedor y asignar el puerto del host 8080al 80puerto del contenedor.
  • dbEl servicio utiliza mysql:5.7duplicación y establece la contraseña raíz de MySQL. Red app_nety Volumen data_voldefinen 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

  1. docker-compose up

Inicie el contenedor. Ejecute este comando en el directorio del proyecto y Compose iniciará docker-compose.ymlel servicio correspondiente según el archivo. Si no hay ningún docker-compose.ymlarchivo, puede usar -fel parámetro para especificar otros archivos de redacción.

docker-compose up
  1. 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 -fel parámetro para especificar otros archivos de composición.

docker-compose down
  1. 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
  1. 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
  1. 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.

  1. Escribir archivos Docker Compose

Cree un docker-compose.ymlarchivo 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 weby db. webEl servicio utiliza nginx:latestduplicación para 8080asignar el puerto del host al 80puerto del contenedor. dbEl servicio utiliza mysql:5.7duplicación y establece la contraseña raíz de MySQL.

  1. Iniciar aplicación

En el directorio que contiene docker-compose.ymlel archivo, ejecute el siguiente comando para iniciar la aplicación:

docker-compose up

Compose iniciará dos servicios, ejecutándose en dos contenedores respectivamente. webEl servicio utiliza Nginx para proporcionar servicios web y dbel servicio utiliza MySQL para proporcionar servicios de bases de datos.

  1. 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.

  1. 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-demoimplementar un clúster de proyectos de microservicio en un contenedor Docker.

  1. Primero cree un directorio de demostración en la nube y luego cree cuatro carpetas en este directorio: gateway, mysql, order-service, user-servicey cree otra docker-compose.ymlpara escribir la información de configuración de Docker Compose.

  1. 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.ymlarchivo 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.

  • nacosEl servicio utiliza nacos/nacos-serverla imagen, establece la variable de entorno MODEen standaloney asigna el puerto 8848 del contenedor al puerto 8848 del host.

  • mysqlEl servicio utiliza mysql:5.7.25duplicación, establece la contraseña del usuario raíz de MySQL 123y monta dos directorios locales en el contenedor para almacenar datos de MySQL y archivos de configuración, respectivamente.

  • userservice, orderservicey los tres servicios se crean gatewayutilizando en sus respectivos directorios de microservicios . DockerfileEsto significa que el proceso de construcción de estos tres servicios necesita ver los archivos en sus respectivos directorios por separado Dockerfile.

  • Para gatewaylos 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 -dcomando, Docker Compose creará e iniciará todo el clúster de microservicios de acuerdo con esta información de configuración.

  1. Modifique cloud-demola configuración en el proyecto: nombre la base de datos MySQL, nacosla dirección y la dirección IP del microservicio como el docker-composenombre del servicio en

Por ejemplo:

  1. Utilice mavenherramientas de empaquetado para empaquetar cada microservicio en el proyecto comoapp.jar

Es decir, cambie en todos los microservicios a buildla siguiente forma:

<build>
    <finalName>app</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
  1. Copie cada paquete de microservicio app.jaren 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, mysqllos 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.

  1. Implementar cloud-democlú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.

  1. 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
  1. gatewayAcceda 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.

Supongo que te gusta

Origin blog.csdn.net/qq_61635026/article/details/133577842
Recomendado
Clasificación