美文网首页.NET
.net core以docker部署Linux

.net core以docker部署Linux

作者: 上岸的魚 | 来源:发表于2020-03-16 21:07 被阅读0次

    .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未来 保留了一线生机和希望。

    相关文章

      网友评论

        本文标题:.net core以docker部署Linux

        本文链接:https://www.haomeiwen.com/subject/aeboehtx.html