Docker打包 Asp.Net Core应用,在CentOS上运行

本文主要介绍下运用docker虚拟技术打包Asp.net core应用。 Docker作为一个开源的应用容器引擎,近几年得到广泛的应用,使用Docker我们可以轻松实现应用的持续集成部署,一次打包,到处运行。

开篇借用百科上对docker的介绍。

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

方便大家学习:

http://www.docker.org.cn/(中文站)

https://www.docker.com/(英文站)

docker镜像站:https://hub.docker.com/

【搭建环境】

系统:CentOS 7.0    容器:Docker 1.12.6          .Net Core版本: .NET Core 1.1

工具:putty、winScp

一、首先,我们先介绍下关于docker容器的安装。

直接用黄狗安装工具安装docker。

 #安装Docker
$ yum install docker
$ #启动docker服务
$ systemctl  start docker.service
$ #配置开机启动
$ systemctl  enable docker.service

 

安装并成功启动docker服务后,可以通过以下命令查看docker版本信息

docker version
Client:
 Version:         1.12.6
 API version:     1.24
 Package version: docker-1.12.6-32.git88a4867.el7.centos.x86_64
 Go version:      go1.7.4
 Git commit:      88a4867/1.12.6
 Built:           Mon Jul  3 16:02:02 2017
 OS/Arch:         linux/amd64

Server:
 Version:         1.12.6
 API version:     1.24
 Package version: docker-1.12.6-32.git88a4867.el7.centos.x86_64
 Go version:      go1.7.4
 Git commit:      88a4867/1.12.6
 Built:           Mon Jul  3 16:02:02 2017
 OS/Arch:         linux/amd64

  

docker客户端、服务端版本信息都展示出来了。

二、安装Docker加速器。

 我目前使用的阿里开发者提供的docker加速服务。

有阿里云账号直接登录,https://dev.aliyun.com/search.html

如何使用Docker加速器

