本文创建一个简单的 .net core webapi 项目,并通过 Docker 运行起来。涉及到 Dockerfile 编写,生成镜像,并运行镜像到容器里。

1. 创建 .net core webapi 项目

创建基于 .net core 2.0 的 webapi 项目,命名为 GetMachNameWebAPI。

并修改 ValuesController 的 Get() 方法返回当前机器的机器名或其他操作。

// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { Environment.MachineName, Environment.OSVersion.Platform.ToString() };
}

2. 编译应用

在项目根目录使用 dotnet publish 命令发布应用程序,发布后的资源被保存在目录

\bin\Debug\netcoreapp2.0\publish 下面。

3. 创建 Dockerfile 文件

在publish里目录里面新建一个Dockerfile文件(文件名就是Dokerfile,没有扩展名),并在该文件中定义如下的内容:

# 基于microsoft/aspnetcore:2.0构建Docker Image
FROM microsoft/aspnetcore:2.0 # 设置工作路径
WORKDIR /app # 将当前文件夹下的所有文件全部复制到工作目录
COPY *.* ./ # 配置环境变量ASPNETCORE_URLS
ENV ASPNETCORE_URLS http://0.0.0.0:5000 # 暴露5000端口
EXPOSE 5000 # 执行dotnet GetMachNameWebAPI.dll命令
CMD ["dotnet", "GetMachNameWebAPI.dll"]

FROM:第一个指令必须为 FROM。 此指令用于初始化新的生成阶段,并为剩余指令设置基础映像。可使用多个FROM为多个映像。

WORKDIR:为剩余的任意 RUN、CMD、ENTRYPOINT、COPY 和 ADD Dockerfile 指令设置工作目录。 如果不存在,则会创建该目录。

COPY:从源路径复制新文件或目录,并将它们添加到目标容器文件系统。

ENV:用来在镜像构建过程中设置环境变量。

RUN:在当前映像之上的一个新层中执行任何命令,并提交结果。

ENTRYPOINT:支持以可执行文件的形式运行容器。每个Dockerfile中只能有一个 ENTRYPOINT ,当指定多个时,只有最后一个起效。

详细请参考官网Dockerfile reference文档

注意ASPNETCORE_URLS的配置可以直接在代码里面Program的Main方法里指定,比如:

.UseUrls("http://localhost:5001")

也可以如本文通过环境变量配置。可参看.Net Core 修改默认的启动端口

4. 上传文件到服务器

通过WinSCP类似的软件,将该目录下的全部内容复制到Ubuntu机器上。

5. 生成Docker Image

在 Dockerfile 文件同目录下执行以下命令,创建Docker Image。千万别省略了最后一个点号,它表示采用当前路径的Dockerfile来生成Docker Image。

docker build -t getmachinewebapi:v0.1 .

在这条命令中:

-t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest。

最后的那个点表示 Dockerfile 文件所在的路径,上例是当前路径,所以是一个点。

详细请参考官网docker build文档

6. 在Docker Container中运行 Web API应用

现在,我们就可以使用docker run来执行刚才产生的Docker Image了。docker run会把Docker Image加载到Docker Container中,然后执行由Dockerfile指定的命令(也就是dotnet DockerWebAPI.dll命令)。docker run的命令如下

docker run -it -p 8080:5000 getmachinewebapi:v0.1

在这条命令中:

-it参数:表示需要提供一个模拟的shell环境,并要求有用户交互功能,这样在本机窗口输入的命令,就会传入容器。

-p 8080:5000参数:表示需要将Docker Container的5000端口映射到主机环境的8080端口,也就是客户端可以直接通过8080端口访问我们的应用程序。

getmachinewebapi:v0.1参数:image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)。

详细请参考官网docker run文档

7. 测试

在Linux主机里面通过curl测试:

curl http://localhost:8080/api/values && echo

或者在另外一台机器访问地址 例如http://192.168.174.135:8080/api/values

源代码

参考

