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



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

一些上下文:在本地,我在3000端口上启动服务器。对于部署,我导出静态构件,将其部署到 S3 上,并使我的 CloudFront 文件失效。

我已经构建了一个包含节点和 AWS CLI 的 Docker 映像,我正在使用它作为我的基础映像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

您可以创建覆盖:

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 脚本自动执行此操作。

如果要构建的内容也可能有效,前提是创建命名卷并在所有服务之间共享该卷。但我更喜欢我的解决方案:)

我希望这对你有用。

最新更新