一、系统环境

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


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

1、SSH方式远程Linux

ssh <username>@<IP address or domain name>

如果遇到下图问题:



出现这个问题的原因:known_hosts是记录远程主机的公钥的文件,之前重装个系统,而保存的公钥还是未重装系统的系统公钥,在ssh链接的时候首先会验证公钥,如果公钥不对,那么就会报错

解决方法:使用shh-keygen 命令ssh-keygen -R IP,执行完毕出现下图:



然后重新使用ssh方式远程Linux:




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,状态是已退出。


7、发布自己的镜像

1)添加Docker支持:

自定义项目要暴露的接口



在Api层右键添加Docker支持,选择Linux



更改Dockerfile文件



FROM:意思是我们的项目源镜像是哪个;

WORKDIR:镜像的工作目录;

COPY:复制文件(将Dockerfile所在目录下文件复制到镜像中的工作目录中)

EXPOSE:容器要开放的端口(我们用项目的8081端口)

ENTRYPOINT:为容器启动后要执行的命令 (这里将执行dotnet Docker.Core.Api.dll命令)

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



Dockerfile:然后右键,始终属性、始终复制到输出(bin)目录

接下来把项目发布到GitHub或者Gitee:我这里是发布到github然后去码云强制同步项目,从国内clone项目速度更快


2)发布

我们在服务器用Git将代码PULL下来,然后执行发布命令,我用一个批处理文件,直接一键生成(主要是防止漏掉文件):



执行发布命令:



就可以看到生成好的发布文件夹PublishFiles。

接下来就是docker 编译镜像了。


3)创建镜像

进入到我们的发布文件夹PublishFiles文件夹下,我们测试一下这个文件是否正常:

dotnet Docker.Core.Api.dll



没问题后,开始build了,还是在当前文件夹下(记得那个点):

docker build -t lenceas/apkimg .



其中lenceas/apkimg是我们的镜像名。

因为我们的Dockerfile是五步,所以这里也正好是5个Step。

然后查看机器上的镜像:



这里多了两个镜像,一个是我们的镜像ID为48252cd5c2d0,大小209M的项目文件,一个是我们Dockerfile的源镜像。


4)推送镜像到Docker hub仓库

第一步:在Docker hub注册账号

第二步:创建仓库



第三步:服务器镜像推送

先登录账号(这里如果以前登录过,可以先退出再重新登录)



推送:

docker push lenceas/apkimg:latest



检查:

我们登录管理后台,查看结果



可以看到已经成功推送了,这样的话,我们就可以在任何的地方使用我的镜像啦。

现在我们有了镜像,那就可以创建容器了,因为有了容器才能运行。


8、生成并运行容器

1)生成容器

有了镜像,我们来生成一个容器:

docker run -it -p 8081:8081 lenceas/apkimg



会看到输出内容,如果没有报错的话,就恭喜啦,退出当前进程,查看下有哪些容器:



这时候可以看到多了一个容器ID为e45b93658007,镜像是lenceas/apkimg的容器,不过我们的项目容器是退出状态,需要开启下:

docker start e45b93658007



状态已经是运行中了,那怎么测试接口是否正常了呢,可以用curl命令:

curl http://localhost:8081/WeatherForecast



如果到了这里,恭喜你,Docker部署NetCore基本已经搞定了

剩下最后一步了,nginx代理,因为我们的Docker已经守护了这个进程,所以我们不需要其他的守护进程的工作。


9、Nginx代理服务

修改nginx.conf文件,两种方式:

1.vim 命令

编辑文件:vim xxx

插入开始编辑:i

保存并退出::wq!

2.FTP下载到本地修改

这里具体的配置就不写了,网上可以自己去搜.

接下来就是重启Nginx服务,首先可以检测语法错误:

nginx -t



nginx -s reload

Linux Docker 部署 ASP.NET Core应用的更多相关文章

  1. docker部署asp.net core

    上一篇文章我们成功的在win10上边安装了docker,这篇文章,我们将在docker中部署asp.net core程序, 先来一张运行成功的hello world镇楼 现在开始,首先创建一个asp. ...

  2. 从零实操基于WSL2 Docker部署Asp.Net Core项目

    前言 平日在公司里都是基于阿里Teambition中的飞流进行Docker部署Api项目或服务,已经习惯了那一套成熟的操作流程,开发和部署确实快捷方便,但是还没在自己的电脑上进行操作过,特别是Wind ...

  3. Centos下使用Docker部署asp.net core项目

    本文讲述 CentOS 系统 Docker 中部署 asp.net core开源项目 abp 的过程 步骤 1. 拉取 asp.net core 基础镜像 docker pull microsoft/ ...

  4. 使用Docker部署ASP.NET Core应用程序实践

    前言 最近把很火的Docker给看了,于是就磨拳擦掌要去实践一下.于是就拿之前一个aps.net core的项目(已被停止)去练手.该项目之前在ubuntu14.04上确保可以正常运行,所以docke ...

  5. docker部署Asp.net core应用

    1 容器概念 使用Docker前我们首先要简单了解一下容器的概念.MSDN上有一张虚拟机和容器的对比图,很好的展示了虚拟机和容器的区别,如下所示,虚拟机包括应用程序.必需的库或二进制文件以及完整的来宾 ...

  6. Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器

    前言: 本篇文章主要讲解的是如何在Linux CentOS7操作系统搭建.NET Core运行环境并发布ASP.NET Core应用程序,以及配置Nginx反向代理服务器.因为公司的项目一直都是托管在 ...

  7. docker部署Asp.Net Core、Nginx、MySQL

    2019/10/24,docker19.03.4, .netcore 3.0,CentOS7.6 摘要:asp.net core 3.0 网站项目容器化部署,使用docker-compose编排Ngi ...

  8. 以self-contained方式在Linux上部署ASP.NET Core站点

    今天准备将一个在Windows上用VS2015开发的ASP.NET Core程序部署到阿里云Linux服务器上,部署时发现这台服务器是内网服务器,无法直接安装.NET Core SDK,于是想到尝试用 ...

  9. 在 CentOS 7(Linux)上部署ASP.NET Core 2.2 Web应用程序(Tengine、Asp.Net Core MVC、Centos 7、MySql)

    一.前言 1.简单记录一下Linux CentOS 7中安装与配置Tengine的详细步骤. 2.简单比较一下Tengine 和Nginx 3.搭建Asp.net Core和部署 Web程序 4.总结 ...

随机推荐

  1. Java编程语言学习01-编写第1个Java程序

    JVM/JRE/JDK JVMJava虚拟机(Java Virtual Machine)它是运行所有Java程序的虚拟计算机有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上 ...

  2. 浅入Kubernetes(12):Deployment 的升级、回滚

    目录 更新 上线 会滚 缩放 Deployment 直接设置 Pod 水平自动缩放 比例缩放 暂停 Deployment 上线 本篇内容讨论 Pod 的更新和回滚,内容不多. 更新 打开 https: ...

  3. istio之envoy常见术语及状态码

    基本术语 Downstream(下游):下游主机连接到 Envoy,发送请求并接收响应,即发送请求的主机. Upstream(上游):上游主机接收来自 Envoy 的连接和请求,并返回响应,即接受请求 ...

  4. Ionic5整合极光推送JPush ( 简单 )

    项目初始化 1. 安装项目依赖: # 安装cordova插件 ionic cordova plugin add jpush-phonegap-plugin --variable APP_KEY=&qu ...

  5. 让vim显示空格,tab字符,及vim多行注释

    1.显示 TAB 键 文件中有 TAB 键的时候,你是看不见的.要把它显示出来: :set list 现在 TAB 键显示为 ^I,而 $显示在每行的结尾,以便你能找到可能会被你忽略的空白字符在哪里 ...

  6. SPOJ 2713 线段树(sqrt)

    题意:       给你n个数(n <= 100000),然后两种操作,0 x y :把x-y的数全都sqrt ,1 x y:输出 x-y的和. 思路:       直接线段树更新就行了,对于当 ...

  7. 每天一道面试题LeetCode 80--删除排序数组中的重复项 II(python实现)

    LeetCode 80--删除排序数组中的重复项 II 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输 ...

  8. JVM默认内存大小

    堆(Heap)和非堆(Non-heap)内存 按照官方的说法:"Java虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在Java虚拟机启动时创建的." ...

  9. Failed opening required

    报错 点击页面右下角的图标,再点击错误可以显示报错.或者在项目中runtime--log也可以查看error [64]think\\__require_file(): Failed opening r ...

  10. 通过Dapr实现一个简单的基于.net的微服务电商系统(十一)——一步一步教你如何撸Dapr之自动扩/缩容

    上一篇我们讲到了dapr提供的bindings,通过绑定可以让我们的程序轻装上阵,在极端情况下几乎不需要集成任何sdk,仅需要通过httpclient+text.json即可完成对外部组件的调用,这样 ...