2015-10-27 2 views
1

У меня есть проект (написанный на рубине), который я хочу запустить в изображении докера. Исходный код проекта хранится в частном репозитории git, изображение создается, как обычно, Dockerfile. Проект огромен, и поэтому кет кет занимает относительно много времени.Cloning private git repo в контейнере докера

Проблема в том, что я не уверен, как (когда/где) клонировать git repo на изображение докера. Я могу клонировать git-репозиторий в каталог temp и копировать исходный код командой COPY в Dockerfile. Я не люблю это делать, так как мне придется поддерживать второй клон во временном каталоге.

Или, я могу клонировать репо в изображении докера. Проблема в том, что у меня ssh-ключ, который я не могу разумно сохранить в изображении. Я могу добавить только «свои собственные» ключи к серверу git, которые позволяют получить доступ ко всему.

Итак, я создал сценарий, как это:

UUID=`uuid`  
docker run \ 
    -v $HOME/.ssh:/home/user/.ssh:ro\ 
    --name=$UUID \ 
    -it $1 /scripts/git-clone-update.sh 
docker commit $UUID $1 
docker rm $UUI 

git-clone-update.sh клоны проект, если он не существует, или просто обновление, если он делает. К ним прикреплены ключи .ssh. Он отлично работает. Я могу легко обновить код в изображении, просто позвонив сценарию, передав имя изображения в качестве аргумента. Единственная проблема - Config.Cmd, которая всегда изменяется на /scripts/git-clone-update.sh.

Любая идея, как сохранить исходный файл Config.Cmd? Какова лучшая практика клонирования частного ропо в/на изображение докера?

Thx

+2

Вы видели официальное изображение рубина? Он использовал функцию ONBUILD для создания изображения из рабочего каталога git. Не нужно вызывать git внутри контейнера. Например, см. Http: // stackoverflow.ком/вопросы/29844622/вне-там любой-путь к компиляции и-статически ссылка-рубиновый-LIBS-для-грузчик/29861356 # 29861356 –

ответ

1

Как вы обнаружили, сохраняя ваши личные ключи SSH в Докер изображения не велика для безопасности. Я видел два подхода для этого:

  1. Создайте новую учетную запись только для чтения и сохраните ее ключи в изображении докера. Чем больше ограничений вы можете использовать в этой учетной записи, тем лучше для безопасности, но вы по-прежнему накапливаете секрет поверх своего исходного кода.

    Кроме того, это не решает проблему с вашими скриптами, о которой я, по общему признанию, не знаю, как ее решить.

  2. Включите весь упакованный файл докеры с уже скопированным кодом. Это подход Марк О'Коннер упоминает в своем комментарии. Рабочий процесс для выпуска будет следующим:

    • Скопируйте код в контейнер-докер.
    • Обновить изображение докера.
    • Загрузите новое изображение в репозиторий докеров (например, hub.docker.com или Amazon Web Services Elastic Beanstalk).
    • Обновите или запустите новые экземпляры вашего нового изображения контейнера.

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

Смежные вопросы