• .NET项目部署到Docker容器


    1、修改端口

    public static IWebHostBuilder CreateHostBuilder(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                .UseKestrel()
                .UseUrls("http://*:8080", "http://*:80")
                .UseStartup<Startup>();
    

    2、添加Dockerfile文件

    image-20211209210944787

    3、VS根据项目自动生成了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/aspnet:5.0 AS base
    WORKDIR /app
    EXPOSE 8080
    
    FROM base AS final
    WORKDIR /app
    COPY . .
    ENTRYPOINT ["dotnet", "WeTodo.API.dll"]
    

    注意EXPOSE 后面的端口号要与Program中CreateHostBuilder方法设置的保存一致

    Tips:该方式构建容器可能体积会比较大,建议分段构建

    FROM mcr.microsoft.com/dotnet/aspnet:$version AS base
    WORKDIR /app
    EXPOSE 5000
    ENV ASPNETCORE_URLS=http://+:5000
    ENV TZ=Asia/Shanghai
    
    FROM mcr.microsoft.com/dotnet/sdk:$version AS publish
    WORKDIR /src
    COPY ./ ./
    RUN dotnet publish $project -c Release -o /app
    
    FROM base AS final
    COPY --from=publish /app /app
    ENTRYPOINT ["dotnet", "$project.dll"]
    

    4、根据自身情况选择发布位置,这里以文件夹为例

    image-20211209212054268

    5、点击显示所有设置进行一些配置

    image-20211209212243557

    Tips:该项目使用的SQLite数据库,所以不需要安装另外的数据库环境,如果是Mysql等,需要额外在服务器装一下,可以参考https://luchong.gitbook.io/note/bu-shu-xiang-mu-dao-docker

    6、点击发布,等待VS编译完成

    image-20211209212435835

    7、将发布文件Copy到系统中的指定目录(也可以在VS发布时选择FTP一步到位)

    image-20211210111221190

    8、安装docker

    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
    

    image-20211210112534208

    9、构建镜像

    docker build -t wetodo/api:1.0 --rm .
    

    wetodo/api:1.0 这一段表示 镜像名称:Tag

    第一次构建可能会有点慢

    image-20211210112032941

    10、创建并启动镜像

    docker run -itd -d -p 8080:80 wetodo/api:1.0
    

    image-20211210112145158

    11、查看运行中的镜像

    docker ps -a
    

    image-20211210112202132

    docker常用命令:

    docker stop 容器id
     
    docker start 容器id
     
    docker restart 容器id
    
    #删除images,通过image的id来指定删除谁
    docker rmi <image id>
    

    12、开放端口

    关闭系统防火墙

    //查看防火墙状态
    systemctl status firewalld
    
    //开启防火墙
    systemctl start firewalld
    
    //关闭防火墙
    systemctl stop firewalld
    

    如果是云服务器,还得在服务器面板上开放一下端口

    image-20211210161157871

    13、起飞

    访问项目

    image-20211210161242845

  • 相关阅读:
    关于使用wcf架构分布式系统的一点想法
    vs2012 远程调试服务器上iis下的程序
    F#定义方法参数
    产生不重复的随机数
    巧在C#中设置多维动态数组,可以动态增加及删除
    C#时间相减
    css控制图片大小的方法
    常用网络命令
    DEDE SQL 常用语句
    未审核文档发布时间的自动更改方法for DEDEcms v5.3(修正版)
  • 原文地址:https://www.cnblogs.com/chonglu/p/15672478.html
Copyright © 2020-2023  润新知