参考文档:

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
   //阿里云镜像  yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  如果服务器重启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项目的更多相关文章

  1. 将asp.net core2.0项目部署在IIS上运行

    原文:将asp.net core2.0项目部署在IIS上运行 前言:  与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是独立运行的.它独立运行在控 ...

  2. Core2.0 项目到2.1

    Core2.0 项目到2.1 https://www.cnblogs.com/FlyLolo/p/ASPNETCore2_10.html .NET Core 2.1 终于发布了, 赶紧升级一下. 一. ...

  3. 在阿里云Windows Server 上部署ASP .NET CORE2.0项目

    近期使用ASP.NET Core2.0对博客进行了重写,在部署到服务器时遇到了一些问题,来记录一下留用. 配置环境 安装 .Net Framework3.5 在IIS管理器上直接开启,这里总是失败,上 ...

  4. Asp.NET Core2.0 项目实战入门视频课程_完整版

    END OR START? 看到这个标题,你开不开心,激不激动呢? 没错,.net core的入门课程已经完毕了.52ABP.School项目从11月19日,第一章视频的试录制,到今天完整版出炉,离不 ...

  5. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-2项目说明和源码下载

    本文目录1. 摘要2. Window下运行 3.linux下运行4. 开发记录5. 总结 1.概要 写<Asp.Net Core 2.0 项目实战>系列断断续续已经很长时间了,期间很多朋友 ...

  6. net core体系-web应用程序-4asp.net core2.0 项目实战(任务管理系统)-2项目搭建

    系统要求 首先建议采用 Windows 10 专业版/企业版/教育版,且必须是64位操作系统,原因是docker装起来比较方便,Win7装起来比较麻烦,且不确定是否有其他问题(自己没有实践过) 其次W ...

  7. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-12基于cookie登录授权认证并实现前台会员、后台管理员同时登录

    1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...

  8. Docker部署golang微服务项目

    这篇博客是为了记录一下部署步骤. 因为实训需要,我要在服务器上用docker部署我们小组的微服务项目.我们的微服务有Gateway,User,Scene,Device四个部分,分别占用不同的端口,其中 ...

  9. ASP.NET Core 2.1 : 十.升级现有Core2.0 项目到2.1

    .NET Core 2.1 终于发布了, 赶紧升级一下. 一. 安装SDK 首先现在并安装 SDK(64-bit) 安装完毕后如果新建项目可以看到已经有2.1的选项了 二. 更新现有2.0项目到2.1 ...

随机推荐

  1. PEP 442 -- Safe object finalization

    https://www.python.org/dev/peps/pep-0442/ PEP 442 -- Safe object finalization PEP: 442 Title: Safe o ...

  2. SpringBoot视图层技术

    一.SpringBoot整合jsp 在maven的dependencies的依赖中除了springBoot启动器还要添加对jstl和jsp的依赖. <dependencies> <d ...

  3. mysql数据库分库分表(Sharding)(转)

    mysql数据库切分 前言 通过MySQLReplication功能所实现的扩展总是会受到数据库大小的限制.一旦数据库过于庞大,尤其是当写入过于频繁,非常难由一台主机支撑的时候,我们还是会面临到扩展瓶 ...

  4. new Handler()和new Handler(Looper.getMainLooper())的区别是什么?

    new Handler()和new Handler(Looper.getMainLooper())的区别是什么?     一.Handler的一些知识,new Handler()和new Handle ...

  5. ubuntu14.04 rabbitmq重启丢失用户信息

    一.rabbitmq数据是根据当前hostname作为node节点作为数据名保存 二.添加rabbimq用户sudo rabbitmqctl add_user tlwlmy tlwlmysudo ra ...

  6. 阶段5 3.微服务项目【学成在线】_day18 用户授权_15-细粒度授权-我的课程细粒度授权-实现

    先定义接口 实现接口 service 需要通过conpanyId去查询课程的列表 定义dao 要查课程的图片 名称 等相关信息.所以使用Mybatis来实现 定义Mapper 看这个dao里面方法在哪 ...

  7. [AI] 深度数学 - Bayes

    数学似宇宙,韭菜只关心其中实用的部分. scikit-learn (sklearn) 官方文档中文版 scikit-learn Machine Learning in Python 一个新颖的onli ...

  8. 【leetcode_easy】590. N-ary Tree Postorder Traversal

    problem 590. N-ary Tree Postorder Traversal 参考 1. Leetcode_easy_590. N-ary Tree Postorder Traversal; ...

  9. 报错: Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的权利字符串"

    Code=3000 "未找到应用程序的“aps-environment”的权利字符串" 解决办法 push,即远程通知,教材的资料较少,想实践的话,只能每年花99美元买苹果开发者帐 ...

  10. docker(学习笔记)

    # 1. Docker介绍## 1.1 什么是容器?## 1.2 容器的前世今生FreeBASE jail ------> Linux vserverchroot ----> 完整的根文件 ...