发布 .Net Core WebAPI 应用程序到 Docker的更多相关文章

  1. 将 ASP.Net Core WebApi 应用打包至 Docker 镜像

    将 ASP.Net Core WebApi 应用打包至 Docker 镜像 运行环境为 Windows 10 专业版 21H1, Docker Desktop 3.6.0(67351),Docker ...

  2. 【免费视频】使用VS Code开发ASP.NET Core WebAPI应用程序

    1.使用VS Code开发ASP.NET Core WebAPI应用程序 1.使用Visual Studio Code开发Asp.Net Core基础入门实战 毕竟从.net过度过来的我们已经习惯了使 ...

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

     PostgreSQL是一个功能强大的开源数据库系统.它支持了大多数的SQL:2008标准的数据类型,包括整型.数值值.布尔型.字节型.字符型.日期型.时间间隔型和时间型,它也支持存储二进制的大对像, ...

  4. 在CentOS 7服务器中使用Jexus发布.net core webapi

    环境: 服务器:CentOS 7 64位 .net core 2.1 Jexus独立版 官网:https://www.jexus.org/ 按照官网安装独立版命令:curl https://jexus ...

  5. Windows系统下使用Jenkins 自动发布 .NET core到Linux平台下Docker

    准备工作(安装过程可以百度,已安装的可以跳过) a)     安装Jenkins,安装包下载地址:http://mirrors.tuna.tsinghua.edu.cn/jenkins/windows ...

  6. asp.net core webapi 使用ef 对mysql进行增删改查,并生成Docker镜像构建容器运行

    1.构建运行mysql容器,添加数据库user 参考Docker创建运行多个mysql容器,地址 http://www.cnblogs.com/heyangyi/p/9288402.html 添加us ...

  7. 记一次使用Asp.Net Core WebApi 5.0+Dapper+Mysql+Redis+Docker的开发过程

    #前言 我可能有三年没怎么碰C#了,目前的工作是在全职搞前端,最近有时间抽空看了一下Asp.net Core,Core版本号都到了5.0了,也越来越好用了,下面将记录一下这几天以来使用Asp.Net ...

  8. 如何将dotnet core webapi发布到docker中…

    如何将dotnet core webapi发布到docker中 今天想起来撸一下docker,中途还是遇到些问题,但是这些问题都是由于路径什么的导致不正确,在这儿还是记录下操作过程,今天是基于wind ...

  9. 将 ASP.NET Core 1.0 应用作为 docker 镜像发布 (Linux版)

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

随机推荐

  1. system.data.oracleclient 需要 8.17 需要oracle客户端问题

    1.下载 2.程序引用   Oracle.DataAccess.dll  其他引用放在debug下

  2. win server 2012 R2 你需要先安装 对应于 KB2919355 的更新

    产生阻滞的问题: 你需要先安装 对应于 KB2919355 的更新 ,然后才可在 Windows 8.1 或 Windows Server 2012 R2 上安装此产品. 官方说法(这些 KB 必须按 ...

  3. sql-修改每条数据的某一个字段的值

    update B set B.maildata =(select SUBSTRING(maildata,0,3) from basedata where basedata.cid = B.cid)+( ...

  4. java随笔——HashMap与红黑树

    前言: hashmap是一种很常用的数据结构,其使用方便快捷,接下来笔者将给大家深入解析这个数据结构,让大家能在用的时候知其然,也知其所以然. 一.Map 首先,从最基本的讲起,我们先来认识一下map ...

  5. uwp获取版本信息win10 VersionInfo

    using Windows.System.Profile; Después vamos a agregar una propiedad que va a contener un mensaje con ...

  6. poj 1006 Biorhythms (中国剩余定理模板)

    http://poj.org/problem?id=1006 题目大意: 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这 ...

  7. Git 常用知识

    git 常用命令 创建并checkout分支: git checkout -b branch_name git merge 与 git rebase 的区别 git rebase 合并后将形成一条直线 ...

  8. 【OCP 12c】最新CUUG OCP-071考试题库(62题)

    62.(13-17)choose the best answer: You need to list the employees in DEPARTMENT_ID 30 in a single row ...

  9. html中设置data-*属性值 并在js中进行获取属性值

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. wamp集成多个版本php (php7.0)

    https://www.cnblogs.com/ypf5208/p/5510274.html