DotNet跨平台 - docker部署.net core2.0项目
参考文档:
https://docs.docker.com/install/linux/docker-ce/centos/
http://www.dockerinfo.net/document
https://dotnet.microsoft.com/download/linux-package-manager/centos/sdk-current
https://www.cnblogs.com/viter/p/10463907.html
https://www.cnblogs.com/freewsf/p/7818791.html
https://www.cnblogs.com/sheng-jie/p/8107877.html
环境
服务器系统:CentOS Linux release 7.2.1511
相关工具:VS2017 xftp putty
服务器软件:.net core 2.0,docker 18.09.6,
前言
之前写过一篇文章,《.net core项目部署到centos7》,最近看到很多关于docker的文章,感觉这种方式确实好,所以自己也按着别人的文章实现了一把,确实很方便。先来看一张图片,下面这条大鲸鱼,很形象的描述了Docker的功能,上面的箱子就是一个一个独立的容器。

这里先引用官方文档对Docker进行一下介绍:
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。
在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
下面的图片比较了 Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。

为什么要使用Docker
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
具体说来,Docker 在如下几个方面具有较大的优势。
1、更快速的交付和部署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
2、更高效的虚拟化
Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
3、更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
4、更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
一、服务器安装dotnet-sdk
如果CentOS服务器没有安装netcore,需要先用下图的命令安装一下,我选择的是dotnet-sdk-2.0.0,大家也可以根据自己的程序来选择安装,
安装dotnet-sdk的参考文档:https://dotnet.microsoft.com/download/linux-package-manager/centos/sdk-current
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm #在安装.NET之前,您需要注册Microsoft密钥,注册产品存储库并安装所需的依赖项。每台机器只需要安装一次。
sudo yum update
sudo yum install dotnet-sdk-2.0.0 //使用docker部署,可以不用装dotnetcore环境
二、Docker 安装
在2017年的3月1号之后,Docker的版本命名开始发生变化,同时将CE版本和EE版本进行分开,这里我们选择安装免费的CE社区版,
具体区别可以参考:https://docs.docker.com/install/linux/docker-ce/centos/
首先是添加包源:
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
如果报yum-config-manager命令不存在,是因为系统默认没有安装这个命令,这个命令在yum-utils 包里,可以通过命令yum -y install yum-utils 安装就可以了
然后执行下面的安装命令:
$ sudo yum install docker-ce docker-ce-cli containerd.io //安装命令
$ sudo docker --version //查看版本
$ sudo systemctl start docker.service //启动docker
$ sudo systemctl enable docker.service //设置开机启动

通过docker --version命令,可以看到版本号为18.09.6,用命令 systemctl start docker.service 启动docker后,我们可以测试下docker是否安装成功,执行docker run hello-world命令,会看见提示
Unable to find image 'hello-world:latest' locally,意思是说在本地仓库没有找到镜像'hello-world',之后会从官方仓库中拉取了该镜像,然后执行。看到下图的内容,就表示docker安装成功并运行了。

三、创建.NetCore项目
3.1 创建演示项目
这个没什么好说的,我们用vs2017创建一个演示用的mvc项目。program.cs文件做如下修改

3.2为项目编写Dockerfile文件
有两种方法,一种是右键点击项目:添加-->Docker支持,创建Dockerfile文件;

第二种是直接在项目根目录下手动创建该文件,Dockerfile文件的内容大致如下:
# 添加基础镜像:docker会从网络下载这个镜像
FROM microsoft/dotnet:-aspnetcore-runtime
#容器中系统的工作空间
WORKDIR /app
#拷贝当前文件夹下的文件到容器中系统的工作空间(注意:“.”后面有空格)
COPY . /app #设置Docker容器对外暴露的端口
EXPOSE
#容器中使用 ["dotnet","系统启动的dll"] 来运行应用程序
#使用ENTRYPOINT ["dotnet","系统启动的dll"]
#或使用 CMD ["dotnet","系统启动的dll"]
ENTRYPOINT ["dotnet", "WebTest.dll"]
3.3 构建镜像
下面到了关键的一步了,构建项目镜像,我们将上面创建的mvc项目进行发布,然后将发布后的文件上传至CentOS服务器,然后定位到站点文件夹,执行下面的命令:
sudo docker build -t webtest:1.0 .
webtest是我们创建的镜像名字,冒号后面的1.0可以理解为版本号,再后面是一个空格再加一个点,这个点表示当前路径!!

看到Successfully,表示镜像构建成功。
可以输入命令docker images查看仓库中的镜像。

sudo docker images //查看所有镜像
sudo docker ps //查看运行中的容器
sudo docker ps -a //查看所有容器 sudo docker rm 容器id //删除容器
sudo docker rmi 镜像id //删除镜像 sudo docker pull microsoft/aspnetcore: //拉取指定版本的core
3.4 运行镜像
现在就差最后一步运行了,我们用下面的命令运行刚刚创建的webtest镜像,
这里通过 -p 参数映射容器的8080到宿主机的8080端口:8080:8080(宿主:容器)
-d 参数告诉docker以后台任务形式运行镜像
sudo docker run -d -p : webtest:1.0
输入命令docker ps查看运行中的容器,注意Status列,Up表示我们刚刚创建的容器正在运行

四、测试站点运行情况
在我们的windows中,浏览器输入服务器IP+端口号,可以看到站点已经跑起来了

OK,任务完成。
五、扩展docker相关知识
Docker的卸载,不打字了,直接截图了:

