使用docker-compose构建开发和部署管道

时间:2019-04-01 12:00:58

标签: docker docker-compose next.js

我正在尝试创建一个Docker Compose文件来为ReactJS项目构建我的本地开发和部署管道。

某些上下文:我在本地3000端口上启动服务器。为了进行部署,我导出了静态工件,将其部署在S3上并使我的CloudFront文件失效。

我构建了一个Docker Image,其中包含节点和AWS CLI,并且我将其用作基础FROM映像。

Dockerfile

FROM a6kme/node-aws-cli:v1

WORKDIR /app

COPY package*.json /app/
RUN npm install

EXPOSE 3000

docker-compose.yml

version: '3'
volumes:
  esnextwebjourney_node_modules:
services:
  esnextwebjourney:
    build: .
    volumes:
      - .:/app
      - esnextwebjourney_node_modules:/app/node_modules
    ports:
      - 3000:3000
    command: >
      sh -c "npm run build && npm run start"

这可以工作,但是每次我必须继续更新命令以启动服务器npm run build && npm run start或将其部署在s3和CloudFront(即npm run build && npm run export && npm run deploy)上。

我的问题是- 我可以创建一个如下所示的docker-compose.yml文件,然后可以将其称为docker-compose run start --builddocker-compose run deploy --build,这将达到我的目的。

version: '3'
volumes:
  esnextwebjourney_node_modules:
services:
  build:
    build: .
    volumes:
      - .:/app
      - esnextwebjourney_node_modules:/app/node_modules
    command: npm run build
  start:
    depends_on:
      - build
    command: npm run start
    ports:
      - 3000:3000
  export:
    depends_on:
      - build
    command: npm run export
  deploy:
    depends_on:
      - export
    command: npm run deploy

1 个答案:

答案 0 :(得分:1)

您可以创建替代:

docker-compose.override.yml:

version: '3'

services:
  esnextwebjourney:
    command: "npm run build && npm run export && npm run deploy"

要导出时,可以运行:docker-compose up -d --build 仅当要部署时:docker-compose -f docker-compose.yml up -d --build

第二个版本将忽略覆盖。

另一种解决方案是对该命令使用环境变量。这样,您的docker-compose.yml始终保持不变,并且只需要在运行之前导出一个新的环境变量即可。您可以使用Shell脚本将其自动化。

如果创建命名卷并在所有服务之间共享它,那么您想要构建的内容也可能会起作用。但我更喜欢我的解决方案:)

我希望这对您有用。