.NetCore程序部署Docker通常有两种模式:
1、在本地编译成dll文件后通过rz命令或工具上传到服务器上,然后构建Docker镜像再运行容器。该方案和以前.net framework时部署windows类似,手工复制文件与重启。
2、在服务端直接通过Git获取最新源代码后编译打包,然后再构建Docker镜像再运行容器。该方案免去了往服务器复制文件这步操作,但是服务器环境需要安装.Net Core SDK 来编译源代码。
接下来我们将分别使用方案1和方案2制作镜像并生成容器。
1.项目创建
首先Visual studio2019创建一个.netCore Web应用,选择包含Docker文件(linux)
DockerFile选择始终复制
接下来我们分别使用方案1和方案2部署
2.方案1(手动发布):
编写dockerFile内容如下:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
COPY . .
ENTRYPOINT ["dotnet", "netCore01.dll"]
VS解决方案,发布
上传文件
我们的发布目录在:源码项目目录\bin\Release\netcoreapp3.1\publish
发布完成后,我们到发布目录,将发布后的publish文件夹中所有上传到linux目录/home/wwwroot/netCore01_01
我这里是将publish中文件打包为publish.rar,然后通过rz命令上传到/home/wwwroot/netCore01_01目录,然后通过 rar x publish.rar解压,你也可以使用xftp/Secure file transfer client工具上传更易上手
解压完成后,我们执行镜像构建
进入到个net-core项目所在目录执行下面的命令(docker file所在目录)
docker build -t netcore01-v1 . *
(注意后面这个空格和.不能省,build是先找dockfile)
build镜像时会自动联网下载所面的基础镜像,如果机器无法联网可以自行下载并pull到本机,或者搭建私有镜像仓库解决这个问题。
构建过程如下,镜像aspnet:3.1-buster-slim如果提前下载过,整个build过程约10秒钟
容器生成
docker run --name netcore_v1_01 -d -p 7001:80 netcore01-v1
生成后我们用宿主机IP+70001端口就可以访问我们的服务了,80是容器内部端口
3.方案2(源代码模式):
此模式通常是配合使用jenkins+git自动化构建,jenkins+git的我们下篇专门讲解,本例我们采用模拟源代码已经拉到linux后的场景,更便于我们理解后面与jenkins整合是如何自动构建的。
vs 的dockerfile如下(VS生成后一句也没修改)
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["netCore01.csproj", ""]
RUN dotnet restore "./netCore01.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "netCore01.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "netCore01.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "netCore01.dll"]
我们用命令对源代码生成镜像
1.先将代码打包成rar
2.使用rz命令上传到/home/wwwroor/netCore01目录(目录结构自行通过mkdir创建)
3.使用rar命令解压(如果linux上没有安装,自行安装该程序)rar x netCore01.rar 建议初学者使用工具上传
4.编译与构建:
docker build -t netcore01 .
注意后面的.不能省略(代表当前目录),netcore01是image名称,可以自行取名,但必须全部小写字母。
然后系统根据docker文件描述自动执行下载,编译及打包,这种模式步骤制作镜像时步骤较多,大概10多个步骤,完全完成需要2分钟左右。
编译完成后,查看下镜像名称:
docker images
然后我们可以根据镜像创建容器:
docker run --name netcore_ins_01 -d -p 9001:80 netcore01
其中9001为对外映射的端口,我们可以直接用宿主机IP:9001访问该服务
docker ps -a 查看docker 容器
访问URL可以看到返回JSON
4.总结
通常个人开发或练习采用方案1即可,当我们开发团队协同工作时将使用方案2的升级版本(jenkins+git自动化)
在微服务大行其道的今天,springboot+springcloud声势浩大,.net framework已经被虐的无地自容,.net core+容器+自动化还能勉强撑撑场面,也算为是.net未来 保留了一线生机和希望。
网友评论