Docker容器中开始.NETCore之路

一、引言
  开始写这篇博客前,已经尝试练习过好多次Docker环境安装,.Net Core环境安装了,在这里替腾讯云做一个推广,假如我们想学习、练手.net core 或是Docker却苦于没有开发环境,服务器也不想买,那么我们可以使用腾讯云提供的开发者实验,每个实验项目每天可以免费使用一次,时常45分钟,学习技术单靠看几篇文章、几本书是完全不够的,”实践方能出真知“。来腾讯云开发者实验室 学习.NET Core 2.0


二、环境介绍

  在练习平台上的环境是CentOS7.3版 或许你会说我不懂Linux怎么办,没关系,我也是小白,学点基本命令暂时能用起来就行了。毕竟我们不是专门在Linux下搞开发的。(Linux下专业人士见谅哈)。

  Docker容器,如果说Docker容器还不知道什么概念的话,我推荐先暂停,先学习下Docker的基本概念,弄清楚Docker是什么,总比越看越糊涂好.

  dotnet镜像(也可以是aspnetcore镜像这两者的关系我将稍后解释).

  OK,开始动手!

 

三、启动实验,安装Docker

  640?wx_fmt=png&wxfrom=5&wx_lazy=1

  我进入的搭建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服务
  0?wx_fmt=png

  0?wx_fmt=png

  安装Docker环境时需要等待一到两分钟........安装完毕!

  接下来我们需要将Docker服务进行启动

  0?wx_fmt=png

  到这里Docker环境的安装就已经结束了。

 

  当然我们还需要配置Docker,开始配置DockerHub:

  echo "OPTIONS='--registry-mirror=https://mirror.ccs.tencentyun.com'" >> /etc/sysconfig/docker
  systemctl daemon-reload //重新载入 systemd,扫描新的或有变动的单元  systemctl restart docker.service //重启docker服务

 

四、安装.NETCore环境

  接下来我们将有两种方式来安装我们的.net core环境

  方式一:在Docker容器中获取dotnet镜像

  docker pull microsoft/dotnet //安装.net core镜像

  0?wx_fmt=png

  这种方式提供给了我们.net core的整套模板,编译工具,RunTime等等,一应俱全。

  我们可以通过docker命令查看我们已经拥有的镜像,注意 这需要在Linux主机下查看,别跑到容器中去了

  docker images // 查看当前已有的docker镜像文件

  0?wx_fmt=png

   当前命令下我们可以看到dotnet镜像已经被我们拉取下来了。OK


  继续,我们开始新建并运行一个以dotnet镜像的容器

  docker run -it microsoft/dotnet //启动一个dotnet镜像

   0?wx_fmt=png

  看到root后面变化了没,这说明我们已经进入了一个容器,Docker当新建一个容器后,会给这个容器分配一个id,也就是我们所看见的那串字符串了。

  继续,通过命令新建一个web应用

  dotnet new mvc -n MyFirstDocker.Web //创建项目名为MyFirstDocker.Web的ASP.NET Core MVC项目
  0?wx_fmt=png

  我们可以通过ls命令看到当前容器中的所有文件夹信息,MyFirstDocker.Web项目已经创建好了

  0?wx_fmt=png

  在MyFirstDocker文件夹内,有很多我们熟悉的东西

   0?wx_fmt=png

  接下来,通过命令启动项目

  dotnet run //启动项目
  0?wx_fmt=png

  OK,大功告成,项目启动,由于实验环境没得浏览器,我们只能看看 哈哈 貌似是有一种方式可以看到页面 但我还没学会 见谅哈

 

  通过命令exit退出当前容器,查看当前主机上已有的容器实例

  docker ps -a // 查看当前的已存在的容器实例 (不考虑状态)
 在这里我们开始要考虑长远计划了,假如我需要将新的文件加入进来,我可以采取什么方式,在容器中安装一个git,pull新文件,或许可以,但是如果说这台主机上有十个容器,都运行着服务,莫非我还得十个容器全部安装git,基于这个考虑,可以尝试用下这种操作了。

  我在Linux主机中安装.NET Core SDK

  首先开始配置安装包的来源


