![](/img/trans.png)
[英]I am building my docker image from ReactJS, why is my docker build failing?
[英]Where should i run my grunt build step when building my docker image for staging and production environments?
我真的很難弄清楚在構建docker映像並將其部署到dockerhub時應該在哪里放置grunt構建步驟。
目前,我的工作流程如下:
npm install --production
。 然后,CircleCI將此staging image
部署到dockerhub 合並到母版時,我執行與上述相同的工作流程,而是創建了production image
。
我創建了2個單獨的docker映像,這感覺有點奇怪。 這是標准做法嗎?
我已經看到很多人在他們的dockerfile中包括grunt / gulp構建步驟,但這感覺不對,因為所有devDependencies
和bower_components
都將與構建的代碼一起出現在映像中。
運行構建步驟和構建Docker映像的最佳實踐是什么? 讓CI執行此操作還是從dockerfile中執行dockerhub更好? 我也在尋找最有效的方式來創建我的docker映像以進行登台和生產。
以下是我的circleCI.yml文件,然后是我的Dockerfile。
circle.yml:
machine:
node:
version: 4.2.1
# Set the timezeone - any value from /usr/share/zoneinfo/ is valid here
timezone:
Europe/London
services:
- docker
pre:
- sudo curl -L -o /usr/bin/docker 'http://s3-external-1.amazonaws.com/circle-downloads/docker-1.8.2-circleci'; sudo chmod 0755 /usr/bin/docker; true
dependencies:
pre:
- docker --version
- sudo pip install -U docker-compose==1.4.2
- sudo pip install tutum
override:
- npm install:
pwd: node
post:
- npm run bower_install:
pwd: node
- npm run grunt_build:
pwd: node
test:
override:
- cd node && npm run test
deployment:
staging:
branch: staging
commands:
- docker-compose -f docker-compose.production.yml build node
# - docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS
- tutum login -u $DOCKER_USER -p $DOCKER_PASS -e $DOCKER_EMAIL
- docker tag dh_node:latest tutum.co/${DOCKER_USER}/dh_stage:latest
- docker push tutum.co/${DOCKER_USER}/dh_stage:latest
master:
branch: master
commands:
- docker-compose -f docker-compose.production.yml build node
# - docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS
- tutum login -u $DOCKER_USER -p $DOCKER_PASS -e $DOCKER_EMAIL
- docker tag dh_node:latest tutum.co/${DOCKER_USER}/dh_prod:latest
- docker push tutum.co/${DOCKER_USER}/dh_prod:latest
Dockerfile:
FROM node:4.2
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm install --production
COPY . /usr/src/app
#
#
# Commented the following steps out, as these
# now run on CircleCI before the image is built.
# (Whether that's right, or not, i'm not sure.)
#
# Install bower
# RUN npm install -g bower # grunt-cli
#
# WORKDIR src/app
# RUN bower install --allow-root
#
# Expose port
EXPOSE 3000
# Run app using nodemon
CMD ["npm", "start"]
運行構建步驟和構建Docker映像的最佳實踐是什么? 讓CI執行此操作還是從dockerfile中執行dockerhub更好?
最好在docker之外自行運行構建步驟。 因此,相同的步驟適用於本地開發,非docker部署等。請盡可能使與docker本身的耦合松散。 因此,建立定期構建工具和腳本的文物,只是ADD
通過您的內置文件到您的碼頭工人形象Dockerfile
。
我創建了2個單獨的docker映像,這感覺有點奇怪。 這是標准做法嗎?
我建議改用您已經在生產階段構建和測試的圖像。 重建圖像后,即使舞台圖像可以正常工作,您也很容易出現差異,從而破壞生產圖像。 在這一點上,docker和npm都無法跨時間交付嚴格可復制的構建,因此,一旦構建並測試了黃金,它就是黃金,並且逐點相同。
您的圈子ci應該下載所有依賴項,然后從該下載的程序包創建docker映像。 所有測試均以指定的依賴關系通過,並應轉入生產。 一旦。 將映像與所有依賴項一起推送到Docker中心,tumtum會將其部署到您的生產中,並且由於已經下載了依賴項,創建容器將需要幾秒鍾。
回答您的第二個查詢以建立相同的圖像。 我建議將相同的映像部署到生產中。 這將確保您在暫存階段工作出色的產品也可以在生產環境中工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.