2014-12-04 6 views
-1

Мой контейнер Docker вытаскивает мое приложение Node из Git и устанавливает необходимые зависимости. Однако эта логика повторно запускается при последующих вызовах запуска Docker после первоначального запуска. Есть ли способ настроить мой сценарий Entrypoint, чтобы вытащить приложение из Git, когда вызывается Docker? Я предполагаю, что всегда могу написать файл в контейнер после того, как начальная настройка будет завершена и проверить этот файл, прежде чем вытащить из Git? Есть ли лучший и более чистый способ добиться такого поведения?Node Docker Container - Caching Container Startup Logic

Dockerfile:

# Generic Docker Image for Running Node app from Git Repository 
FROM node:0.10.33-slim 
ENV NODE_ENV production 

# Add script to pull Node app from Git and run the app 
COPY docker-node-entrypoint.sh /entrypoint.sh 
RUN chmod +x /entrypoint.sh 
ENTRYPOINT ["/entrypoint.sh"] 

EXPOSE 8080 
CMD ["--help"] 

Entrypoint сценарий:

#!/bin/bash 
set -e 
# Run the command passed in if it isn't to start a node app 
if [ "$1" != 'node-server' ]; then 
    exec "[email protected]" 
fi 
# Logic for pulling the node app and starting it 
cd /usr/src 
# try to remove the repo if it already exists 
rm -rf node-app; true 
echo "Pulling Node app's source from $2" 
git clone $2 node-app 
cd node-app 
# Check if we should be running a specific commit from the git repo 
if [ ! -z "$3" ]; then 
    echo "Changing to commit $3" 
    git checkout $3 
fi 
npm install 
echo "Starting the app" 
exec node . 

ответ

1

В идеале, каждый из ваших узлов проектов будет иметь свой собственный Dockerfile, так что вместо defering в git clone к docker run время, вы бы контейнеры которые полностью настроены и готовы к запуску.

его вероятность того, что вы могли бы добавить Dockerfile к каждому из Git репо, которые содержат вариации на

FROM node:onbuild, который будет автоматически по умолчанию работает приложение узла тоже.

+0

Я понимаю, что создание источника в контейнере Docker является обычно рекомендуемым способом и понять, как работает узел: onbuild. Я экспериментирую с этим подходом, так как я не хочу вставлять свой источник в контейнер, сохраненный на концентраторе докеров. Кроме того, у меня много узлов-микросервисов, и я не хочу иметь дело с множеством разных контейнеров. Я бы предпочел, чтобы я только один раз использовал его. Недостатком является то, что запуск займет больше времени (для вытягивания зависимостей и файлов приложений), но на основе моих текущих экспериментов это довольно быстро. – AnDev123

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