Ця сторінка ще не перекладена українською. Показано англійську версію. Переглянути англійською

Режим Docker

Запускайте RAPS у контейнерному середовищі без встановлення Rust або керування залежностями. Ідеально підходить для CI/CD конвеєрів, ізольованих середовищ та розгортання у Kubernetes.

Швидкий старт

# Завантажити офіційний образ
docker pull ghcr.io/dmytro-yemelianov/raps:latest

# Виконати команду
docker run --rm \
  -e APS_CLIENT_ID="your_client_id" \
  -e APS_CLIENT_SECRET="your_client_secret" \
  ghcr.io/dmytro-yemelianov/raps:latest \
  auth test

Доступні образи

ТегОпис
latestОстанній стабільний реліз
4.14.0Конкретна версія
3.8Останній патч серії 3.8.x
3Останній мінорний реліз серії 3.x

Підтримка кількох архітектур

Образи доступні для:

  • linux/amd64 (x86_64)
  • linux/arm64 (Apple Silicon, ARM-сервери)
# Завантажити для конкретної архітектури
docker pull --platform linux/arm64 ghcr.io/dmytro-yemelianov/raps:latest

Базове використання

Окремі команди

# Перевірити автентифікацію
docker run --rm \
  -e APS_CLIENT_ID="$APS_CLIENT_ID" \
  -e APS_CLIENT_SECRET="$APS_CLIENT_SECRET" \
  ghcr.io/dmytro-yemelianov/raps:latest \
  auth test

# Список бакетів
docker run --rm \
  -e APS_CLIENT_ID="$APS_CLIENT_ID" \
  -e APS_CLIENT_SECRET="$APS_CLIENT_SECRET" \
  ghcr.io/dmytro-yemelianov/raps:latest \
  bucket list --output json

З монтуванням томів

Монтуйте локальні директорії для завантаження/вивантаження файлів:

# Завантажити файл
docker run --rm \
  -e APS_CLIENT_ID="$APS_CLIENT_ID" \
  -e APS_CLIENT_SECRET="$APS_CLIENT_SECRET" \
  -v $(pwd)/models:/data \
  ghcr.io/dmytro-yemelianov/raps:latest \
  object upload my-bucket /data/model.rvt

# Скачати файли
docker run --rm \
  -e APS_CLIENT_ID="$APS_CLIENT_ID" \
  -e APS_CLIENT_SECRET="$APS_CLIENT_SECRET" \
  -v $(pwd)/downloads:/output \
  ghcr.io/dmytro-yemelianov/raps:latest \
  object download my-bucket model.rvt --output /output/

Інтерактивний режим

Запуск інтерактивної оболонки всередині Docker:

docker run -it --rm \
  -e APS_CLIENT_ID="$APS_CLIENT_ID" \
  -e APS_CLIENT_SECRET="$APS_CLIENT_SECRET" \
  ghcr.io/dmytro-yemelianov/raps:latest \
  shell

Docker Compose

Базова конфігурація

# docker-compose.yml
version: '3.8'

services:
  raps:
    image: ghcr.io/dmytro-yemelianov/raps:latest
    environment:
      - APS_CLIENT_ID=${APS_CLIENT_ID}
      - APS_CLIENT_SECRET=${APS_CLIENT_SECRET}
    volumes:
      - ./models:/data
    command: ["bucket", "list"]

Запуск:

docker-compose run --rm raps bucket list
docker-compose run --rm raps object upload my-bucket /data/model.rvt

Багатосервісна конфігурація

# docker-compose.yml
version: '3.8'

services:
  # Сервіс завантаження
  uploader:
    image: ghcr.io/dmytro-yemelianov/raps:latest
    environment:
      - APS_CLIENT_ID=${APS_CLIENT_ID}
      - APS_CLIENT_SECRET=${APS_CLIENT_SECRET}
    volumes:
      - ./models:/data:ro
    profiles: ["upload"]
    command: ["object", "upload", "my-bucket", "/data/"]

  # Монітор трансляцій
  translator:
    image: ghcr.io/dmytro-yemelianov/raps:latest
    environment:
      - APS_CLIENT_ID=${APS_CLIENT_ID}
      - APS_CLIENT_SECRET=${APS_CLIENT_SECRET}
    profiles: ["translate"]

  # Задачі обслуговування
  cleanup:
    image: ghcr.io/dmytro-yemelianov/raps:latest
    environment:
      - APS_CLIENT_ID=${APS_CLIENT_ID}
      - APS_CLIENT_SECRET=${APS_CLIENT_SECRET}
    profiles: ["cleanup"]
    command: ["bucket", "list", "--output", "json"]

Файл середовища

Використовуйте файл .env для облікових даних:

# .env
APS_CLIENT_ID=your_client_id
APS_CLIENT_SECRET=your_client_secret
APS_REGION=US
# Docker автоматично завантажить .env
docker-compose run --rm raps auth test

Інтеграція з CI/CD

GitLab CI

# .gitlab-ci.yml
variables:
  RAPS_IMAGE: ghcr.io/dmytro-yemelianov/raps:4.14.0

