zoukankan      html  css  js  c++  java
  • .Net Core部署在Linux . Docker上

    前言

    看名字也知道了,
    要想将.Net Core应用部署到Linux的Docker中,
    需要一些前提条件

    • .Net Core知识
    • Linux系统基本操作
    • Docker基本操作

    万事开头难,作为一个"云"开发工程师,
    第一步当然是去网上找相关文档[微软官方文档,博客,书籍...]

    除了万事开头难,其实另外的一个就是很多细节需要注意,
    看着博客上写着挺简单的,
    但是自己由于不知道其中缘由,可能一个标点就导致了全军覆没...

    如果你只对.Net Core有所了解,
    对Linux和Docker以前没有接触过.
    你与其去将Linux学习个把月,
    再回来学习如何将.Net Core如何部署在Docker上.
    倒不如趁这个机会,学习一下Linux.
    只是啃书,远远不如在搞事情的时候啃书,其中更重要是要多思考.

    你如果感觉每次学习一个新知识都感觉很吃力,
    总觉很难理解,
    一个原因可能因为你积累不够,并且只是学习的表皮知识,
    没有真正去运用它.
    你的地基没打牢固,所以在构建上层建筑的时候,
    会感觉摇摇欲坠.
    另外一个原因可能就是学习方法有问题了...

    .Net Core 发布

    原来的{Dockerfile}里面东西太多了,当我的Linux发布的时候,
    报错

    #原来的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/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 ["DockerCoreSample.csproj", ""]
    RUN dotnet restore "./DockerCoreSample.csproj"
    COPY . .
    WORKDIR "/src/."
    RUN dotnet build "DockerCoreSample.csproj" -c Release -o /app/build
    
    FROM build AS publish
    RUN dotnet publish "DockerCoreSample.csproj" -c Release -o /app/publish
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "DockerCoreSample.dll"]
    
    #修改后的Dockerfile内容
    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
    WORKDIR /app
    COPY . .
    EXPOSE 11000
    ENTRYPOINT ["dotnet", "DockerCoreSample.dll"]
    

    需要注意的一点就是

    Dockerfile.属性.
    复制到输出目录:始终复制
    

    然后将发布目录中的文件上传到Linux服务器即可.
    我这里用的XShell
    和Linux一个插件"lrzsz"

    Docker相关命令

    主要用到的命令

    #进入到程序的发布目标
    cd usr/core/
    
    #创建 image文件 (-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签 PS:注意最后的 点)
    docker build -t coredocker1.0 .  
    
    #生成容器,每运行一次,就会新建一个容器
    #(这里的21000:11000 代表把容器内的11000端口映射到你主机的21000端口,容器端口在后)
    docker run --name coredocker -it -p 21000:11000 coredocker1.0
    

    一些辅助命令

    #查看docker的版本 version
    docker -v
    #开启Docker服务
    systemctl start docker.service
    #开机启动Docker服务
    systemctl enable docker.service
    #查看Docker服务启动状态
    systemctl status docker.service
    #重启Docker服务
    systemctl restart docker.service
    
    #查看所有容器
    docker ps -a 
    
    #容器.启动
    docker start {容器名称}
    

    坑.

    • 将本机发布文件上传到Linux服务器的时候,直接复制到{root}目录下...

    • 执行docker build命令,创建镜像的时候,名称使用了大写字母,报错.
    # 错误示范
    docker build -t coreDocker1.0 
    

    提示:

    invalid argument "coreDocker1.1" for "-t, --tag" flag:
    invalid reference format: repository name must be lowercase
    See 'docker build --help'.


    执行{docker build -t Name .}花费的时间还是比较长...
    是我云服务器的网络太慢嘛?


    rz -eb
    上传失败,可能因为Linux服务器的某些文件已经被占用了,无法替代了.
    先在{usr/core}执行{rm -rf *}删除这些文件.


    #Dockerfile EXPOSE
    
    #原来错误写法
    EXPOSE 11000,11001
    
    #修改后正确写法
    EXPOSE 11000 11001
    

    最大的坑还是陷在了端口这里...
    我的腾讯云服务器IP:11000
    访问总是失败,
    然后我去腾讯云服务器,安全组将该端口打开了.
    还是不行...

    telent X.X.X.X 11000
    

    测试端口也是打开的.
    实在不行,我重启下电脑就可以了...
    太奇怪了???

    参考文档

  • 相关阅读:
    无障碍开发(十五)之好心办坏事
    无障碍开发(十四)之Android /iOS平台无障碍功能
    无障碍开发(十三)之盲人是如何使用手机的之屏幕阅读器Screen Reader
    无障碍开发(十二)之怎样做好信息无障碍?
    LABjs学习(一)之无阻塞动态并行加载脚本文件以及管理执行顺序
    jQuery选择器引入
    面向对象-标准的手机类代码及其测试
    面向对象-this关键字的内存图解
    面向对象-this关键字的概述和应用
    第一个jQuery程序
  • 原文地址:https://www.cnblogs.com/love-zf/p/13200404.html
Copyright © 2011-2022 走看看