我想在提交更改后使用我的整体应用程序的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镜像来运行我的应用程序。
当特定项目(例如projectA-1)发生更改时,我想创建一个仅将projectA-1的输出复制到目标文件夹的docker映像FROM baseIamge
。
假设:
什么是最佳做法?
我打算在每个项目的根目录中创建一个 Dockerfile ,并创建一个工具来合并所有这些Dockerfile(每次提交更改并由开发人员选择更改的项目),然后制作一个单件但多件的上演Dockerfile!
因此Docker Build
的结果将是包含所选项目输出的映像,并且COPY
dll将成为基本映像。但是我不确定以编程方式生成Dockerfile文本是否是一种好方法。
答案 0 :(得分:1)
在开发过程中,您将具有复杂的项目版本矩阵。
但是一种方法可能是将项目版本/分支作为参数传递给docker构建过程。创建自定义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
主要docker映像:
# 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