我希望在提交更改后使用我的monolith应用程序的docker镜像来测试我的应用程序。我有一个Web应用程序项目和许多库项目(不是应用程序项目!)在分离的解决方案中,这些项目的输出将复制到应用程序的bin放置的路径并使我的应用程序可执行。
我的源代码结构是这样的:
|--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
我创建了一个基本的docker镜像来运行我的应用程序。当在特定项目中发生更改(ex projectA-1)时,我想创建一个仅将projectA-1的输出复制到目标文件夹的docker镜像FROM baseIamge
。
假设:
处理它的最佳做法是什么?
我想知道在每个项目的根目录下创建一个Dockerfile并创建一个工具来合并所有这些Dockerfiles(每次更改提交和开发人员选择更改的项目)并制作一个单一但多阶段的Dockerfile!所以Docker Build
的结果将是一个包含选定项目输出的图像,并将COPY
dll基础图像。但我不确定以编程方式生成Dockerfile文本是一种很好的方法。
在开发过程中,您将拥有复杂的项目版本矩阵。
但是一种方法可能是将项目版本/分支作为参数传递给docker构建过程。创建自定义docker构建过程,您可以在其中构建多个项目,作为每个项目一个单独的docker镜像。对于应用程序泊坞窗映像,Dockerfile
使用多阶段构建器并使用所有项目映像在各个目录中复制dll。
单独的图像,如:
|--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