参考文档:
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 安装
在2017年的3月1号之后,Docker的版本命名开始发生变化,同时将CE版本和EE版本进行分开,这里我们选择安装免费的CE社区版,
具体区别可以参考:https://docs.docker.com/install/linux/docker-ce/centos/
$ 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:2-aspnetcore-runtime #容器中系统的工作空间 WORKDIR /a