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