现在Docker技术非常的流行,不知道一点都不好意思说自己是一个开发者。作为.NETCore开发者来说,大部分都是在windows上进行开发,而Docker是linux阵营里养大的娃,(windows上安装的Docker实际上跑在虚拟linux系统上),那么如何将windows上开发的NET Core项目部署到linux上的Docker中呢?下面就一步一步,详细说明如何去做。

1.在VS2019中发布项目

VS2019对Docker是支持的,在项目中右键“添加”——“Docker支持”,之后项目中会生成一个Dockerfile文件(无后缀)。
默认生成的Dockerfile文件:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY ["Samples/ApiGateway/ApiGateway.csproj", "Samples/ApiGateway/"]
COPY ["Jimu.Modules/Jimu.Client.Discovery.Consul/Jimu.Client.Discovery.Consul.csproj", "Jimu.Modules/Jimu.Client.Discovery.Consul/"]
COPY ["Jimu.Client/Jimu.Client.csproj", "Jimu.Client/"]
COPY ["Jimu.Core/Jimu.Core.csproj", "Jimu.Core/"]
COPY ["Jimu.Modules/Jimu.Client.ApiGateway.Swagger/Jimu.Client.ApiGateway.Swagger.csproj", "Jimu.Modules/Jimu.Client.ApiGateway.Swagger/"]
COPY ["Jimu.Modules/Jimu.Client.Diagnostic.Skywalking/Jimu.Client.Diagnostic.Skywalking.csproj", "Jimu.Modules/Jimu.Client.Diagnostic.Skywalking/"]
RUN dotnet restore "Samples/ApiGateway/ApiGateway.csproj"
COPY . .
WORKDIR "/src/Samples/ApiGateway"
RUN dotnet build "ApiGateway.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "ApiGateway.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ApiGateway.dll"]

命令很多,但是这里比不需要这么复杂,需要做一下修改。(记得将Dockerfile属性设置成“始终复制”)

docker在windows上快还是在linux上快 windows的docker 部署到linux_windows

修改后的Dockerfile文件:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim 
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster 
ENV ASPNETCORE_URLS=http://+:8000 
EXPOSE 5000
EXPOSE 8000

WORKDIR /app
COPY . /app/
ENTRYPOINT ["dotnet", "ApiGateway.dll"]

注:Dockerfile文件也可以自己在记事本中直接编辑好后与发布的文件发在一起即可。

项目编译发布:

发布设置如下图

docker在windows上快还是在linux上快 windows的docker 部署到linux_.net_02


等待发布完毕,将发布文件传到linux机器上上(可以使用工具Xftp6等进行此操作)。

2. Docker镜像生成

进入linux系统中,找到相应目录(上一步中传送的发布文件)

docker在windows上快还是在linux上快 windows的docker 部署到linux_Dockerfile_03


输入Docker命令 生成docker Image:docker build -t testapi .(注意后面有一个点号;命名中不能有大写。)

该命令会根据Dockerfile文件生成一个名为“testapi”的docker镜像文件。

docker在windows上快还是在linux上快 windows的docker 部署到linux_Docker_04


生成后可以用命令:docker images查看一下刚才生成的镜像文件“testapi”

3. 根据Docke镜像文件生成容器

有了镜像文件,剩下的就是生成容器,启动即可。

命令:docker run --name testapidemo -p 8080:8000 testapi

docker在windows上快还是在linux上快 windows的docker 部署到linux_windows_05


(暴露的端口就是Dockfile中编写的端口号。)

最后,查看能否正常访问:

docker在windows上快还是在linux上快 windows的docker 部署到linux_docker_06


(把访问的IP地址化成您linux上的ip。具体地址看你的项目怎么设置的了。)

这个apiDemo是我使用Jimu框架中的一个网关demo。里面集成了swagger,所以访问的也是swagger页面。
环境:
.net core 3.0 vs2019
linux CentOS7
docker版本:19.03.8