NET Core Web 应用部署到 Docker 中运行

NET Core Web 应用部署到 Docker 中运行

环境介绍 :

  虚拟机:VirtualBox 5.1.6

  系 统:Ubuntu 16.04.1 LTS

  系统准备完成后可以使用 sudo apt-get udpate 和 sudo apt-get upgrade 对系统进行更新,然后打开https://www.microsoft.com/net/core#ubuntu 这个网址,在ubuntu系统中安装 .net core 运行环境。直接复制/粘贴给出的命令就可以了。

安装 Docker:

  什么是 Docker ? 这里面就不介绍了,直接打开 https://www.docker.com/what-docker 看吧或自行 google 中文的介绍。

  Docker 的安装其实也是使用官方提供的 step by step 安装步骤。如果不想看介绍可以直接使用下面我整理的命令:

//顺序执行这些命令:
sudo apt-get install apt-transport-https ca-certificates
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
//打开 /etc/apt/sources.list.d/docker.list 这个文件,如果不存在就创建一个(sudo touch docker.list)
//在 docker.list 中输入下面这一行内容
deb https://apt.dockerproject.org/repo ubuntu-xenial main

//接着执行命令
sudo apt-get update
sudo apt-get purge lxc-docker
apt-cache policy docker-engine
sudo apt-get update
sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
sudo reboot //重启系统
sudo apt-get update
sudo apt-get install docker-engine
sudo service docker start

上面的命令执行后,一定要看一下响应的结果,有些会提示是不用更新的,忽略即可。接下来我们执行一下经典的 hello-world.命令如下:  

