• vs2017 开发.NetCore部署docker


    一、环境

       操作系统:windows 10 64bit

       开发环境:vs2017

       部署环境:docker  — windows

    二、准备

      安装docker:

      见:https://www.cnblogs.com/xiaoerlang90/p/10285434.html

    三、新建并发布项目

      打开 vs2017,新建.netCore Web 应用程序,选择web应用程序,勾选“启用Docker支持”,点击确定。

      

    新建完成的项目目录如下:

    右键项目发布后,选择发布到文件,这种方式发布的项目只适用于windows平台运行

     

    想要项目在linux、osx系统上运行,需要用命令发布,也可能有别的方式,暂时只知道这一种:
    1.dos命令转到项目的主目录下
    2.运行命令:

    dotnet publish --runtime ubuntu.16.04-x64 

     --runtime后面跟的是运行时环境的操作系统
    3.如果上面的命令成功了,你会看到生成了这样一个文件夹:binDebug etcoreapp2.0ubuntu.16.04-x64publish,这里面的文件就是发布好的项目文件了,我们将publish文件夹拷贝到对应的操作系统下,运行命令dotnet NetCore.dll (NetCore.dll指的是主程序文件),不出意外的话项目就可以正常启动了,如果出意外的话,请进行以下检查:

    a、发布时输入的目标系统是否正确
    b、服务器是否正确安装了.net sdk

     四、创建Dockerfile文件

      在发布目录下创建一个文本文档Dockerfile.txt ,或者在Linux系统创建一个文件Dockerfile
    内容:

    # 声明使用的基础镜像
    FROM microsoft/dotnet:2.1-sdk-nanoserver-1803 AS base
    
    # 设置工作目录
    WORKDIR /app
    
    # 将本地应用拷贝到 容器 /app/ 目录下 "./"代表的就是/app 因为dockerfile文件和程序文件都在发布文件夹下 所以两个目录是一样的
    COPY ./ ./
    
    #设置环境变量,修改.netCore 默认的80端口
    ENV ASPNETCORE_URLS http://+:5000
    
    # 设置导出端口
    EXPOSE 5000
    
    # 指定应用入口点 NetCore.dll代表的是主程序文件
    ENTRYPOINT ["dotnet", "DockerTest.dll"]

    编辑完成后去掉文件的后缀名。

    五、创建镜像并运行

      打开命令界面,cd到发布文件夹下:

      执行命令:

    docker build -t mycore . (注意命令中的最后一个点 代表的是命令从你的当前目录下执行)

      或者:

    docker build 发布文件目录 -t mycore

      其中 mycore为自定义镜像名称,如下所示:

      然后继续执行命令运行:

    docker run -it -p 5000:5000 mycore

    这里的5000:5000 代表把容器内的5000端口映射到你主机的5000端口

     然后 http://localhost:5000 就可以访问啦!

    六、附docker命令

    docker pull microsoft/dotnet    //从docker仓库拉取一个名称为“microsoft/dotnet”的镜像
    
    docker build light    //构建一个名称为light的容器
    
    docker run hello-world    //运行hello-world容器
    
    docker images    //查看所有镜像
    
    docker rmi [image_id]    //删除一个imageid的镜像
    
    docker rmi $(docker images -q)    //删除所有镜像
    
    docker ps -a    //查看所有容器运行状态
    
    docker rm [container_id]//删除一个containerid的容器(实例)
    
    docker rm $(docker ps -a -q)   //删除所有容器

    七、修改.NetCore端口号

      修改.net core的默认端口号,除了上文中提到的增加Dockerfile文件中环境变量外,或也可通过修改项目中program.cs文件中的BuildWebHost函数,修改启动端口号:

    WebHost.CreateDefaultBuilder(args)
                 .UseUrls("http://*:5000") //修改服务在docker中启动端口
                   .UseKestrel()
                   .UseContentRoot(Directory.GetCurrentDirectory())
                   .UseIISIntegration()
                   .UseApplicationInsights()
                .UseStartup<Startup>()
                .Build();

    八、遇到的问题及解决方案:

      docker调试项目时出现“错误 CTC1005 Your Docker server host is configured for 'Linux', however your project target 'windows' ”,即:docker配置的环境与项目目标环境不一致。

      切换docker的container类型至“windows”

      后又出现了“尝试生成Docker镜像时发生错误”,重新配置了切换到Windows环境后的Daemon。

       关于Https重定向的问题可参考:

      https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-2.2&tabs=visual-studio

      https://github.com/aspnet/Docs/issues/6199

  • 相关阅读:
    Spring框架总结(二)
    java.lang.ClassCastException: com.liuyang.annocation.UserAction cannot be cast to com.liuyang.annocation2.UserAction at com.liuyang.annocation2.App.test
    Spring框架总结(一)
    Error creating bean with name 'us' defined in class path resource [com/liuyang/test/DI/beans2.xml]: Cannot resolve reference to bean 'daoa' while setting bean property 'daoa'; nested exception is org.
    互联网系统架构的演进
    重新理解:ASP.NET 异步编程(转)
    Git初级使用教程(转)
    JavaScript开发规范要求
    大型网站架构演化发展历程(转)
    Bootstrap 学习(1)
  • 原文地址:https://www.cnblogs.com/xiaoerlang90/p/10285410.html
走看看 - 开发者的网上家园