Как сделать приложение монолитным с несколькими отдельными проектами? - PullRequest
0 голосов
/ 07 апреля 2019

Я хочу использовать образ докера моего монолитного приложения, чтобы протестировать мое приложение после внесения изменений. У меня есть один проект веб-приложения и много библиотечных проектов (не проект приложения!) В отдельных решениях, которые выводят эти проекты в путь, который помещает корзина приложения, и делают мое приложение исполняемым.

моя структура исходного кода выглядит следующим образом:

|--Master_Web_App.sln
|     |
|     app.csproj
|
|--projectA.sln
|      | 
|      projectA-1.csproj 
|      | 
|      projectA-2.csproj 
| 
|--projectB.sln 
      | 
      projectB-1.csproj 
      | 
      projectB-2.csproj 

после создания каждого проекта я копирую его выходные данные в физический путь, который определил веб-сайт:

wwwroot
|--app
    |
    bin
      |
      app.dll
      projectA-1.dll
      projectA-2.dll
      projectB-1.dll
      projectB-2.dll

Я создал базовый образ докера для запуска моего приложения. когда в конкретном проекте (например, projectA-1) произошли изменения, я хочу создать одно изображение докера FROM baseIamge, которое только копирует выходные данные projectA-1 в папку назначения.

Предположения:

  1. У меня должен быть один образ докера для изменений в проектах. (так как у меня есть приложение с одним монолитом)
  2. проектов размещены отдельно, но часть одно веб-приложение.
  3. я хочу создать изображение только с изменениями из базы изображение.

как лучше всего справляться с этим ??

Я хотел бы создать Dockerfile в корне каждого проекта и создать инструмент для объединения всех этих Dockerfiles (каждый раз, когда изменения фиксируются и разработчик выбирает измененные проекты) и создает одноуровневый, но многоэтапный Dockerfile! таким образом, результат Docker Build будет изображением, включенным в выбранные проекты, и COPY dll к базовому изображению. но я не уверен, что генерирование текста Dockerfile программным способом - хороший подход.

1 Ответ

1 голос
/ 08 апреля 2019

Во время разработки у вас будет сложная матрица версии проекта.

Но одним из подходов может быть передача версии / ветки проекта в качестве параметров процессу сборки Docker. Создайте пользовательский процесс сборки докера, в котором вы можете создавать несколько проектов в виде отдельных образов докера по одному на проект. Для образа докера приложения Dockerfile используйте многоступенчатый компоновщик и используйте все образы проекта для копирования библиотек в соответствующие каталоги.

Отдельные изображения, такие как:

|--Master_Web_App.sln
|     |
|     app.csproj -> app-dockerimage
|
|--projectA.sln
|      | 
|      projectA-1.csproj  -> projectA-1-dockerimage
|      | 
|      projectA-2.csproj  -> projectA-2-dockerimage
| 
|--projectB.sln 
      | 
      projectB-1.csproj  -> projectB-1-dockerimage 
      | 
      projectB-2.csproj  -> projectB-2-dockerimage 

Главное изображение докера:

# app docker image
FROM projectA-1-dockerimage as projectA-1
FROM projectA-2-dockerimage as projectA-2
FROM projectB-1-dockerimage as projectB-1
FROM projectB-2-dockerimage as projectB-2

FROM BASE_IMAGE

# other steps
#Build process app.dll

COPY FROM --projectA-1 wwwroot/app/bin/projectA-1.dll
COPY FROM --projectA-2 wwwroot/app/bin/projectA-2.dll
COPY FROM --projectB-1 wwwroot/app/bin/projectB-1.dll
COPY FROM --projectB-2 wwwroot/app/bin/projectB-2.dll
...