translate:
  image: $RAPS_IMAGE
  variables:
    APS_CLIENT_ID: $APS_CLIENT_ID
    APS_CLIENT_SECRET: $APS_CLIENT_SECRET
  script:
    - raps auth test
    - raps bucket create ci-$CI_PIPELINE_ID --retention transient
    - raps object upload ci-$CI_PIPELINE_ID models/*.rvt --batch
  after_script:
    - raps bucket delete ci-$CI_PIPELINE_ID --yes || true

Jenkins Pipeline

// Jenkinsfile
pipeline {
    agent {
        docker {
            image 'ghcr.io/dmytro-yemelianov/raps:4.14.0'
        }
    }
    environment {
        APS_CLIENT_ID = credentials('aps-client-id')
        APS_CLIENT_SECRET = credentials('aps-client-secret')
    }
    stages {
        stage('Test Auth') {
            steps {
                sh 'raps auth test'
            }
        }
        stage('Upload') {
            steps {
                sh 'raps object upload my-bucket models/*.rvt --batch'
            }
        }
    }
}

Azure DevOps

# azure-pipelines.yml
pool:
  vmImage: 'ubuntu-latest'

container:
  image: ghcr.io/dmytro-yemelianov/raps:4.14.0

variables:
  - group: aps-credentials

steps:
  - script: raps auth test
    env:
      APS_CLIENT_ID: $(APS_CLIENT_ID)
      APS_CLIENT_SECRET: $(APS_CLIENT_SECRET)

  - script: raps bucket list --output json
    env:
      APS_CLIENT_ID: $(APS_CLIENT_ID)
      APS_CLIENT_SECRET: $(APS_CLIENT_SECRET)

CircleCI

# .circleci/config.yml
version: 2.1

jobs:
  translate:
    docker:
      - image: ghcr.io/dmytro-yemelianov/raps:4.14.0
    environment:
      APS_CLIENT_ID: $APS_CLIENT_ID
      APS_CLIENT_SECRET: $APS_CLIENT_SECRET
    steps:
      - checkout
      - run: raps auth test
      - run: raps bucket list

workflows:
  main:
    jobs:
      - translate

Kubernetes

Job для одноразових завдань

# raps-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: raps-translate
spec:
  template:
    spec:
      containers:
        - name: raps
          image: ghcr.io/dmytro-yemelianov/raps:4.14.0
          command: ["raps", "translate", "start", "$(URN)", "--wait"]
          env:
            - name: APS_CLIENT_ID
              valueFrom:
                secretKeyRef:
                  name: aps-credentials
                  key: client-id
            - name: APS_CLIENT_SECRET
              valueFrom:
                secretKeyRef:
                  name: aps-credentials
                  key: client-secret
            - name: URN
              value: "dXJuOmFkc2sub2JqZWN0czp..."
      restartPolicy: Never

CronJob для запланованих завдань

# raps-cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: raps-cleanup
spec:
  schedule: "0 2 * * 0"  # Щонеділі о 2:00
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: raps
              image: ghcr.io/dmytro-yemelianov/raps:4.14.0
              command: ["/bin/sh", "-c"]
              args:
                - |
                  raps bucket list --output json | \
                  jq -r '.[] | select(.policyKey == "transient") | .bucketKey' | \
                  while read bucket; do
                    raps bucket delete "$bucket" --yes || true
                  done
              envFrom:
                - secretRef:
                    name: aps-credentials
          restartPolicy: OnFailure

Створення Kubernetes Secret

kubectl create secret generic aps-credentials \
  --from-literal=client-id="$APS_CLIENT_ID" \
  --from-literal=client-secret="$APS_CLIENT_SECRET"

Створення власних образів

Розширте образ RAPS додатковими інструментами:

# Dockerfile
FROM ghcr.io/dmytro-yemelianov/raps:4.14.0

# Додати jq для обробки JSON
RUN apk add --no-cache jq

# Додати власні скрипти
COPY scripts/ /scripts/
RUN chmod +x /scripts/*.sh

# Команда за замовчуванням
CMD ["raps", "--help"]

Збірка та запуск:

docker build -t my-raps .
docker run --rm my-raps bucket list

Усунення неполадок

Відмова в доступі до томів

# Рішення: запуск від поточного користувача
docker run --rm \
  -u $(id -u):$(id -g) \
  -v $(pwd)/models:/data \
  ghcr.io/dmytro-yemelianov/raps:latest \
  object upload my-bucket /data/model.rvt

Проблеми з мережею

# Використати мережу хоста (за потреби)
docker run --rm --network host \
  -e APS_CLIENT_ID="$APS_CLIENT_ID" \
  -e APS_CLIENT_SECRET="$APS_CLIENT_SECRET" \
  ghcr.io/dmytro-yemelianov/raps:latest \
  auth test

Режим зневадження

docker run --rm \
  -e APS_CLIENT_ID="$APS_CLIENT_ID" \
  -e APS_CLIENT_SECRET="$APS_CLIENT_SECRET" \
  ghcr.io/dmytro-yemelianov/raps:latest \
  --debug auth test

Пов’язана документація