Содержание

Создание сервисов в swarm через docker-compose

Для примера создадим два сервиса api (на nodejs) и rabbitmq. В swarm в docker-compose нельзя использовать build, образы нужно готовить заранее и хранить в реестре.

Вначале создадим секрет с переменными средами для rabbitmq

vagrant@server3:~/docker-demo-5$ cat .env
AMQP_EXCHANGE=xchg_integrations
AMQP_USER=admin
AMQP_PASSWORD=admin
AMQP_HOSTNAME=rmq
AMQP_QUEUE=q_imageProcessor
 
vagrant@server3:~/docker-demo-5$ 
vagrant@server3:~/docker-demo-5$ docker secret create api.env .env
9kym3j99147z613xob1jfc2zw
 
vagrant@server3:~/docker-demo-5$ docker secret ls
ID                          NAME      DRIVER    CREATED         UPDATED
9kym3j99147z613xob1jfc2zw   api.env             7 seconds ago   7 seconds ago

docker-compose.yaml

после того как мы создали секрет и собрали образы можно писать docker-compose.yaml

Секреты в docker-compose появились начиная с версии 3.8
version: "3.8"
services:
  api:
    depends_on:
    - rmq
    image: localhost:5000/api:latest
    networks:
      myNetwork: null
    ports:
    - mode: ingress
      target: 3000
      published: 3002
      protocol: tcp
    restart: always
    secrets:
    - source: api.env
      target: /opt/app/.env
  rmq:
    environment:
      RABBITMQ_DEFAULT_PASS: admin
      RABBITMQ_DEFAULT_USER: admin
    image: rabbitmq:3-management
    networks:
      myNetwork: null
    restart: always
networks:
  myNetwork:
    driver: overlay
secrets:
  api.env:
    name: api.env
    external: true

up services

Теперь можно поднимать приложение

vagrant@server3:~/docker-demo-5$ docker stack deploy --compose-file=docker-compose.yaml app
Ignoring unsupported options: restart
 
Creating network app_myNetwork
Creating service app_api
Creating service app_rmq
 
 
vagrant@server3:~/docker-demo-5$ docker service ls
ID             NAME       MODE         REPLICAS   IMAGE                       PORTS
32ylt0emu2xg   app_api    replicated   1/1        localhost:5000/api:latest   *:3002->3000/tcp
06u2eow3cs2t   app_rmq    replicated   1/1        rabbitmq:3-management       
3srd0mspdl9a   registry   replicated   1/1        registry:latest             *:5000->5000/tcp
 
vagrant@server3:~/docker-demo-5$ docker stack services app
ID             NAME      MODE         REPLICAS   IMAGE                       PORTS
32ylt0emu2xg   app_api   replicated   1/1        localhost:5000/api:latest   *:3002->3000/tcp
06u2eow3cs2t   app_rmq   replicated   1/1        rabbitmq:3-management     
 
vagrant@server3:~/docker-demo-5$ docker stack ps app
ID             NAME        IMAGE                       NODE      DESIRED STATE   CURRENT STATE                ERROR     PORTS
m877xa5a4yv3   app_api.1   localhost:5000/api:latest   server5   Running         Running about a minute ago             
r75zyaal2d1y   app_rmq.1   rabbitmq:3-management       server2   Running         Running 42 seconds ago   

Логи

vagrant@server3:~/docker-demo-5$ docker service logs app_api
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:40:30 PM   [NestFactory] Starting Nest application...
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:40:30 PM   [InstanceLoader] DiscoveryModule dependencies initialized +244ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:40:30 PM   [InstanceLoader] ConfigHostModule dependencies initialized +0ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:40:30 PM   [InstanceLoader] ServeStaticModule dependencies initialized +1ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:40:30 PM   [InstanceLoader] RMQModule dependencies initialized +1ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:40:30 PM   [InstanceLoader] ConfigModule dependencies initialized +0ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:40:30 PM   [InstanceLoader] ApiModule dependencies initialized +0ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:40:30 PM   [RoutesResolver] ApiController {}: +5ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:40:30 PM   [RouterExplorer] Mapped {/upload, POST} route +3ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:40:35 PM   Failed to connect to RMQ +5033ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:40:35 PM   Error: getaddrinfo EAI_AGAIN rmq +1ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:40:45 PM   Failed to connect to RMQ +10012ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:40:45 PM   Error: getaddrinfo EAI_AGAIN rmq +0ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:40:55 PM   Failed to connect to RMQ +10010ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:40:55 PM   Error: getaddrinfo EAI_AGAIN rmq +0ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:41:05 PM   Failed to connect to RMQ +10012ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:41:05 PM   Error: getaddrinfo EAI_AGAIN rmq +0ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:41:15 PM   Failed to connect to RMQ +10012ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:41:15 PM   Error: getaddrinfo EAI_AGAIN rmq +0ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:41:23 PM   Failed to connect to RMQ +7511ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:41:23 PM   Error: connect ECONNREFUSED 10.0.1.5:5672 +1ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:41:28 PM   [RMQModule] Successfully connected to RMQ +5059ms
app_api.1.m877xa5a4yv3@server5    | [Nest] 1   - 12/19/2023, 8:41:28 PM   [NestApplication] Nest application successfully started +2ms