首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在构建用于分期和生产环境的码头映像时,我应该在哪里运行我的生成步骤?

在构建用于分期和生产环境的码头映像时,我应该在哪里运行我的生成步骤?
EN

Stack Overflow用户
提问于 2015-10-18 13:38:36
回答 2查看 1.7K关注 0票数 1

我真的很难弄清楚在构建我的对接者形象和部署到dockerhub时,我应该把我的构建步骤放在哪里。

我目前的工作流程如下:

  • 将分支推至github
  • CircleCI安装所有依赖项,构建项目,并在分支上运行测试。
  • 合并分支分支到暂存分支
  • CircleCI安装所有依赖项,构建项目,并在分支上运行测试。
    • 如果测试通过,则将构建的文件打包到带有源的对接器映像中,并运行npm install --production。然后,CircleCI将此staging image部署到dockerhub。

  • 当一个新的图像被推送时,Tutum被链接到dockerhub,并将我的映像部署到DigitalOcean。

当合并到production image时,I会执行与上面相同的工作流,并且将创建一个。

这感觉有点奇怪,我创建了两个独立的码头形象。这是标准做法吗?

我见过很多人,包括在他们的dockerfile中的咕噜/吞咽构建步骤,但这感觉也不太好,因为所有的devDependencies,然后bower_components将与构建的代码一起出现在图像中。

运行构建步骤和构建码头映像的最佳实践是什么?让CI来做它更好,还是让dockerhub从dockerfile中这样做呢?我也在寻找最有效的方法来创建我的码头形象,用于分期和生产。

下面的是我的circleCI.yml文件,后面是我的Dockerfile.

circle.yml:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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"]
EN

回答 2

Stack Overflow用户

发布于 2015-10-18 14:25:12

运行构建步骤和构建码头映像的最佳实践是什么?让CI来做它更好,还是让dockerhub从dockerfile中这样做呢?

最好自己在码头外运行构建步骤。因此,相同的步骤适用于本地开发、非码头部署等。如果可能的话,请保持与对接自身的耦合。因此,使用常规的构建工具和脚本构建您的工件,只需使用ADD通过您的Dockerfile将文件构建到您的对接者映像中。

这感觉有点奇怪,我创建了两个独立的码头形象。这是标准做法吗?

我建议您使用您已经在生产舞台上构建和测试过的映像。一旦重建了图像,即使您的舞台图像工作正常,您也很容易出现差异,破坏您的生产映像。在这一点上,无论是码头或npm都不能提供严格的可复制的建设跨时间,因此,一旦它建成和测试的黄金,它是黄金,并走向生产点对点相同。

票数 1
EN

Stack Overflow用户

发布于 2015-10-18 14:28:45

您的循环ci应该下载所有依赖项,然后从下载的包中创建对接映像。所有测试都通过了指定的依赖项,并应被转发到生产中。一次。映像被推到带有所有依赖项的停靠中心,tumtum将同样部署到您的产品中,并且由于依赖项已经下载,创建容器需要几秒钟。

回答您关于构建相同图像的第二个查询。我建议将相同的映像部署到生产中。这将保证,在阶段的伟大工作也是同样的工作在生产。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33198568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档