sudo rpm --import https://www.tygj178.com packages.microsoft.com/keys/microsoft.asc

  sudo sh -c 'echo -e "[packages-microsoft-com-prod]

  name=packages-microsoft-com-prod

  baseurl= https://www.xucaizxyl.com packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod

  enabled=1

  gpgcheck=1

  gpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'

 0?wx_fmt=png

  接下来开始安装.net-sdk,版本2.0.3,这个过程耗时比较长,需要耐心等待

  sudo yum update
  sudo yum -y install libunwind libicu
  sudo yum install dotnet-sdk-2.1.3
   好了,开始接下来的操作了

  cd /home
  mkdir aspnetcoreapp
  cd aspnetcoreapp
  dotnet new web
  dotnet restore
  dotnet run
  0?wx_fmt=png

  通过直接启动,也是可以直接运行起来的,但是肯定是不推荐的啦,毕竟Docker这么好用 哈哈

  0?wx_fmt=png

  接下来让Linux主机上的文件可以共享文件到Docker容器中,这样一来我们可以直接在Docker中使用Linux主机文件,然后运行起来,当有文件改动,只需要更新Linux主机上的文件即可。这里会遇到一个问题,就是明明已经用了共享目录的命令,但是Docker容器中并没有那些文件,这是由于selinux的原因,我的解决方案就是在 -v加上一个--privileged=true,当然这个方案也是靠度娘得知的。

  当前Docker容器中已经有了共享目录下的文件,可能会需要dotnet restore然后可以用dotnet run进行启动

  0?wx_fmt=png

 

  方式二:在Docker容器中获取aspnetcore镜像

  docker pull microsoft/aspnetcore //安装asp.net core镜像

  0?wx_fmt=png

  查看当前已经有的镜像,成功安装了aspnetcore镜像

  0?wx_fmt=png

  同样和前面的操作一样,我们根据该镜像新建一个容器

  docker run -it microsoft/aspnetcore //运行一个以aspnetcore为镜像的容器
  同样新建一个应用,但是会发现这个应用不能成功,提示我们没有SDK

  dotnet new mvc -n HelloDocker.Web /www.douniu828.com/创建项目名为HelloDocker.Web的ASP.NET Core MVC项目
  0?wx_fmt=png

  

  在这里我要解释下dotnet镜像和aspnetcore镜像是什么关系:

  在dockerhub官网中有着dotnet和aspnetcore的镜像,dotnet可以看作是集大成者,包含了.netcore控制台aspnetcore的所有,而aspnetcore是以dotnet镜像为基础,在aspnetcore中只包含了RunTime和构建当前项目为镜像的工具,这也就意味着如果我们要直接使用aspnetcore为镜像,我们的项目是要已经编译好了的,才可以直接使用这个镜像。

  而当你使用dotnet镜像时,包含了编译工具,Runtime,一切的一切,这也激素dotnet镜像比aspnetcore镜像大这么多的原因了。

  0?wx_fmt=png

  可以利用方式一最后在Linux下编译好的项目,同样用共享目录的方式共享到有aspnetcore镜像的Docker容器中,这样我们就可以直接跑起来了。由于时间关系没有尝试,下次会尝试一下。

  这样做的好处是在开发环境中编译好的项目我们可以直接拿来用,Docker容器中只需要运行时环境就可以了。

 

五、DockerFile文件的作用

  dockerFile可是好东西,好比如说拿着武功秘籍,一招一式照着做。

  一般是在项目中建好一个www.huayyule.com dockerfile文件,然后在其中写上我们的要求

FROM microsoft/dotnet:latest

  WORKDIR www.thd580.com /app

  COPY . /app

  RUN dotnet restore

  EXPOSE 5000

  ENV ASPNETCORE_URLS http://*:5000

  ENTRYPOINT ["dotnet",www.thd729.com"run"]

通过命令将dockerfile文件运行,将整个项目打包成镜像,我们可以使用docker images可以看到这个生成的新镜像

  docker build -t mydockerimage .
  如果我们需要使用这个镜像,我们可以直接在创建容器时指定这个镜像,生成之后的环境和你打包的镜像是一样的

  最后感谢博友的文章参考,半只不解的时候正好看到这篇文章,很顺利的解决了一个问题。

相关文章

来腾讯云开发者实验室 学习.NET Core 2.0

.NET Core容器化@Docker

.NET Core容器化之多容器应用部署@Docker-Compose

原文地址:https://www.cnblogs.com/CKExp/p/8159269.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式的数据一致性

一.前序 数据的一致性和系统的性能是每个分布式系统都需要考虑和权衡的问题。一致性的级别如下:1.强一致性这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统…

kompozer如何启动_使用KompoZer创建网站

kompozer如何启动Are you looking for a way to easily start creating your own webpages? KompoZer is a nice basic website editor that will allow you to quickly get started and become familiar with the process. 您是否正在寻找一种轻松创建自己的网页的方法&#…

我也说说宏定义likely()和unlikely()

作者:gfree.windgmail.com 博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft归gfree.windgmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及…

图片懒加载与预加载

