Использование docker-compose для построения конвейера разработки и развертывания

#docker #docker-compose #next.js

#docker #docker-compose #next.js

Вопрос:

Я пытаюсь создать файл Docker Compose для создания моего локального конвейера разработки и развертывания для проекта ReactJS.

Некоторый контекст: локально я запускаю сервер на 3000 порту. Для развертывания я экспортирую статические артефакты, развертываю их на S3 и делаю недействительными мои файлы CloudFront.

Я создал образ Docker, который содержит node и 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 amp;amp; npm run start"
  

Который работает, но каждый раз, когда мне приходится продолжать и обновлять команду, либо для запуска сервера npm run build amp;amp; npm run start , либо для развертывания его на s3 и CloudFront, т. Е. npm run build amp;amp; npm run export amp;amp; npm run deploy .

Мой вопрос в том, могу ли я создать файл docker-compose.yml, как показано ниже, и затем я могу вызвать docker-compose run start --build или docker-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:

Вы можете создать переопределение:

docker-compose.override.yml:

 version: '3'

services:
  esnextwebjourney:
    command: "npm run build amp;amp; npm run export amp;amp; npm run deploy"
  

Когда вы хотите экспортировать, вы можете запустить: docker-compose up -d —build
Когда вы хотите только развернуть: docker-compose -f docker-compose.yml up -d —build

Вторая версия игнорирует переопределение.

Другим решением было бы использовать переменную среды для команды. Таким образом, ваш docker-compose.yml всегда остается неизменным, и вам нужно только экспортировать новую переменную среды перед ее запуском. Вы можете автоматизировать это с помощью сценария оболочки.

То, что вы хотите создать, также может сработать, если вы создадите именованный том и разделите его между ВСЕМИ службами. Но мне больше нравится мое решение 🙂

Я надеюсь, что это сработает для вас.

Комментарии:

1. Привет, спасибо за ваш ответ. Я просто пытаюсь избежать создания отдельного файла компоновки для этого варианта использования. Создание файла оболочки с использованием переменной среды также звучит как взлом. Нет ли поддержки именованных команд в docker-compose, которые я могу предоставить в качестве аргумента командной строки при вызове docker-compose up?

2. Мне действительно жаль, что вы считаете создание сценария оболочки взломом… Вы могли бы перезаписать точку входа для своей службы: docker-compose run <некоторая служба> -точка входа «npm run build amp;amp; запуск npm run start». Но это означает небольшое изменение логики файла docker-compose

3. Я попробую метод —entrypoint. Но из-за отсутствия ответа, которого я ожидал, я полагаю, что это не может быть сделано так, как я думал, что это можно сделать. Тем не менее, я бы подождал какой-то иной точки зрения от других авторов. Спасибо!