services:
  zookeeper:
    image: 'bitnami/zookeeper:3.5.5'
    volumes:
      - 'zookeeper_data:/bitnami'
    networks:
      - kafka_net
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
  kafka:
    image: 'bitnami/kafka:2.4.0'
    ports:
      - '9095:9095'
    volumes:
      - 'kafka_data:/bitnami'
    networks:
      - kafka_net
    environment:
      - KAFKA_BROKER_ID=1
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9095
      # Слушаются только запросы из внешней сети
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9095
    depends_on:
      - zookeeper
  detection:
    # Текущей директорией в путях является директория, в которой расположен данный docker-compose.yml файл
    build: ./detection/docker-build-context
    image: devbeh/detection
    volumes:
      - type: bind
        # Подключаем директорию с кодом. Данный volume не является read_only, поскольку программа может автоматически
        # скачать и сохранить в нем файлы весов моделей
        source: .
        target: /opt/detection/src
    network_mode: host
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=${DEVBEH_DETECTION_NVIDIA_VISIBLE_DEVICES:-all}
    command: 'python3.6 run.py detection --log_dir /opt/detection/logs
    --graphormer_weights_url ${DEVBEH_DETECTION_WEIGHTS_URL:-https://www.dropbox.com/s/qx1tlfmpkacvmep/COCO-MaskRCNN-R101FPN9xGNCasAugScratch.npz?dl=1}
    --hrnet_weights_url ${DEVBEH_DETECTION_WEIGHTS_URL:-https://datarelease.blob.core.windows.net/metro/models/hrnetv2_w64_imagenet_pretrained.pth}
    --bootstrap_servers ${DEVBEH_KAFKA_BOOTSTRAP_SERVERS:-localhost:9095}
    --username "${DEVBEH_KAFKA_USERNAME:-}"
    --password "${DEVBEH_KAFKA_PASSWORD:-}"
    --batch_size ${DEVBEH_DETECTION_BATCH_SIZE:-1}
    --name ${DEVBEH_DETECTION_INSTANCE_NAME:-detection}'
  pose3d:
    build: ./pose3d/docker-build-context
    image: devbeh/pose3d
    volumes:
      - type: bind
        # Подключаем директорию с кодом. Данный volume не является read_only, поскольку программа может автоматически
        # скачать и сохранить в нем файлы весов моделей
        source: .
        target: /opt/pose3d/src
    network_mode: host
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=${DEVBEH_POSE3D_NVIDIA_VISIBLE_DEVICES:-all}
    command: 'python run.py pose3d --log_dir /opt/pose3d/logs
    --weights_url ${DEVBEH_POSE3D_WEIGHTS_URL:-https://datarelease.blob.core.windows.net/metro/models/graphormer_h36m_state_dict.bin}
    --bootstrap_servers ${DEVBEH_KAFKA_BOOTSTRAP_SERVERS:-localhost:9095}
    --username "${DEVBEH_KAFKA_USERNAME:-}"
    --password "${DEVBEH_KAFKA_PASSWORD:-}"
    --batch_size ${DEVBEH_POSE3D_BATCH_SIZE:-1}
    --name ${DEVBEH_POSE3D_INSTANCE_NAME:-pose3d}'
networks:
  kafka_net:
    driver: bridge
volumes:
  zookeeper_data:
    driver: local
  kafka_data:
    driver: local
