zoukankan      html  css  js  c++  java
  • CentOS7的docker中运行.Net 5 API项目

    源码形式部署

    1、创建WebAPI应用程序,.NET 5中增加了对Open API的支持,勾选。勾选启用Docker,对应的操作系统选择Linux。

    2、修改StartUp文件的Swagger配置项,因为默认生成的代码只用于开发环境,当在Docker中执行以后,会在生产环境中运行。

          这里是一个坑,如果不修改,在最终访问时会无法访问swagger,显示404。

          参考链接:https://stackoverflow.com/questions/59824036/swagger-ui-gives-404-when-app-is-running-in-docker-container

         

                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
    
                //把Swagger相关的部分移出来
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "docketsample v1"));

    3、复制整个项目到CentOS中对应的目录

    4、切换对项目目录,也就是有Dockerfile的目录。然后执行以下命令

    docker build -t aspnetapp .
    docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp

    build 命令参数:

    • 将映像命名为 aspnetapp。
    • 在当前文件夹(末尾的句点)中查找 Dockerfile。

    运行命令参数:

    • 分配伪 TTY,即使未附加也使其保持打开状态。 (与 --interactive --tty 的效果相同。)
    • 容器在退出时自动删除。
    • 将本地计算机上的端口 5000 映射到容器中的端口 80。
    • 将容器命名为 aspnetcore_sample。
    • 指定 aspnetapp 映像。

     5、然后在本地浏览器输入http://192.168.1.107:5000/swagger/index.html进行访问,其中IP为CentOS的IP地址,5000为本地映射到Docker的端口。

    项目发布部署

    1、发布项目,可以使用命令进行发布

    dotnet publish -o ./publish

    2、在发布后的目录中创建Dockerfile文件,文件与DLL为同一目录。其中Dockerfile文件的内容如下:

    FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim
    WORKDIR /app
    EXPOSE 80
    EXPOSE 443
    
    
    WORKDIR /app
    COPY .  /app
    ENTRYPOINT ["dotnet", "web.dll"]

    3、将发布后的项目文件+dockerfile文件一起上传到CentOS目录中,上传工具可以使用XFTP。

    4、使用源码方式的第4、5步的命令生成镜像、运行容器即可。

     

    相关链接参考:

    https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/docker/building-net-docker-images?view=aspnetcore-5.0

    https://www.cnblogs.com/sdonian/p/14030636.html

    https://www.cnblogs.com/dotnet261010/p/12450488.html

    https://www.cnblogs.com/Jerrycjc/p/14529778.html

    https://www.cnblogs.com/Jerrycjc/p/15135882.html

    https://www.cnblogs.com/tianfengcc/p/14332534.html

  • 相关阅读:
    VirtualBox 下USB 设备加载的步骤及无法加载的解决办法
    浅析:setsockopt()改善socket网络程序的健壮性
    减小Gcc编译程序的体积
    linux下查看系统进程占用的句柄数
    Linux下高并发socket最大连接数所受的各种限制
    spring-jpa通过自定义sql执行修改碰到的问题
    阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义
    sql select时增加常量列
    CASE WHEN 及 SELECT CASE WHEN的用法
    MYSQL常见运算符和函数
  • 原文地址:https://www.cnblogs.com/superfeeling/p/15491736.html
Copyright © 2011-2022 走看看