开始写这篇博客前,已经尝试练习过好多次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容器中开始.NETCore之路的更多相关文章

  1. 将netcore网站部署到docker容器中

    一.背景 最近一直在看docker的教程,基础知识看的差不多了.理论总要运用于实践,所以下面我们就来把最简单的一个netcore网站托管到docker容器中. 环境:1.docker for wind ...

  2. Docker容器中开始.Net Core之路

    开始写这篇博客前,已经尝试练习过好多次Docker环境安装,.Net Core环境安装了,在这里替腾讯云做一个推广,假如我们想学习.练手.net core 或是Docker却苦于没有开发环境,服务器也 ...

  3. .NetCore下使用IdentityServer4 & JwtBearer认证授权在CentOS Docker容器中运行遇到的坑及填坑

    今天我把WebAPI部署到CentOS Docker容器中运行,发现原有在Windows下允许的JWTBearer配置出现了问题 在Window下我一直使用这个配置,没有问题 services.Add ...

  4. Linux下将.Asp Core 部署到 Docker容器中

    我们来部署一个简单的例子: 将一个简单的.Aps Core项目部署到Docker容器中并被外网访问 说明: 下面的步骤都是建立在宿主服务器系统已经安装配置过Docker容器,安装Docker相对比较简 ...

  5. .NET Core开发的iNeuOS工业互联平台,iNeuKernel物联网核心组件在Docker容器中部署。

    目       录 1.      概述... 2 2.      演示信息... 2 3.      安装Docker容器... 2 4.      安装dotnet镜像... 3 5.      ...

  6. Docker容器中运行ASP.NET Core

    在Linux和Windows的Docker容器中运行ASP.NET Core 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了. ...

  7. 在 docker 容器中捕获信号

    我们可能都使用过 docker stop 命令来停止正在运行的容器,有时可能会使用 docker kill 命令强行关闭容器或者把某个信号传递给容器中的进程.这些操作的本质都是通过从主机向容器发送信号 ...

  8. 隔离 docker 容器中的用户

    笔者在前文<理解 docker 容器中的 uid 和 gid>介绍了 docker 容器中的用户与宿主机上用户的关系,得出的结论是:docker 默认没有隔离宿主机用户和容器中的用户.如果 ...

  9. Docker容器中找不到vim命令

    docker容器中,有的并未安装vi和vim,输入命令vim,会提示vim: command not found(如下图).此时我们就要安装vi命令 执行命令:apt-get update apt-g ...

随机推荐

  1. 如何实现MDI窗体不重复打开同一个子窗体?

    使用MDI窗体时,默认是可以多次打开同一个子窗体的,那么如何控制不重复打开同一个子窗体呢?MDI窗体有个重要属性——MdiChildren,该属性表示MDI窗体打开的子窗体的数组,循环遍历该数组,可以 ...

  2. LDA算法入门

    http://blog.csdn.net/warmyellow/article/details/5454943 LDA算法入门 一. LDA算法概述: 线性判别式分析(Linear Discrimin ...

  3. A workaround to change shared memory size for Docker containers in AWS ECS

    Issue Because of not supporting to specify the following docker run parameter, containers in ECS can ...

  4. Android - "cause failed to find target android-14" 问题

    在导入别人的工程项目时经常会遇到各种问题,本文中的就是其中SDK不对导致的   在导入项目时已经修改了 两个build.gradle文件 错误的原因是后面中这两项没修改. compileSdkVers ...

  5. 照虎画猫写自己的Spring——自定义注解

    Fairy已经实现的功能 读取XML格式配置文件,解析得到Bean 读取JSON格式配置文件,解析得到Bean 基于XML配置的依赖注入 所以,理所当然,今天该实现基于注解的依赖注入了. 基于XML配 ...

  6. 11-散列4 Hashing - Hard Version

    题目 Sample Input: 11 33 1 13 12 34 38 27 22 32 -1 21 Sample Output: 1 13 12 21 33 34 38 27 22 32 基本思路 ...

  7. java agent

    cmd使用java -help可以看到关于agent参数: -agentlib:<libname>[=<选项>] 加载本机代理库 <libname>, 例如 -ag ...

  8. #centos7 创建内网yum源 OpenStack源部署

    #centos7 创建内网yum源#centos7 自动化安装 本地 内网 web源创建.更新 createrepo http OpenStack源部署 Elven原创 http://www.cnbl ...

  9. codeforces 887B Cubes for Masha 两种暴力

    B. Cubes for Masha time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  10. 38.Linux驱动调试-根据系统时钟定位出错位置

    当内核或驱动出现僵死bug,导致系统无法正常运行,怎么找到是哪个函数的位置导致的? 答,通过内核的系统时钟,因为它是由定时器中断产生的,每隔一定时间便会触发一次,所以当CPU一直在某个进程中时,我们便 ...