针对Docker客户端版本大于1.10的用户

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF‘
{
  "registry-mirrors": ["https://ihllojuv.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

为什么要安装Docker加速器?

摘自网友的话:众所周知的原因,要想流畅地使用Docker,需要配置Docker加速器,否则你会觉得回到了拨号上网的时代 。

三、发布Asp.Net Core程序。

我这里是新建了也给Asp.Net Core web程序。

红色圈住部分,是后来手动添加进去的,dockerfile是你的应用部署到docker上所必须的配置信息,只是个不带扩展名的纯文本文件而已。hosting.json需要是配置服务启动时,监听信息。使用配置文件,需要手动修改Program.cs中的入口程序。

/// <summary>
        ///
        /// </summary>
        /// <param name="args"></param>
        public static void Main(string[] args)
        {
            //实例化一个配置生成器
            var config = new ConfigurationBuilder()
          .SetBasePath(Directory.GetCurrentDirectory())
          .AddJsonFile("hosting.json", optional: true)//添加配置文件hosting.json
          .Build();

            var host = new WebHostBuilder()
                .UseKestrel()
                .UseConfiguration(config)//使用配置信息
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .UseApplicationInsights()
                .Build();

            host.Run();
        }

完成以上操作后,我们发布这个demo程序,解决方案,右键发布。

发布成功后,默认在bin/release/publishOutPut文件夹下。

然后,我把publishOutPut重命名为publish后,通过WinScp工具把文件传到root/docker/下。

另外,我们在网站根目录下,创建的Dockerfile文件,排上用场了,我们编辑修改文件。

FROM microsoft/aspnetcore:1.1
COPY . /publish
WORKDIR /publish
EXPOSE 80
CMD ["dotnet", "demo.dll"]

 指定容器对外暴露端口80。注意,COPY .后面有空格,表示是当前位置,意思是从当前位置复制文件到/publish目录下。网上有篇博客,少了个.,导致copy requires at least one argument这样的错误。

四、打包镜像

首先,我们进入/docker/publish目录

执行以下命令:

docker build -t demo-netcore .

  

意思是生成一个名为demo-netcore的镜像。(注意:最后空格后面有一个.)。

这个命令会,根据当前目录下dockerfile配置文件,进行打包。

[[email protected] publish]# docker build -t demo-netcore .
Sending build context to Docker daemon 17.84 MB
Step 1 : FROM microsoft/aspnetcore:1.1
 ---> 983c2fe9cbef
Step 2 : COPY . /publish
 ---> ae9533f162da
Removing intermediate container d8bdd1cb7061
Step 3 : WORKDIR /publish
 ---> Running in 06a5fbef40ea
 ---> c63de53ebe20
Removing intermediate container 06a5fbef40ea
Step 4 : EXPOSE 80
 ---> Running in 8d0eaa657905
 ---> 228e30d1bf74
Removing intermediate container 8d0eaa657905
Step 5 : EXPOSE 8080
 ---> Running in a38fd6c59d4a
 ---> ab126ceac6ae
Removing intermediate container a38fd6c59d4a
Step 6 : CMD dotnet demo.dll
 ---> Running in 7dc71cdf0f87
 ---> 96ef55dd9fc9
Removing intermediate container 7dc71cdf0f87
Successfully built 96ef55dd9fc9

打包成功。

接下来,看看我们打包好的镜像。

[[email protected] publish]# docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED              SIZE
demo-netcore                     latest              96ef55dd9fc9        About a minute ago   322.8 MB
docker.io/microsoft/aspnetcore   1.1                 983c2fe9cbef        23 hours ago         305.1 MB
[[email protected] publish]#

因为,刚打包的镜像demo-netcore是基于docker.io/microsoft/aspnetcore镜像的,所以在打包demo-netcore的过程中,会优先从镜像库中拉取docker.io/microsoft/aspnetcore镜像。至此,我们的第一个docker镜像就打包成功了。接下来,在容器中运行镜像。

五、运行docker容器

docker run --name demo  -p 8080:80 demo-netcore:late

其中,demo是制定容器的名称,-p是进行宿主和容器之间端口的映射,(-p 宿主端口:容器端口),

执行完以上命令后,正常情况下,会出现如下内容:

Hosting environment: Production
Content root path: /publish
Now listening on: http://+:80
Application started. Press Ctrl+C to shut down.

  这表明,你的asp.net core程序已经成功在docker容器中运行,监听端口为80。这个80指的是容器的端口,以上信息都是在容器中执行的结果输出。它会提示,按Ctrl+C终止当前应用程序。如果在执行docker run的时候,加上 -d命令,这样容器就会一直运行,即使关掉终端窗口。于是,我们想让docker程序一直运行,以上命令可以修改为:

docker run --name demo -d -p 808

  检验docker容器是否运行成功,执行如下命令:

[[email protected] ~]# docker ps
CONTAINER ID        IMAGE                 COMMAND             CREATED                                                      STATUS              PORTS                            NAMES
1abf4952db5b        demo-netcore:latest   "dotnet demo.dll"   About a minute ago

  

以上信息可以看到,容器ID,容器名称,命令,镜像名称,

由于,我再dockerfier文件中,配置宿主的端口为8080,那么我们访问容器中的asp.net core程序时,需要通过8080端口访问,完成以上步骤,接下来让我们看下结果吧!浏览器打开http://localhost:8080或者执行

wget http://localhost:8080

  

第一个asp.net core docker应用运行起来了!

以下,是在本次操作中,常用的几个docker命令。

#生成镜像
docker build -t demo-netcore .

#运行容器
docker run --name demo  -p 8080:80 demo-netcore:latest

#删除所有容器进程
docker rm $(docker ps -a -q)

#删除一个镜像
docker rmi 镜像ID

#查看所有镜像
docker images

  关于怎样把本地镜像推送到hub.docker.com,请访问我的另一篇博客《推送docker 镜像到hub.docker.com》

时间: 2024-11-05 11:55:39

Docker打包 Asp.Net Core应用,在CentOS上运行的相关文章

Visual Studio Code和Docker开发asp.net core和mysql应用

Visual Studio Code和Docker开发asp.net core和mysql应用 .net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对岸的苹果园越来越茂盛,实在不想再去做一只宅猿了.于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去看看. .net猿上了小鲸鱼渡轮就先问了一个问题,苹果园上有能用来编写c#代码的和Visual Studio一样强大的IDE么?这时,天空闪过一道Gamma射线,艾瑞克神说,给你一个 Visual Stud

VS code docker 调试 asp.net core

前言 .net core的诞生就是为了解决跨平台的事情的,所以.net core app运行在linux.macOS.docker上也不是什么新鲜事了. 相信已经有不少.net core的项目已经部署在docker或者linux的环境下.但是一般的开发人员的开发环境不会是Ubuntu.redhat什么的,既然开发环境和部署环境的区别比较大,我们总希望在开发调试的时候,能更加贴近实际的部署环境.所以今天这篇文章说一下如何调试部署在docker的asp.net core app. 如果大家有安装VS

ASP.NET Core MVC 在linux上的创建及发布

前言 ASP.NET core转眼都发布半月多了,社区最近也是非常活跃,虽然最近从事python工作,但也一直对.NET念念不忘,看过了园区大神们搭建的Asp.net core项目之后,自己也是跃跃欲试,准备搞一下ASP.NET Core mvc的创建和部署,于是便有了这篇文章,希望能够帮助到你. 环境准备 这是我的开发环境,使用的nginx是nginx 1.6.3 直接yum install,然后需要安装dotnet环境,可以参照官网教程https://www.microsoft.com/ne

robot framework 使用五:CentOS上运行robot framework 并自动发送测试结果

操作系统版本:centos 6.0  x86_64 想要在linux上运行robot framework的测试用例,需要安装以下工具和软件: 1.安装python 2.7.6 ,首先python --version 查看系统是否装有python,并且python的版本是不是我们要用的 Python 2.6.5 说明已经装有python 2.6.5,下载python2.7.6,下载地址:https://www.python.org/download#pubkeys  选择:Python 2.7.6

Centos下使用Docker部署asp.net core项目

本文讲述 CentOS 系统 Docker 中部署 asp.net core开源项目 abp 的过程 步骤 1. 拉取 asp.net core 基础镜像 docker pull microsoft/aspnetcore 2.编写 Dockerfile 文件 FROM docker.io/microsoft/aspnetcore WORKDIR /app COPY . . ENTRYPOINT ["dotnet", "QXD.BBS.Web.Mvc.dll"] 3.

docker部署Asp.net core应用

1 容器概念 使用Docker前我们首先要简单了解一下容器的概念.MSDN上有一张虚拟机和容器的对比图,很好的展示了虚拟机和容器的区别,如下所示,虚拟机包括应用程序.必需的库或二进制文件以及完整的来宾操作系统,每台虚拟机都有一个单独的内核,我们完全可以把虚拟机看做是一台真实的物理机. 容器包括应用程序及其所有依赖项,与其他容器共享 OS 内核,容器在主机操作系统上作为独立进程运行,我们可以把容器看做是一个应用沙盒. 我们经常会遇到“我机器上可以运行”的问题吧,然后部署到其他机器时就遇到了各种坑,

Centos7 &amp; Docker &amp; Jenkins &amp; ASP.NET Core 2.0 自动化发布和部署

写在前面 Docker一直很火热,一直想把原本的Jenkins自动部署工具搬到Docker上面,无奈今年一直忙于各种事情,迟迟未实施这个事情,正好迎来了dotnet core 2.0 的正式发布,升级项目的同时,顺便直接将Jenkins搬到Docker上.为什么要写这篇文章呢?因为找过相关的资料,大多数文章都是基于Ubuntu 安装.net core 又或者 GitLab 进行持续集成 自动部署等等等,并未有人尝试过Centos7.3 上部署 Jenkins 并且 构建 ASP.NET CORE

使用docker部署Asp.net core web应用程序--图文教程

要想参考本文做实验,可以参考上一篇文章,关于docker的简单操作,写的比较详细. 拉取aspnetcore最新docker镜像 从阿里云的docker镜像拉取,因为前面我们针对docker镜像做过配置. [[email protected] ~]# docker pull microsoft/aspnetcore 根据你的网速等待拉取成功. [[email protected] ~]# docker images 执行上面的命令,如果能看到aspnetcore镜像,则表示拉取成功. 如果我们想

使用Docker部署ASP.NET Core应用程序实践

前言 最近把很火的Docker给看了,于是就磨拳擦掌要去实践一下.于是就拿之前一个aps.net core的项目(已被停止)去练手.该项目之前在ubuntu14.04上确保可以正常运行,所以docker化应该不会有太多问题.搜索了下微软提供了asp.net core的官方docker镜像,但我为了学习docker决定从linux的基础镜像开始制作docker镜像,同时为了少绕弯路,决定从确保能运行的ubuntu14.04开始. 准备 环境 OS:Ubuntu 14.04 .NET Core SD