【发布时间】:2016-10-10 18:30:38
【问题描述】:
假设我想在 docker 容器中运行一些我不完全信任的第三方 .net 核心应用程序。
- 为简化起见,我们假设应用程序是由
dotnet new生成的简单Hello World 控制台应用程序。这只是 Program.cs 和 project.json 两个文件。
目前我尝试了以下方法:
- 将该应用程序复制到我主机的某个文件夹中
-
使用microsoft/dotnet 映像创建一个新容器,将该文件夹挂载为卷,运行特定命令来构建和运行应用程序:
$ docker run --rm -it --name dotnet \ -v /some/temp/folder/app:/app \ microsoft/dotnet:latest \ /bin/sh -c 'cd /app && dotnet restore && dotnet run'
我也在考虑使用 microsoft/dotnet 作为基础映像的预定义 dockerfile 的想法。它基本上会嵌入应用程序代码,将其设置为工作目录并运行恢复、构建和运行命令。
FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app
RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]
ENTRYPOINT ["dotnet", "run"]
然后我可以将预定义的 dockerfile 复制到临时文件夹中,为该特定应用程序构建一个新映像,最后使用该映像运行一个新容器。
对于简单的命令行应用程序来说,dockerfile 方法是否矫枉过正?运行那些不受信任的应用程序的最佳做法是什么?(这可能是我完全忽略的)
编辑
由于我将在容器运行后丢弃容器,并且某些应用程序将生成 docker 命令,因此我可能会保留仅安装卷的第一个选项。
我还找到了this blog post,他们在其中构建了一个类似的 sanbox 环境并最终遵循相同的mounted volume approach
【问题讨论】:
标签: docker asp.net-core .net-core