DevOps

【Docker】使用Docker编译 .NetCore项目

我们知道在Visual Studio上不能同时构建两个App, 即MSBuild不能复用,那么如何实现MSBuild同时构建多个App呢?

1、测试代码

我们知道在Visual Studio上不能同时构建两个App, 即MSBuild不能复用,那么如何实现MSBuild同时构建多个App呢?这里我们需要用到Docker, 关于Docker Desktop for Windows这里不做介绍,重点实现我们的需求。

测试代码是基于 .Net Core 3.1的控制台程序, 测试代码不重要

D:\CODING\DOTNET-CORE-WITH-DOCKER
│  DotNetCore-With-Docker.sln

└─Counter
        Dockerfile
        Counter.csproj
        Program.cs

Publish生成的文件如下
在这里插入图片描述
Dockerfile的内容如下

FROM mcr.microsoft.com/dotnet/sdk:3.1

WORKDIR /app

# Copy source code
COPY *.csproj ./
COPY *.cs ./

# Build
RUN dotnet restore
RUN dotnet publish -c Release

主要的逻辑是:

  1. 复制源码至Docker容器。复制D:\Coding\dotnet-core-with-docker\Counter到镜像的C:\app\目录
  2. 在Docker容器中编译代码。编译镜像中的代码C:\app\Counter.csprojC:\app\Program.cs
  3. 在Docker容器中获得输出。镜像中编译后输出为C:\app\bin\Release\netcoreapp3.1\publish\

2、配置Docker环境

如果直接运行Dockerfile第一次会很慢,所以可以先下载需要用到 .NetCore SDK 3.1镜像(用来编译代码)

docker pull mcr.microsoft.com/dotnet/sdk:3.1

如果报错Pull不下来,可能是网络原因,我们需要添加国内镜像,打开daemon.json文件,添加镜像站点(文件路径类似C:\ProgramData\Docker\config\daemon.json)

"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/","https://hub-mirror.c.163.com","https://registry.docker->cn.com"],
"insecure-registries": ["10.0.0.12:5000"]

经过漫长的等待下载完毕

3、 实践操作

转到Dockerfile所在的根目录D:\Coding\dotnet-core-with-docker\Counter,根据Dockerfile你内容生成新镜像

docker build -t dotnetcore-publish-image -f Dockerfile .

第一次生成镜像时,可以看到镜像中我们拷贝和生成文件的路径
在这里插入图片描述
启动新镜像中任意一个Container

docker create --name dotnetcore-publish-container dotnetcore-publish-image

将此Container中生成的输出拷贝到本机上来(无论此container是否启动)

docker cp dotnetcore-publish-container:C:\app\bin\Release\netcoreapp3.1\publish\ D:\output\

查看结果
在这里插入图片描述

参考资料


这样就是实现了最简单的利用Docker编译.NetCore了😎. 初次接触Docker也有很多不理解的东西,一起努力学习吧🙌