如何将多个项目复制到单个Docker容器中

时间:2018-03-05 09:28:01

标签: c# visual-studio docker

我决定使用Docker进行项目部署,但是我们很难配置docker支持。 解决方案本身由多个项目组成(准确地说是14个),其中一个构建.exe文件。我已经为此项目添加了docker支持,因此它包含Dockerfile和Dockerignore。解决方案是Web应用程序的后端,因此没有GUI是代码的一部分。

问题是,当我构建并运行Docker容器时,它会失败,因为代码中有一个路径引用到另一个项目,而不是由docker复制到容器。

var webAppStartup = new WebAppStartup(new 
    AutofacDependencyContainerFactory().Create(AddDependencies),
        new HostingEnvironment
        {
            EnvironmentName = EnvironmentName.Development
        }, 
        Path.GetFullPath(@"../MyOtherProject/"));

我尝试使用Dockerfile复制这两个项目,方法是将文件移动到目录树中的一层,但是如果我尝试复制不在dockerfile的直接上下文中的东西,Docker会抛出一个错误,说明我只能复制构建上下文中的文件。

FROM microsoft/dotnet-framework:4.7.1-windowsservercore-ltsc2016
ARG source
WORKDIR /app
COPY ${source:-MyProject/obj/Docker/publish} .
COPY ${source:-MyOtherProject/obj/Docker/publish} .
ENTRYPOINT ["C:\\app\\MyProject.exe"]

如何将多个项目(或整个解决方案?)复制到docker容器,或者是否存在针对此类问题的解决方法?我对Docker来说是新手,而且我对Docker如何构建和运行图像和容器的了解至多是肤浅的。

2 个答案:

答案 0 :(得分:1)

我不确定...在我的解决方案中有2个项目但是尝试这样的事情。

FROM microsoft/aspnetcore-build:2.0-stretch AS publish

首先创建新的

WORKDIR /src/
COPY ./ .

设置工作目录和coppy

RUN dotnet publish --output /src/out

要在解决方案中发布所有项目已添加引用并创建新的docker

FROM microsoft/aspnetcore-build:2.0-stretch

并从之前的发布复制到新的docker

COPY --from=publish /src/out .

以下完整代码 https://github.com/uopeydel/readme.txt/blob/master/Readme.Web/Readme.Web/Dockerfile

答案 1 :(得分:0)

每个容器一个项目,

但是如果您的container是一个像IISApache这样的WebServer,那么您可以 在Dockerized WebServer中复制项目文件夹。

在这种情况下,您有一个具有多个应用程序的容器。

例如,您有3个或更多的IIS服务器项目或其他平台,如下图:

enter image description here

显然项目必须有相同的平台。

当你构建和执行时,项目被移动到同一个容器中,并且仅由WebServer提供。

在Docker上下文中,您没有经典的PATH,因为您在不同的环境中工作。

用简单的项目开始你的测试,记住KISS保持简单的简单: - )