zoukankan      html  css  js  c++  java
  • Linux Docker 部署 ASP.NET Core应用

    一、系统环境

    1、腾讯云轻量应用服务器CentOS7.6


    二、操作流程及途中遇到的问题

    1、SSH方式远程Linux

    ssh <username>@<IP address or domain name>
    如果遇到下图问题:
    image
    出现这个问题的原因:known_hosts是记录远程主机的公钥的文件,之前重装个系统,而保存的公钥还是未重装系统的系统公钥,在ssh链接的时候首先会验证公钥,如果公钥不对,那么就会报错
    解决方法:使用shh-keygen 命令ssh-keygen -R IP,执行完毕出现下图:
    image
    然后重新使用ssh方式远程Linux:
    image
    image


    2、更新系统

    sudo yum update


    3、安装Git

    sudo yum -y install git


    4、安装Nginx,启用和启动服务:

    sudo yum install nginx
    sudo systemctl enable nginx
    sudo systemctl start nginx


    5、安装Dotnet SDK

    每台计算机只需要执行一次此操作。
    sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
    sudo yum install dotnet-sdk-5.0


    6、安装Docker环境

    1)安装Docker源:

    首先,我们可以先执行下卸载命令,如果你之前安装过,或者系统自带了,需要卸载干净:
    sudo yum remove docker-ce
    然后我们就可以安装指定的源了,有官方版本和阿里云版本,我这里尝试使用阿里云版本的吧,听说会快一些。
    Step 1: 安装必要的一些系统工具
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    Step 2: 添加软件源信息
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    Step 3: 更新并安装Docker-CE
    sudo yum makecache fast (可选)
    sudo yum -y install docker-ce
    Step 4: 开启Docker服务
    sudo service docker start
    设置docker开机启动
    systemctl enable docker
    启动docker
    systemctl start docker
    查看版本
    docker --version

    Docker常用命令

    查看所有镜像
    docker images
    删除一个imageid的镜像
    docker rmi [imageid]
    删除所有镜像
    sudo docker rmi $(docker images -q)
    查看所有容器运行状态
    docker ps -a
    删除一个containerid的容器(实例)
    docker rm [containerid]
    删除所有容器
    docker rm $(sudo docker ps -a -q)


    2)测试Hello World

    检查docker是否可以正常运行(运行hello-world镜像,如果本机没有hello-world镜像,系统会自动拉取hello-world镜像)
    docker run hello-world
    这个时候,我们可以来检查一下:
    当前服务器有哪些镜像:
    docker images
    那如何查看有哪些容器呢:
    docker ps -a
    这个就是刚刚我们看到有输出内容的容器:容器ID是eb180038a3ce,镜像是hello-world,状态是已退出。
    image


    7、发布自己的镜像

    1)添加Docker支持:

    自定义项目要暴露的接口
    image
    在Api层右键添加Docker支持,选择Linux
    image
    更改Dockerfile文件
    image
    FROM:意思是我们的项目源镜像是哪个;
    WORKDIR:镜像的工作目录;
    COPY:复制文件(将Dockerfile所在目录下文件复制到镜像中的工作目录中)
    EXPOSE:容器要开放的端口(我们用项目的8081端口)
    ENTRYPOINT:为容器启动后要执行的命令 (这里将执行dotnet Docker.Core.Api.dll命令)

    2个脚本文件:Docker.Core.Publish.Linux.sh和Docker.Core.Publish.Docker.sh
    image
    image

    Dockerfile:然后右键,始终属性、始终复制到输出(bin)目录
    接下来把项目发布到GitHub或者Gitee:我这里是发布到github然后去码云强制同步项目,从国内clone项目速度更快


    2)发布

    我们在服务器用Git将代码PULL下来,然后执行发布命令,我用一个批处理文件,直接一键生成(主要是防止漏掉文件):
    image
    执行发布命令:
    image
    就可以看到生成好的发布文件夹PublishFiles。
    接下来就是docker 编译镜像了。


    3)创建镜像

    进入到我们的发布文件夹PublishFiles文件夹下,我们测试一下这个文件是否正常:
    dotnet Docker.Core.Api.dll
    image
    没问题后,开始build了,还是在当前文件夹下(记得那个点):
    docker build -t lenceas/apkimg .
    image
    其中lenceas/apkimg是我们的镜像名。
    因为我们的Dockerfile是五步,所以这里也正好是5个Step。
    然后查看机器上的镜像:
    image
    这里多了两个镜像,一个是我们的镜像ID为48252cd5c2d0,大小209M的项目文件,一个是我们Dockerfile的源镜像。


    4)推送镜像到Docker hub仓库

    第一步:在Docker hub注册账号
    第二步:创建仓库
    image
    第三步:服务器镜像推送
    先登录账号(这里如果以前登录过,可以先退出再重新登录)
    image
    推送:
    docker push lenceas/apkimg:latest
    image
    检查:
    我们登录管理后台,查看结果
    image
    可以看到已经成功推送了,这样的话,我们就可以在任何的地方使用我的镜像啦。
    现在我们有了镜像,那就可以创建容器了,因为有了容器才能运行。


    8、生成并运行容器

    1)生成容器

    有了镜像,我们来生成一个容器:
    docker run -it -p 8081:8081 lenceas/apkimg
    image
    会看到输出内容,如果没有报错的话,就恭喜啦,退出当前进程,查看下有哪些容器:
    image
    这时候可以看到多了一个容器ID为e45b93658007,镜像是lenceas/apkimg的容器,不过我们的项目容器是退出状态,需要开启下:
    docker start e45b93658007
    image
    状态已经是运行中了,那怎么测试接口是否正常了呢,可以用curl命令:
    curl http://localhost:8081/WeatherForecast
    image
    如果到了这里,恭喜你,Docker部署NetCore基本已经搞定了
    剩下最后一步了,nginx代理,因为我们的Docker已经守护了这个进程,所以我们不需要其他的守护进程的工作。


    9、Nginx代理服务

    修改nginx.conf文件,两种方式:
    1.vim 命令
    编辑文件:vim xxx
    插入开始编辑:i
    保存并退出::wq!
    2.FTP下载到本地修改
    这里具体的配置就不写了,网上可以自己去搜.

    接下来就是重启Nginx服务,首先可以检测语法错误:
    nginx -t
    image
    nginx -s reload
    image
    image

  • 相关阅读:
    在TreeView控件节点中显示图片
    PAT 甲级 1146 Topological Order (25 分)
    PAT 甲级 1146 Topological Order (25 分)
    PAT 甲级 1145 Hashing
    PAT 甲级 1145 Hashing
    PAT 甲级 1144 The Missing Number (20 分)
    PAT 甲级 1144 The Missing Number (20 分)
    PAT 甲级 1151 LCA in a Binary Tree (30 分)
    PAT 甲级 1151 LCA in a Binary Tree (30 分)
    PAT 甲级 1149 Dangerous Goods Packaging
  • 原文地址:https://www.cnblogs.com/lujiesheng/p/14817976.html
Copyright © 2011-2022 走看看