sudo docker run hello-world

  执行这个命令,首先会从 docker 的镜像仓库(https://hub.docker.com/)中拉取名为 hello-world 的镜像,然后在本地运行。运行成功之后,我们会看到 hello world 输出。

  这里说一下,docker 提供了一个集中管理镜像的地方,即 https://hub.docker.com/,在这里我们可以找到自己想要的基础镜像,当然我们也可以把自己制作的镜像推送到 docker 的镜像仓库中,前提是注册一个自己的 docker hub 账号。

Pull .NET Core image:

docker 安装成功后,我们就去 docker hub 中找由 Microsoft 维护的 dotnet core 基础镜像(https://hub.docker.com/r/microsoft/dotnet/),执行下面的命令将镜像拉取到本地:

docker pull microsoft/dotnet

等待镜像拉取到本地之后,我们运行下面的命令并查看 dotnet core 环境是否正常(这里其实是多余的,MS 怎么可能给一个不能用的镜像呢?):

docker run -it microsoft/dotnet /bin/bash

  这是进入到容器中的命令行。然后我们输入 dotnet --version 查看到当前镜像内的 dotnet CLI 版本号为:1.0.0-preview2-003131。输入 exit 回车 退出容器。

  好吧,现在 dotnet core 的 docker 镜像也有了。

创建 ASP.NET Core Web 应用:

  文章开头说了我已经在 Ubuntu 虚拟机中也安装了 dotnet core 环境。使用下面的 dotnet CLI 命令创建一个 ASP.NET Core Web 应用并尝试运行:

mkdir web_2
cd web_2/
dotnet new -t web
dotnet restore
dotnet run

  我们尝试运行,并看到运行成功。接下来使用 dotnet publish 将应用发布,默认发布到了 bin/Debug/netcoreapp1.0/publish/ 这个目录。

  注:这里发布的时候,如果不修改 project.json 里面的 scripts 节点,将会用到 node.js ,可以将 prepublish 暂时注释掉,或者安装一下 node.js 并用 npm(安装完 node.js 自带的) 安装 gulp bower 这些包。

    命令:npm install -g gulp bower

编写 Dockerfile:

  在应用根目录创建一个名为 Dockerfile 的文件(命令:touch Dockerfile)接下编辑 Dockerfile(命令:vi Dockerfile),输入下面的内容:

# 声明使用的基础镜像
FROM microsoft/dotnet:latest
# 将本地dotnet core 应用拷贝到 容器 /app/ 目录下
COPY bin/Debug/netcoreapp1.0/publish/ /app/
# 设置工作目录
WORKDIR /app
# 设置导出端口
EXPOSE 5000/tcp
# 指定应用入口点
ENTRYPOINT ["dotnet", "/app/web_2.dll"]

  完成 Dockerfile 的编写,接下来构建一个镜像。

  命令:docker build -t web_2 .

  不要忘记 web_2 后面的那个点。镜像构建完成之后,我们就来运行试试吧。

  命令:docker run -it -p 5000:5000 web_2

  这里说一下 -it 是指:进入临时交互模式

  -p 5000:5000 是指将容器的 5000 端口映射到 Docker 宿主机的 5000 端口

  web_2 是指刚才我们构建的镜像。

  看到临时交互命令行,显示运行成功。我的 Ubuntu 的 IP 是 192.168.10.107。我们用浏览器访问一下 http://192.168.10.107:5000 。坏了,什么也没有显示,查看 http 状态码为 500 ,这说明是应用报错了。经过排查发现是 dotnet core web 应用引用类库的版本问题。大家知道前两天发布了 dotnet core 1.0.1,我就在 project.json 里面发现我通过 dotnet CLI 创建的应用已经在使用 1.0.1 版本的类库了。但是基础镜像 microsoft/dotnet 中还是 dotnet 1.0.0 的类库。好吧,知道了问题了,就来修改 project.json 中引用的版本吧。将 1.0.1 改为 1.0.0。再次执行 dotnet restore 和 dotnet publish。然后后重新构建 docker 镜像并运行。哇,成功了!

总结:

  通过上面的介绍,我们体验了在 docker 中运行 .net core web 应用。一步一步执行下来发现都是通过命令行安装各种执行环境,有 dotnet core 运行环境,有 docker 运行环境,有 node.js 运行环境。与编码人员的关系并不是太大。有时候按着 step by step 走,结果发现走不通,这个时候我们就要仔细分析给出的错误描述是什么,一步一步的找到问题所在,并解决掉。

  不过我们想想上面的这些步骤自动化之后,将是一种怎么样的体验?我们来畅想一下。每次开发人员编写完代码提交后,通过 CI 工具,自动构建应用并自动发布,完了再自动构建 docker 镜像并运行。测试通过后,直接将镜像用于生产环境。再进行回归测试。

时间: 2025-01-02 03:33:59

NET Core Web 应用部署到 Docker 中运行的相关文章

Asp.Net Core WebAPI+PostgreSQL部署在Docker中

 PostgreSQL是一个功能强大的开源数据库系统.它支持了大多数的SQL:2008标准的数据类型,包括整型.数值值.布尔型.字节型.字符型.日期型.时间间隔型和时间型,它也支持存储二进制的大对像,包括图片.声音和视频.PostgreSQL对很多高级开发语言有原生的编程接口,如C/C++.Java..Net.Perl.Python.Ruby.Tcl 和ODBC以及其他语言等,也包含各种文档.我用PostgreSQL结合.Net Core WebAPI构建并部署在Docker中做了一个Demo构

docker中运行ASP.NET Core Web API

在docker中运行ASP.NET Core Web API应用程序 本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Core以及docker的基本概念,网上已经有很多文章对其进行介绍了,因此本文不会再详细讲解这些内容.对.NET Core和docker不了解的朋友,建议首先查阅与这些技术相关的文档,然后再阅读本文. 先决条件 要完成本文所介绍的演练任

在docker中运行ASP.NET Core Web API应用程序

本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Core以及docker的基本概念,网上已经有很多文章对其进行介绍了,因此本文不会再详细讲解这些内容.对.NET Core和docker不了解的朋友,建议首先查阅与这些技术相关的文档,然后再阅读本文. 先决条件 要完成本文所介绍的演练任务,需要准备以下环境: Visual Studio 2015,或者Vi

eclipse:eclipse for java EE环境下如何配置tomcat服务器,并让tomcat服务器显示在控制台上,将Web应用部署到tomcat中

eclipse环境下如何配置tomcat 打开Eclipse,单击"Window"菜单,选择下方的"Preferences".  单击"Server"选项,选择下方的"Runtime Environments".  点击"Add"添加Tomcat.  点击"Next",选中自己安装的Tomcat路径.  点击"Finish"完成.  建立一个Web应用 File → 

在Docker中运行纸壳CMS并配置使用MySql

纸壳CMS是基于ASP.Net Core开发的可视化内容管理系统,可以跨平台部署,可以在容器中运行.接下来看看如何在docker中运行纸壳CMS. GitHub:https://github.com/SeriaWei/ZKEACMS.Core 方式一 直接运行以下命令即可在docker中运行纸壳CMS,运行成功以后,使用{IP}:5000来访问: docker run -d -p 5000:80 zkeasoft/zkeacms 注意:使用这种方式运行,数据库使用的是SQLite. 方式二 接下

docker 运行jenkins及vue项目与springboot项目(五.jenkins打包springboot服务且在docker中运行)

docker 运行jenkins及vue项目与springboot项目: 一.安装docker 二.docker运行jenkins为自动打包运行做准备 三.jenkins的使用及自动打包vue项目 四.docker运行nginx 五.jenkins打包springboot服务且在docker中运行 1.立即构建 输入任务名称:service_blog 选择maven项目(先要在插件管理中安装maven插件) 2.配置 源码管理 选择git(先要在插件管理中安装git插件) 输入git地址.秘钥及

品尝阿里云容器服务:初步尝试ASP.NET Core Web API站点的Docker自动化部署

部署场景是这样的,我们基于 ASP.NET Core 2.0 Preview 1 开发了一个用于管理缓存的 Web API ,想通过阿里云容器服务基于 Docker 部署为内网服务. 在这篇博文中分享一下经过实践验证的操作步骤: 一.创建与配置集群 1)首先创建一个 Swarm Mode 的集群(注意创建时不要选择“自动创建负载均衡”,因为我们部署的是内网服务,自动创建的是公网负载均衡,需要手动创建内网负载均衡并绑定到集群): 2)集群创建成功后,会在集群列表中显示下面的信息: 3)接着创建一个

(转)在Docker中运行Java:为了防止失败,你需要知道这些

转自:https://mp.weixin.qq.com/s?__biz=MzA5OTAyNzQ2OA==&mid=2649693848&idx=1&sn=4e9ef7e2a9d41b39985899b6ad146298&chksm=889321fbbfe4a8ed58d09e6bcf2f9c2603859c331489c0a8a56b8050e601438415b1398fc1f6&mpshare=1&scene=1&srcid=0419cxIPfJ

如何把MyEclipse中的web项目导入到Eclipse中运行

有时我们需要将MyEclipse中的项目导入到Eclipse中运行,如果不注意到一些细节,会造成无法运行的后果.下面就说说具体操作: 如何导入到Eclipse就不在重述了,导入后出现如下错误: 与上面Eclipse生成的web项目对比发现少了Deployment Descriptor:......这个项,因此我们要把它添加进来,如何添加?首先我们选定刚导入的项目右键打开其属性properties,选定Project Facets,点击Convert to faceted form...,进去后勾