===== Создание сервисов в 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