Рекомендации по запуску установщика пакетов внутри Docker с частным репозиторием

#docker #docker-compose #repository #private

#docker #docker-compose #репозиторий #Частное

Вопрос:

Выполнение команд локально с частными репозиториями тривиально, и эта часть в порядке.

Что я пытаюсь сделать, так это убедиться, что Docker используется через Makefile в качестве стандартного элемента для запуска проектов.

В настоящее время я пытаюсь заставить Docker устанавливать частные пакеты. Нет возможности для VPN и размещения нашего собственного сервиса git, такого как gitlab или bitbucket, которые приводят к невозможности установки частных пакетов в Docker compose.

Есть два способа обойти это, с которыми я столкнулся и успешно заработал:

  1. Скопируйте мой SSH-ключ в поле и запустите его внутри этого контейнера
  2. Скопируйте файл auth.json /.npmrc и так далее в контейнер

Оба из них связаны с проблемами:

  1. Если кто-то использует контейнер или отправляет его в репозиторий пакетов, то его SSH-ключ потенциально скомпрометирован, и ему потребуется перезагрузить и, возможно, обновить все серверы / службы, которые они используют для доступа
  2. Файлы auth.json / .npmrc представляют меньший риск, поскольку токен аутентификации может быть доступен только для чтения и легко сгенерирован заново без значительного воздействия

В данный момент я рассматриваю PHP Composer в качестве рабочего примера, где мой файл docker compose выглядит следующим образом:

 version: "2.0"

services:
  composer:
    image: composer
    volumes:
      - ./.composer/auth.json:/tmp/auth.json
      - .:/app
    working_dir: /app

  php:
    image: php:7.2-fpm-alpine
    volumes:
       - .:/app
    working_dir: /app
 

Это работает нормально, но нужно добавить что-то, чтобы удалить эту команду auth.json post, например docker-compose run --rm composer install . Можно ли запустить команду типа «post_run» в docker-compose?

Ответ №1:

Недавно я настроил private packagist, который решает одну из проблем, которые вы описали.

Использование токена, который передается как частная переменная в CI, и у каждого члена команды есть свой индивидуальный токен, который они тоже могут использовать.