配置镜像加速
//因为默认的镜像仓库远在国外,拉取一个小的镜像时间还可以忍受,若拉取一个上G的镜像就有点太折磨人了,我们使用DaoCloud镜像加速器来进行镜像加速。Linux上配置方法如下:
$ curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
$ sudo systemctl restart docker
如果服务器重启reboot,你会发现站点随即挂掉了,因为容器也自动退出,如果想让服务器重启后容器内的镜像自动启动,可以在运行docker容器时,加上下面的命令:
docker run --restart=always -d -p 8080:8080 webtest:1.0
docker常用命令
docker pull 镜像名称 //拉取镜像 docker rm -f 容器id //强制删除容器 docker rmi imageid //删除镜像 docker logs -f 容器ID //查看容器日志
docker stop $CONTAINER_ID /docker ps -a //查看所有的容器
docker attach 容器id //进入到容器,一般常用下面的命令进入到容器内部 docker exec -it 容器id /bin/bash 容器内安装vim:apt-get update 执行完之后执行 apt-get install vim
docker build -t s2appadmin . //使用Dockerfile文件编译Docker dotnet publish //发布dotnetcore应用 dotnet run //启动dotnetcore应用 dotnet *.dll //在发布后的目录中执行dotnet 程序集的dll文件名,启动应用 nginx -v //查看nginx版本 nginx -s reload //重新加载nginx nginx -s stop //停止nginx
DotNet跨平台 - docker部署.net core2.0项目的更多相关文章
- 将asp.net core2.0项目部署在IIS上运行
原文:将asp.net core2.0项目部署在IIS上运行 前言: 与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是独立运行的.它独立运行在控 ...
- Core2.0 项目到2.1
Core2.0 项目到2.1 https://www.cnblogs.com/FlyLolo/p/ASPNETCore2_10.html .NET Core 2.1 终于发布了, 赶紧升级一下. 一. ...
- 在阿里云Windows Server 上部署ASP .NET CORE2.0项目
近期使用ASP.NET Core2.0对博客进行了重写,在部署到服务器时遇到了一些问题,来记录一下留用. 配置环境 安装 .Net Framework3.5 在IIS管理器上直接开启,这里总是失败,上 ...
- Asp.NET Core2.0 项目实战入门视频课程_完整版
END OR START? 看到这个标题,你开不开心,激不激动呢? 没错,.net core的入门课程已经完毕了.52ABP.School项目从11月19日,第一章视频的试录制,到今天完整版出炉,离不 ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(1)-2项目说明和源码下载
本文目录1. 摘要2. Window下运行 3.linux下运行4. 开发记录5. 总结 1.概要 写<Asp.Net Core 2.0 项目实战>系列断断续续已经很长时间了,期间很多朋友 ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(任务管理系统)-2项目搭建
系统要求 首先建议采用 Windows 10 专业版/企业版/教育版,且必须是64位操作系统,原因是docker装起来比较方便,Win7装起来比较麻烦,且不确定是否有其他问题(自己没有实践过) 其次W ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(1)-12基于cookie登录授权认证并实现前台会员、后台管理员同时登录
1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...
- Docker部署golang微服务项目
这篇博客是为了记录一下部署步骤. 因为实训需要,我要在服务器上用docker部署我们小组的微服务项目.我们的微服务有Gateway,User,Scene,Device四个部分,分别占用不同的端口,其中 ...
- ASP.NET Core 2.1 : 十.升级现有Core2.0 项目到2.1
.NET Core 2.1 终于发布了, 赶紧升级一下. 一. 安装SDK 首先现在并安装 SDK(64-bit) 安装完毕后如果新建项目可以看到已经有2.1的选项了 二. 更新现有2.0项目到2.1 ...
随机推荐
- OpenTK学习笔记(3)-你好!窗体!
参考:http://dreamstatecoding.blogspot.com/2017/01/opengl-4-with-opentk-in-c-part-1.html http://www.cnb ...
- Linux中split大文件分割和cat合并文件
当需要将较大的数据上传到服务器,或从服务器下载较大的日志文件时,往往会因为网络或其它原因而导致传输中断而不得不重新传输.这种情况下,可以先将大文件分割成小文件后分批传输,传完后再合并文件. 1.分割 ...
- PyTorch Tutorials 5 数据并行(选读)
%matplotlib inline 数据并行(选读) Authors: Sung Kim and Jenny Kang 在这个教程里,我们将学习如何使用 DataParallel 来使用多GPU. ...
- phpstorm设置最多标签数
在settings=>Editor=>General=>Editor Tabs的Tab limit下可以设置当前窗口能够打开的最多标签数目,默认是10,超过设定值时,会自动关闭前面的 ...
- List&Set
List a.普通for循环, 使用get()逐个获取 b.调用iterator()方法得到Iterator, 使用hasNext()和next()方法 c.增强for循环, 只要可以使用Iterat ...
- python代码-leetcode2 链表-两数相加
示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 # Definitio ...
- 002-demo业务说明
一.demo基本业务功能介绍 只是demo,无完整功能,不断重构系统,以搭建 高可扩展性.高性能.大数据.高并发.分布式的系统架构 客户管理.商品管理.购物车.订单管理.库存管理 二.基本数据字典 说 ...
- Centos7安装zabbix3.4.0以及配置和使用
一.安装ZABBIX 1.环境和软件版本 注:此次是采用的rpm包方式安装,所以服务器必须要能连接互联网通过yum方式解决依赖关系 ①系统: [root@zabbix ~]# cat /etc/red ...
- Python网络编程之TCP套接字简单用法示例
Python网络编程之TCP套接字简单用法示例 本文实例讲述了Python网络编程之TCP套接字简单用法.分享给大家供大家参考,具体如下: 上学期学的计算机网络,因为之前还未学习python,而jav ...
- Flutter TextField 文本输入框的基本属性及详解
TextField 文本输入框 源码分析: const TextField({ Key key, this.controller, // 控制正在编辑文本 this.focusNode, // 获取键 ...