簡體   English   中英

為登台和生產環境構建docker映像時,我應該在哪里執行grunt構建步驟?

[英]Where should i run my grunt build step when building my docker image for staging and production environments?

我真的很難弄清楚在構建docker映像並將其部署到dockerhub時​​應該在哪里放置grunt構建步驟。

目前,我的工作流程如下:

  • 將分支推送到github
  • CircleCI安裝所有依賴項,構建項目並在分支上運行測試。
  • 將分支分支合並到臨時分支
  • CircleCI安裝所有依賴項,構建項目並在分支上運行測試。
    • 如果測試通過,請將構建的文件與源一起打包到docker映像中,然后運行npm install --production 然后,CircleCI將此staging image部署到dockerhub
  • Tutum與dockerhub鏈接,並在推送新映像時將我的映像部署到DigitalOcean。

合並到母版時,我執行與上述相同的工作流程,而是創建了production image

我創建了2個單獨的docker映像,這感覺有點奇怪。 這是標准做法嗎?

我已經看到很多人在他們的dockerfile中包括grunt / gulp構建步驟,但這感覺不對,因為所有devDependenciesbower_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM