Linux Docker 部署 ASP.NET Core应用
一、系统环境
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应用的更多相关文章
- docker部署asp.net core
上一篇文章我们成功的在win10上边安装了docker,这篇文章,我们将在docker中部署asp.net core程序, 先来一张运行成功的hello world镇楼 现在开始,首先创建一个asp. ...
- 从零实操基于WSL2 Docker部署Asp.Net Core项目
前言 平日在公司里都是基于阿里Teambition中的飞流进行Docker部署Api项目或服务,已经习惯了那一套成熟的操作流程,开发和部署确实快捷方便,但是还没在自己的电脑上进行操作过,特别是Wind ...
- Centos下使用Docker部署asp.net core项目
本文讲述 CentOS 系统 Docker 中部署 asp.net core开源项目 abp 的过程 步骤 1. 拉取 asp.net core 基础镜像 docker pull microsoft/ ...
- 使用Docker部署ASP.NET Core应用程序实践
前言 最近把很火的Docker给看了,于是就磨拳擦掌要去实践一下.于是就拿之前一个aps.net core的项目(已被停止)去练手.该项目之前在ubuntu14.04上确保可以正常运行,所以docke ...
- docker部署Asp.net core应用
1 容器概念 使用Docker前我们首先要简单了解一下容器的概念.MSDN上有一张虚拟机和容器的对比图,很好的展示了虚拟机和容器的区别,如下所示,虚拟机包括应用程序.必需的库或二进制文件以及完整的来宾 ...
- Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器
前言: 本篇文章主要讲解的是如何在Linux CentOS7操作系统搭建.NET Core运行环境并发布ASP.NET Core应用程序,以及配置Nginx反向代理服务器.因为公司的项目一直都是托管在 ...
- 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 ...
- 以self-contained方式在Linux上部署ASP.NET Core站点
今天准备将一个在Windows上用VS2015开发的ASP.NET Core程序部署到阿里云Linux服务器上,部署时发现这台服务器是内网服务器,无法直接安装.NET Core SDK,于是想到尝试用 ...
- 在 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.总结 ...
随机推荐
- 基于golang分布式爬虫系统的架构体系v1.0
基于golang分布式爬虫系统的架构体系v1.0 一.什么是分布式系统 分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统.简单来说就是一群独立计算机 ...
- 听说你买的基金又“绿了”,手把手教你用 Python选出好基金
打工人打工魂打工都是人上人,红基金绿基金绿了又绿你基金.今天教大家一招不再被(基金)绿. 01 开发环境 Windows10 Python3 Pycharm 一些必要的库 02 步骤 1. 获取基金排 ...
- 微软加入字节码联盟,进一步开发支持Blazor 的WebAssembly技术
字节码联盟 (Bytecode Alliance)宣布已正式成为 501(c)(3) 非营利组织,参与组建的企业/组织包括 Fastly.英特尔.Mozilla 和微软,此外还邀请到了 Arm.DFI ...
- C++ 三消游戏基本实现
最近在研究三消算法,我想试试在完全不借助网络资源的情况下搞定这个东西,所以有些地方可能不是最优的. 代码留此备忘. 1. 3x_desk_event.h 1 #pragma once 2 3 #ifn ...
- ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule
解释:执行docker-compose up -d时出现ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule 原因:防火墙 ...
- SpringBoot+MyBatis练手项目笔记汇总
以下是我在练习SpringBoot+MyBatis训练时候个人一些笔记汇总(可以点击跳转),献丑了,网上很多大佬的文章都比我写的详细,一些好的文章,我会将贴到各个内容中. 1. 插入数据返回id和内部 ...
- linux下符号链接和硬链接的区别
存在2众不同类型的链接,软链接和硬链接,修改其中一个,硬链接指向的是节点(inode),软链接指向的是路径(path) 软连接文件 软连接文件也叫符号连接,这个文件包含了另一个文件的路径名,类似于wi ...
- 从effective C++中窥探C++11特性
这几天在看effective C++3rd,这本书算是比较经典的一本入门C++的书了.虽然年代比较久远书中讲的好多模式已经被的新特性取代了,但是从这些旧的模式中可以了解到一些C++新特性设计的初衷,也 ...
- [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]
[Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...
- ES6对象的新增方法的使用
Object.assign Object Object.assign(target, ...sources) 将所有可枚举属性的值从一个或多个源对象复制到目标对象 参数: target 目标对象 so ...