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

  • 相关阅读:
    经典SQL例题
    truncate,delete,drop的异同点
    scp 在不同主机之间数据传输
    自定义标签库
    servlet 学习
    HTTP协议 学习
    Tomcat服务器的数字证书 HTTPS 连接!
    JSP开发 路径问题汇总
    java 文件上传 下载 总结
    myeclipse 出现换行符和空格符 解决方案 换行出现乱码
  • 原文地址:https://www.cnblogs.com/lujiesheng/p/14817976.html
Copyright © 2011-2022 走看看