发布 .Net Core WebAPI 应用程序到 Docker
本文创建一个简单的 .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
源代码
参考
- 在docker中运行ASP.NET Core Web API应用程序
- Building Docker Images for .NET Core Applications
- ASP.NET Core Docker Sample
发布 .Net Core WebAPI 应用程序到 Docker的更多相关文章
- 将 ASP.Net Core WebApi 应用打包至 Docker 镜像
将 ASP.Net Core WebApi 应用打包至 Docker 镜像 运行环境为 Windows 10 专业版 21H1, Docker Desktop 3.6.0(67351),Docker ...
- 【免费视频】使用VS Code开发ASP.NET Core WebAPI应用程序
1.使用VS Code开发ASP.NET Core WebAPI应用程序 1.使用Visual Studio Code开发Asp.Net Core基础入门实战 毕竟从.net过度过来的我们已经习惯了使 ...
- Asp.Net Core WebAPI+PostgreSQL部署在Docker中
PostgreSQL是一个功能强大的开源数据库系统.它支持了大多数的SQL:2008标准的数据类型,包括整型.数值值.布尔型.字节型.字符型.日期型.时间间隔型和时间型,它也支持存储二进制的大对像, ...
- 在CentOS 7服务器中使用Jexus发布.net core webapi
环境: 服务器:CentOS 7 64位 .net core 2.1 Jexus独立版 官网:https://www.jexus.org/ 按照官网安装独立版命令:curl https://jexus ...
- Windows系统下使用Jenkins 自动发布 .NET core到Linux平台下Docker
准备工作(安装过程可以百度,已安装的可以跳过) a) 安装Jenkins,安装包下载地址:http://mirrors.tuna.tsinghua.edu.cn/jenkins/windows ...
- asp.net core webapi 使用ef 对mysql进行增删改查,并生成Docker镜像构建容器运行
1.构建运行mysql容器,添加数据库user 参考Docker创建运行多个mysql容器,地址 http://www.cnblogs.com/heyangyi/p/9288402.html 添加us ...
- 记一次使用Asp.Net Core WebApi 5.0+Dapper+Mysql+Redis+Docker的开发过程
#前言 我可能有三年没怎么碰C#了,目前的工作是在全职搞前端,最近有时间抽空看了一下Asp.net Core,Core版本号都到了5.0了,也越来越好用了,下面将记录一下这几天以来使用Asp.Net ...
- 如何将dotnet core webapi发布到docker中…
如何将dotnet core webapi发布到docker中 今天想起来撸一下docker,中途还是遇到些问题,但是这些问题都是由于路径什么的导致不正确,在这儿还是记录下操作过程,今天是基于wind ...
- 将 ASP.NET Core 1.0 应用作为 docker 镜像发布 (Linux版)
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
随机推荐
- 基于微软XAML技术的前端开发方法
使用XAML技术的平台目前包括WPF,Silverlight,Windows8等平台,未来的Windows10统一Windows App也使用XAML技术. 前端开发指通过可视化集成开发环境进行用户界 ...
- mybatis 使用tips - 使用多个参数
执行如下命令: mvn -Dmybatis.generator.overwrite=true mybatis-generator:generate 可以使用mybatis generator myba ...
- Bootstrap模态框modal的高度和宽度设置
(1)高度 将style=“height:900px”放在<div class = "modal-dialog">或者更外层上,整个模态框的高度不会发生变化 如下图所示 ...
- java的一些命名规范吧
注意事项: 1.由于Java是面向对象编程的,所以在命名的时候尽量选择名词. 2.(Camel-Case)驼峰命名法:当变量名或函式名是由一个或多个单字连结在一起,而构成的唯一识别字时,首字母以小写开 ...
- C#之通过图片地址下载图片
因为项目上需要加载在线卫星云图,因此写了这个功能来把卫星云图下载的本地,在这里记录一下: string imageUrl=“http://image.nmc.cn/product/2018/08/06 ...
- UVA 11426 GCD - Extreme (II)(欧拉函数打表 + 规律)
Given the value of N, you will have to find the value of G. The definition of G is given below:Here ...
- ie兼容placeholder效果
转载:http://www.jb51.net/article/56244.htm placeholder是HTML5<input>的属性之一,在不同的浏览器( 支持HTML5的现代浏览器 ...
- mysql--MySQL数据库的简单认识
一.MySQL介绍 1.mysql版本 双授权版本:社区版(完全免费,功能也够nb了)和商业版(更好,功能更多更强大一些,但是收费,VIP,有售后服务,也会参考和吸收社区版的一些nb的功能,安全性和稳 ...
- 浅析group by,having count()
SELECT COUNT(*) FROM (SELECT COUNT(id),order_type,city_id,category_id,major_category_id,puid,user_id ...
- linux系统解决boot空间不足
有时候更新Linux系统是会碰到boot空间不足的错误,原因基本上是安装时boot空间设置问题可以通过删除旧的内核来释放boot空间. ubuntu: 1.查看当前使用内核版本号 unam ...