docker-compose – мережева взаємодія між різними проектами

Проблема

Бувають випадки коли маємо декілька проектів які описані в різних docker-compose файлах, які повинні комунікувати між собою та бути доступними через docker networks. Проте за замовчуванням всі контейнери ізольовані, тобто проєкт з одного docker-compose не буде доступний для іншого.

Для налаштування взаємодії нам допоможе bridging та external networks. Для взаємодії двох проектів які описані в окремих docker-compose файлах потрібно створити загальну мережу, яку вкажемо в обох файлах компоуз. Після чого сервіси зможуть взаємодіяти між собою.

Для прикладу використаємо два проекти:

  • monitoring-compose.yaml – файл в якому описана графана та прометеус;
  • prom-exporters.yaml – файл в якому описані експортери для прометеус;

Розв’язання проблеми

Для початку додамо в інсуючий проект external: true в networks (при першому запуску компоуз мережа буде створена автоматично), редагуємо перший файл monitoring-compose.yaml:

version: '3.9'
networks:
  prometheus:
    external: true

services:

  grafana-ui:
    image: grafana/grafana-oss:latest
    container_name: grafana
    hostname: grafana
    networks:
      - prometheus
    user: root
    ports:
      - 3000:3000
    restart: unless-stopped
    user: '0'
    volumes:
      - /data/grafana:/etc/grafana
      - /data/grafana/data:/var/lib/grafana

  prometheus-server:
    image: prom/prometheus:latest
    container_name: prometheus
    networks:
      - prometheus
    user: "root"
    ports:
      - "9090:9090"
    volumes:
      - /data/prometheus/prometheus-server.yaml:/etc/prometheus-server.yaml
      - /data/prometheus/alert.rules:/etc/alert.rules
      - /data/prometheus/data:/prometheus/data
    command:
      - '--config.file=/etc/prometheus-server.yaml'
    restart: always

а тепер другий файл prom-exporters.yaml:

version: '3.9'

networks:
  prometheus:
    external: true
services:
  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    networks:
      - prometheus
    ports:
      - "9100:9100"
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro,rslave
    command:
    #   - '--path.rootfs=/rootfs'
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - --collector.filesystem.ignored-mount-points
      - "^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)"
    restart: unless-stopped
    mem_limit: 500m
    mem_reservation: 100m

Запускаємо, провалюємось в контейнер з графаною, пробуємо перевірити доступність node-exporter, використавши ping:

# docker exec -it grafana sh
/usr/share/grafana # ping node-exporter
PING node-exporter (172.20.0.4): 56 data bytes
64 bytes from 172.20.0.4: seq=0 ttl=64 time=0.155 ms
64 bytes from 172.20.0.4: seq=1 ttl=64 time=0.257 ms
64 bytes from 172.20.0.4: seq=2 ttl=64 time=0.252 ms
64 bytes from 172.20.0.4: seq=3 ttl=64 time=0.190 ms

Посилання на тему

Click to rate this post!
[Total: 0 Average: 0]