Docker Stack implementa clústeres multiservicio

1. Introducción a Docker Stack

En modo independiente, podemos usar Docker Compose para organizar múltiples servicios, mientras que Docker Swarm solo puede implementar una implementación simple de un único servicio. El protagonista de este artículo es Docker Stack. A través de Docker Stack, solo necesitamos modificar ligeramente el archivo de configuración docker-compose.yml existente para completar la orquestación multiservicio en un entorno de clúster Docker.

2. Caso de construcción del clúster Docker Stack

Implementar una APP de votación, que incluya los siguientes servicios:

  • 5 servicios de aplicación: voto, redis, trabajador, db, resultado
  • Servicios de herramientas: portainjerto y visualizador.
    Insertar descripción de la imagen aquí

Primero cree un archivo docker-compose.yml, usando la sintaxis de Docker Compose v3

version: "3"
services:

  redis:
    image: redis:alpine
    ports:
      - "6379"
    networks:
      - frontend
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend
    deploy:
      placement:
        constraints: [node.role == manager]

  vote:
    image: dockersamples/examplevotingapp_vote:before
    ports:
      - 5000:80
    networks:
      - frontend
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
      restart_policy:
        condition: on-failure

  result:
    image: dockersamples/examplevotingapp_result:before
    ports:
      - 5001:80
    networks:
      - backend
    depends_on:
      - db
    deploy:
      replicas: 1
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 1
      labels: [APP=VOTING]
      restart_policy:
        condition: on-failure
        delay: 10s
        max_attempts: 3
        window: 120s
      placement:
        constraints: [node.role == manager]

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
        
  portainer:
    image: portainer/portainer
    ports:
      - "9000:9000"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      replicas: 1
      placement:
        constraints: [node.role == manager]

networks:
  frontend:
  backend:

volumes:
  db-data:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103

Implemente el servicio en el nodo administrador:

[root@swarm-manager example-voting-app]# docker stack deploy example --compose-file=docker-compose.yml 
Creating network example_frontend
Creating network example_default
Creating network example_backend
Creating service example_result
Creating service example_worker
Creating service example_visualizer
Creating service example_portainer
Creating service example_redis
Creating service example_db
Creating service example_vote
1234567891011

Implementación completada:

[root@swarm-manager example-voting-app]# docker stack services example
ID                  NAME                 MODE                REPLICAS            IMAGE                                          PORTS
cdmrhfag3zje        example_vote         replicated          2/2                 dockersamples/examplevotingapp_vote:before     *:5000->80/tcp
csjcltpwvpzs        example_visualizer   replicated          1/1                 dockersamples/visualizer:stable                *:8080->8080/tcp
ihys1qvpz4i5        example_worker       replicated          1/1                 dockersamples/examplevotingapp_worker:latest   
l0ufhl8n0ozg        example_portainer    replicated          1/1                 portainer/portainer:latest                     *:9000->9000/tcp
m2icguw00ls9        example_db           replicated          1/1                 postgres:9.4                                   
pu2h7rqzpaa0        example_redis        replicated          2/2                 redis:alpine                                   *:30001->6379/tcp
tom14od7paf1        example_result       replicated          1/1                 dockersamples/examplevotingapp_result:before   *:5001->80/tcp
123456789
[root@swarm-manager example-voting-app]# docker stack ps example
ID                  NAME                   IMAGE                                          NODE                DESIRED STATE       CURRENT STATE           ERROR                       PORTS
loj1h2dk9l1s        example_vote.1         dockersamples/examplevotingapp_vote:before     swarm-worker3       Running             Running 2 minutes ago                               
kp4n980ldv49        example_db.1           postgres:9.4                                   swarm-manager       Running             Running 2 minutes ago                               
0hf6d80nwwyf        example_worker.1       dockersamples/examplevotingapp_worker:latest   swarm-manager       Running             Running 2 minutes ago                               
rnjnwhl86ro6        example_redis.1        redis:alpine                                   swarm-worker1       Running             Running 2 minutes ago                               
1376pp1lvrly        example_portainer.1    portainer/portainer:latest                     swarm-manager       Running             Running 2 minutes ago                               
xj9a9iu9g2s8        example_worker.1       dockersamples/examplevotingapp_worker:latest   swarm-manager       Shutdown            Failed 2 minutes ago    "task: non-zero exit (1)"   
g5ts3oiibrhn        example_visualizer.1   dockersamples/visualizer:stable                swarm-manager       Running             Running 3 minutes ago                               
kgcttt1xigu2        example_worker.1       dockersamples/examplevotingapp_worker:latest   swarm-manager       Shutdown            Failed 3 minutes ago    "task: non-zero exit (1)"   
jpqdinh0st7b         \_ example_worker.1   dockersamples/examplevotingapp_worker:latest   swarm-manager       Shutdown            Failed 3 minutes ago    "task: non-zero exit (1)"   
ff9bq1vcgbz9        example_result.1       dockersamples/examplevotingapp_result:before   swarm-manager       Running             Running 2 minutes ago                               
q27wp9nna0yc        example_vote.2         dockersamples/examplevotingapp_vote:before     swarm-worker1       Running             Running 2 minutes ago                               
s6hvxlgdz77v        example_redis.2        redis:alpine                                   swarm-worker2       Running             Running 2 minutes ago 
1234567891011121314

Acceso al navegador:

vote             ip:5000
result           ip:5001  
portainer        ip:9000     
visualizer 	     ip:8080    
1234

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

3. La diferencia entre Docker Stack y Docker Compose

  • La pila de Docker ignora el comando "compilar" y no puede utilizar el comando de pila para crear una nueva imagen. Requiere que la imagen esté preconstruida. Por lo tanto, docker-compose es más adecuado para escenarios de desarrollo;
  • Docker Compose es un proyecto de Python que, internamente, utiliza la especificación API de Docker para operar contenedores. Por lo tanto, es necesario instalar Docker-compose para usarlo con Docker en su computadora;
  • La funcionalidad Docker Stack está incluida en Docker Engine. No necesita instalar paquetes adicionales para usarlo, las pilas acoplables son solo parte del modo enjambre.
  • La pila Docker no admite docker-compose.yml escrito según la versión 2, lo que significa que la versión es al menos 3. Sin embargo, Docker Compose aún puede procesar archivos con las versiones 2 y 3;
  • Docker Stack ha hecho todo el trabajo de Docker Compose, por lo que Docker Stack dominará. Al mismo tiempo, para la mayoría de los usuarios, cambiar al uso de la pila acoplable no es difícil ni requiere mucha sobrecarga. Si es nuevo en Docker o está eligiendo una tecnología para un nuevo proyecto, utilice Docker Stack.
这个命令就是docker stack,它看起来与docker-compose完全相同。 这是一个他们的用法比较:

$ docker-compose -f docker-compose up
$ docker stack deploy -c docker-compose.yml somestackname

4. Comandos comunes de Docker Stack

Orden describir
implementación de la pila acoplable Implementar una nueva pila o actualizar una pila existente
pila acoplable ls Listar pilas existentes
pila acoplable ps Enumere las tareas en la pila
sala de pila acoplable Eliminar una o más pilas
servicios de pila acoplable Listar los servicios en la pila.

Supongo que te gusta

Origin blog.csdn.net/qq_36306519/article/details/130877724
Recomendado
Clasificación