预加载 常用的是new Image();,设置其src来实现预载,再使用onload方法回调预载完成事件。function loadImage(url, callback) {var img new Image(); //创建一个Image对象,实现图片的预下载img.src url;if (img.complete){ // 如果图片已经存…

电脑pin重置_如果忘记了如何重置Windows PIN

电脑pin重置A good password or PIN is difficult to crack but can be difficult to remember. If you forgot or lost your Windows login PIN, you won’t be able to retrieve it, but you can change it. Here’s how. 好的密码或PIN很难破解,但很难记住。 如果…

android.support不统一的问题

今天supprt28遇到的问题,由于28还是预览版,还存在一些bug 都是因为如果程序内出现不同的,support或者其他外部引用库的多个版本,Gradle在进行合并的时候会使用本地持有的,最高版本的来进行编译,所以25的sup…

轻松查看Internet Explorer缓存文件

Sometimes you may need a quick and easy way to access Internet Explorer’s cache. Today we take a look at IECacheView which is a great application to get the job done. 有时,您可能需要一种快速简便的方法来访问Internet Explorer的缓存。 今天&#xf…

洛谷P1019 单词接龙

题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时&…

【Java】接口(interface)VS抽象类

接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。另外,接口和抽象类在方法上有区别&#x…

latex插入gif_如何将照片和GIF插入Google幻灯片

latex插入gifUsing text (and only text) in your Google Slides presentation is a great way to lose the attention of your audience. Inserting photos and animated GIFs can immediately spice things up by emphasizing the important points you make. 在Google幻灯片…

子矩阵

题目描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵。例如,下面左图中选取第2、4行和第2、4、5列交叉位置的元素得到一个2*3的子…

springboot入门(一)--快速搭建一个springboot框架

原文出处 前言在开始之前先简单介绍一下springboot,springboot作为一个微框架,它本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序,总的来说springboot不是为了要替代Sprin…

q-dir 打不开文件_Q-Dir –多窗格文件管理器

q-dir 打不开文件Sometimes when looking through a file manager, it would be nice to have more than a dual-pane view. Now you can manage your files with up to four viewing panes at once with Q-Dir. 有时,在查看文件管理器时,拥有多个双窗格…

用面向对象的方法写敲门砖

一道名为"敲门砖"的面试题: 用面向对象的方法写,点击列表内,子元素的子标签, 来删除子元素 敲门砖考点: 递归(删除标签, 需要找到列表的直属子标签, 需要通过递归层层往上找, parentNode)冒泡(只需为顶级父元素addEventListener绑定事件, 并通过e.target区分子标签, …

windows10加载动画_如何关闭动画并使Windows 10看起来更快

windows10加载动画Windows 10 fades and window animations are pure eye candy, but waiting for them to load can make your PC seem a bit slow. If you’d like an instant response, you can disable Windows 10’s animations for a snappier desktop experience. Windo…

JData大数据竞赛18年赛题-如期而至-用户购买时间预测

年前做的,也是学习别人的作品作为记录 一、赛题 表1:sku基本信息表(jdata_sku_basic_info) 表2:用户基本信息表(jdata_user_basic_info) 表3:用户行为表(jdata_user_acti…

LNMP架构(二)

2019独角兽企业重金招聘Python工程师标准>>> 一 Nginx安装 1、切换目录 # cd /usr/local/src 2、下载 # wget http://nginx.org/download/nginx-1.12.1.tar.gz 3、解压 # tar xzvf nginx-1.12.1.tar.gz 4、切换到nginx目录下 # cd nginx-1.12.1/ 5、编译 # ./confi…

edge无法上网dns_如何在Microsoft Edge中通过HTTPS启用DNS

edge无法上网dnsMicrosoft will one day enable DNS over HTTPS (DoH) for all Windows applications, but you can enable it in the new version of Microsoft Edge today with a hidden flag. DoH will improve your security and privacy online, but it isn’t yet enable…

UIButton小结

前言 本来没有打算写这篇文章的, 主要是因为在工作中遇到一些同事再用 有UIButton的时候, 有些很基本的,系统API提供的都不知道, 例如 如何让UIButton的文字居上,居左, 居右, 居下对其等一些基本点, 为此我特地写了一下UIButton小结 UIButton回顾 继承关系 NSObject -> UIRe…

Channel Allocation HDU1373

染色问题&#xff1a;相邻不能染同一种颜色 最少需要的颜色的数量最大团点的数量 #include<bits/stdc.h> using namespace std;#define N 27int n; int mp[N][N]; int ans; int alt[N][N]; int Max[N];bool dfs(int cur,int tot)//cur是s1集合的个数 {if(0cur){if(tot>…