Docker容器中开始.Net Core之路
开始写这篇博客前,已经尝试练习过好多次Docker环境安装,.Net Core环境安装了,在这里替腾讯云做一个推广,假如我们想学习、练手.net core 或是Docker却苦于没有开发环境,服务器也不想买,那么我们可以使用腾讯云提供的开发者实验,每个实验项目每天可以免费使用一次,时常45分钟,学习技术单靠看几篇文章、几本书是完全不够的,”实践方能出真知“。
一、环境介绍
在练习平台上的环境是CentOS7.3版 或许你会说我不懂Linux怎么办,没关系,我也是小白,学点基本命令暂时能用起来就行了。毕竟我们不是专门在Linux下搞开发的。(Linux下专业人士见谅哈)。
Docker容器,如果说Docker容器还不知道什么概念的话,我推荐先暂停,先学习下Docker的基本概念,弄清楚Docker是什么,总比越看越糊涂好.
dotnet镜像(也可以是aspnetcore镜像这两者的关系我将稍后解释).
OK,开始动手!
二、启动实验,安装Docker
我进入的搭建Docker环境,当然也可以从其他实验中开始着手。从搭建Docker环境中进入我们可以看到要求的步骤,方便我们快速安装,仅此而已。
1、先来安装Docker环境
yum install docker-io -y //CentOS已经将Docker软件包放在了Extras软件源中,直接利用即可
docker -v //查看docker的版本 version
systemctl start docker.service //开启Docker服务
systemctl enable docker.service //开机启动Docker服务
安装Docker环境时需要等待一到两分钟........安装完毕,接下来我们需要将Docker服务进行启动
到这里Docker环境的安装就已经结束了。当然我们还需要配置Docker,开始配置DockerHub:
echo "OPTIONS='--registry-mirror=https://mirror.ccs.tencentyun.com'" >> /etc/sysconfig/docker
systemctl daemon-reload //重新载入 systemd,扫描新的或有变动的单元
systemctl restart docker.service //重启docker服务
三、安装.Net Core环境
接下来我们将有两种方式来安装我们的.net core环境
方式一:在Docker容器中获取dotnet镜像
docker pull microsoft/dotnet //安装.net core镜像
这种方式提供给了我们.net core的整套模板,编译工具,RunTime等等,一应俱全。我们可以通过docker命令查看我们已经拥有的镜像,注意 这需要在Linux主机下查看,别跑到容器中去了
docker images // 查看当前已有的docker镜像文件
当前命令下我们可以看到dotnet镜像已经被我们拉取下来了。继续,我们开始新建并运行一个以dotnet镜像的容器
docker run -it microsoft/dotnet //启动一个dotnet镜像
看到root后面变化了没,这说明我们已经进入了一个容器,Docker当新建一个容器后,会给这个容器分配一个id,也就是我们所看见的那串字符串了。继续,通过命令新建一个web应用
dotnet new mvc -n MyFirstDocker.Web //创建项目名为MyFirstDocker.Web的ASP.NET Core MVC项目
我们可以通过ls命令看到当前容器中的所有文件夹信息,MyFirstDocker.Web项目已经创建好了
在MyFirstDocker文件夹内,有很多我们熟悉的东西
接下来,通过命令启动项目
dotnet run //启动项目
大功告成,项目启动,可以通过同时按住Ctrl+q+p退出容器,该命令保持容器中网站运行,然后使用curl -k http://localhost:5000访问网站
查看当前主机上已有的容器实例
docker ps -a // 查看当前的已存在的容器实例 (不考虑状态)
在这里我们开始要考虑长远计划了,假如我需要将新的文件加入进来,我可以采取什么方式,在容器中安装一个git pull新文件,或许可以,但是如果说这台主机上有十个容器,都运行着服务,莫非我还得十个容器全部安装git,基于这个考虑,可以尝试用下这种操作了。我在Linux主机中安装.Net Core SDK,首先开始配置安装包的来源
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[packages-microsoft-com-prod]
name=packages-microsoft-com-prod
baseurl= https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod
enabled=
gpgcheck=
gpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'
接下来开始安装.net-sdk,版本2.0.3,这个过程耗时比较长,需要耐心等待
sudo yum update
sudo yum -y install libunwind libicu
sudo yum install dotnet-sdk-2.1.
好了,开始接下来的操作了
cd /home
mkdir aspnetcoreapp
cd aspnetcoreapp
dotnet new web
dotnet restore
dotnet run
通过直接启动,也是可以直接运行起来的,但是肯定是不推荐的啦,毕竟Docker这么好用
接下来让Linux主机上的文件可以共享文件到Docker容器中,这样一来我们可以直接在Docker中使用Linux主机文件,然后运行起来,当有文件改动,只需要更新Linux主机上的文件即可。这里会遇到一个问题,就是明明已经用了共享目录的命令,但是Docker容器中并没有那些文件,这是由于selinux的原因,我的解决方案就是在 -v加上一个--privileged=true,当然这个方案也是靠度娘得知的。
当前Docker容器中已经有了共享目录下的文件,可能会需要dotnet restore然后可以用dotnet run进行启动
方式二:在Docker容器中获取aspnetcore镜像
docker pull microsoft/aspnetcore //安装asp.net core镜像
查看当前已经有的镜像,成功安装了aspnetcore镜像
同样和前面的操作一样,我们根据该镜像新建一个容器
docker run -it microsoft/aspnetcore //运行一个以aspnetcore为镜像的容器
同样新建一个应用,但是会发现这个应用不能成功,提示我们没有SDK
dotnet new mvc -n HelloDocker.Web //创建项目名为HelloDocker.Web的ASP.NET Core MVC项目
在这里我要解释下dotnet镜像和aspnetcore镜像是什么关系:
在dockerhub官网中有着dotnet和aspnetcore的镜像,dotnet可以看作是集大成者,包含了.net core控制台aspnetcore的所有,而aspnetcore是以dotnet镜像为基础,在aspnetcore中只包含了RunTime和构建当前项目为镜像的工具,这也就意味着如果我们要直接使用aspnetcore为镜像,我们的项目是要已经编译好了的,才可以直接使用这个镜像。而当你使用dotnet镜像时,包含了编译工具,Runtime,一切的一切,这也就是dotnet镜像比aspnetcore镜像大这么多的原因了。
可以利用方式一最后在Linux下编译好的项目,同样用共享目录的方式共享到有aspnetcore镜像的Docker容器中,这样我们就可以直接跑起来了。由于时间关系没有尝试,下次会尝试一下。这样做的好处是在开发环境中编译好的项目我们可以直接拿来用,Docker容器中只需要运行时环境就可以了。
四、DockerFile文件的作用
DockerFile可是好东西,好比如说拿着武功秘籍,一招一式照着做。一般是在项目中建好一个dockerfile文件,然后在其中写上我们的要求
FROM microsoft/dotnet:latest
WORKDIR /app
COPY . /app
RUN dotnet restore
EXPOSE
ENV ASPNETCORE_URLS http://*:5000
ENTRYPOINT ["dotnet","run"]
通过命令将dockerfile文件运行,将整个项目打包成镜像,我们可以使用docker images可以看到这个生成的新镜像
docker build -t mydockerimage .
如果我们需要使用这个镜像,我们可以直接在创建容器时指定这个镜像,生成之后的环境和你打包的镜像是一样的。
最后感谢博友的文章参考,半只不解的时候正好看到这篇文章,很顺利的解决了一个问题。@圣杰 http://www.cnblogs.com/sheng-jie/p/8107877.html
新年之际,在此祝愿大家 新年吉祥 大吉大利。
2018-1-1,望技术有成后能回来看见自己的脚步
Docker容器中开始.Net Core之路的更多相关文章
- 在Docker容器中运行.Net Core web Api项目
安装Docker环境 参考本人这篇<CentOS 7 下Docker的安装>文章进行安装以及环境配置,这里不做赘述. 通过.NetCore开发WebApi项目 1. 创建.Net Core ...
- Docker容器中运行ASP.NET Core
在Linux和Windows的Docker容器中运行ASP.NET Core 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了. ...
- Docker容器中开始.NETCore之路
一.引言 开始写这篇博客前,已经尝试练习过好多次Docker环境安装,.Net Core环境安装了,在这里替腾讯云做一个推广,假如我们想学习.练手.net core 或是Docker却苦于没有开发环境 ...
- Linux下将.Asp Core 部署到 Docker容器中
我们来部署一个简单的例子: 将一个简单的.Aps Core项目部署到Docker容器中并被外网访问 说明: 下面的步骤都是建立在宿主服务器系统已经安装配置过Docker容器,安装Docker相对比较简 ...
- .Net Core 3.0 的 docker 容器中运行 无法 访问 Oracle数据库
.Net Core 3.0 的 docker 容器中运行 无法 访问 Oracle数据库 , 一直报下面的错误 ORA-00604: error occurred at recursive SQL ...
- .NET Core开发的iNeuOS工业互联平台,iNeuKernel物联网核心组件在Docker容器中部署。
目 录 1. 概述... 2 2. 演示信息... 2 3. 安装Docker容器... 2 4. 安装dotnet镜像... 3 5. ...
- 将netcore网站部署到docker容器中
一.背景 最近一直在看docker的教程,基础知识看的差不多了.理论总要运用于实践,所以下面我们就来把最简单的一个netcore网站托管到docker容器中. 环境:1.docker for wind ...
- 【原创】大叔经验分享(71)docker容器中使用jvm工具
java应用中经常需要用到jvm工具来进行一些操作,如果java应用部署在docker容器中,如何使用jvm工具? 首先要看使用的docker镜像, 比如常用的openjdk镜像分为jdk和jre,只 ...
- 在 docker 容器中捕获信号
我们可能都使用过 docker stop 命令来停止正在运行的容器,有时可能会使用 docker kill 命令强行关闭容器或者把某个信号传递给容器中的进程.这些操作的本质都是通过从主机向容器发送信号 ...
随机推荐
- 【机器学习】主成分分析法 PCA (I)
主成分分析算法是最常见的降维算法,在PCA中,我们要做的是找到一个方向向量,然后我们把所有的数都投影到该向量上,使得投影的误差尽可能的小.投影误差就是特征向量到投影向量之间所需要移动的距离. PCA的 ...
- 一些简单的ajax的特点,方法、属性。以及ajax的创建 请求
1.ajax的特点,基本原理,属性. ajax:页面的局部刷新 Asynchronous JavaScript And Xml JavaScript:更新局部的页面 XML:一般用于请求数据和响应数据 ...
- Effective C++ 笔记:条款 33 避免继承导致的名称遮掩
Avoid hiding inherited names 作用域(scopes)所带来的名称二义性,c++编译器会寻找指涉(refer to)的对象并实现名称遮掩规则(name-hiding rule ...
- C++解题报告 : 迭代加深搜索之 ZOJ 1937 Addition Chains
此题不难,主要思路便是IDDFS(迭代加深搜索),关键在于优化. 一个IDDFS的简单介绍,没有了解的同学可以看看: https://www.cnblogs.com/MisakaMKT/article ...
- rn下的弹性布局
重点: 1]react native 下的弹性布局名字叫:flexDirection 2]flexDirection的默认值是column而不是row,而flex也只能指定一个数字值. 3]使用fle ...
- oracle表空间自增
https://blog.csdn.net/windylfm/article/details/78085669
- explicit_defaults_for_timestamp引发的狗血剧情
今天就碰到了一个较初级的问题,居然为找这个参数花了好半天时间,深以为不齿.需求是这样的,有个表的某个字段需要从datetime改成timestamp类型.原结构如下:create table tmp1 ...
- SSRF
SSRF 关于SSRF SSRF(Server-Side Request Forgery:服务器端请求伪造),攻击者通过伪造服务器端发起的请求,获取客户端所不能得到的数据.一般情况下,SSRF攻击的目 ...
- ajax轮询与长轮询
刚刚网了关于轮询的知识,必须拿到自己这里来做个备份了! 其实以前用ajax轮询做个及时数据更新的,只是当时做了不知道那个就是轮询. 首先我们什么时候会想到用轮询技术呢? 一般而言,最多的是及时信息 ...
- STM32CubeMX+Keil裸机代码风格(2)
10.找到STM32cubeMx所建的工程目录,在工程目录的同级目录下新建一个文件夹用来存放自己写的代码 11.用notepad++打开keil的工程文件,在这里的<Group>前面加上 ...