ASP.NET Core微服务之Docker容器化WebAPI
Tip: 此篇已加入.NET Core微服务基础系列文章索引
一、Docker极简介绍
1.1 总体介绍
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个_轻量级、可移植的容器_中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
简而言之> 容器是一个打包了应用服务的环境,它是一个轻量级的虚拟机,每一个容器由一组特定的应用和必要的依赖库组成。
Docker和传统虚拟化之间最大的区别在于:容器是在操作系统层面上实现虚拟化,即直接复用本地主机的操作系统;而传统虚拟化则是在硬件层面实现,如VMware vShpere, Xen及Citrix等。
1.2 Docker结构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系类似于面向对象编程中的对象与类。
Docker的架构如下图所示,Client 通过接口与Server进程通信实现容器的构建,运行和发布。Client和Server可以运行在同一台集群,也可以通过跨主机实现远程通信。
具体详细内容,请浏览:《几张图帮你理解Docker基本原理及快速入门》
二、Docker的安装
(1)准备一台Linux主机,这里以CentOS 7.2为例。当然,你也可以使用Windows,不过你得确保是Windows 10 pro版本及以上,且安装了Hyper-V等一系列的相关软件。
(2)安装docker
# yum install docker
(3)启动docker服务
# systemctl start docker.service
(4)配置开机启动并验证
# systemctl enable docker.service
验证:查看docker版本信息
# docker version
(5)配置docker加速器 => 原因你懂得,不设置慢死你,云服务器除外
# vim /etc/docker/daemon.json
{
"registry-mirrors": "[https://d8b3zdiw.mirror.aliyuncs.com"]
}
然后重启docker服务
# systemctl daemon-reload
# systemctl restart docker
(6)Hello World
# docker run hello-world
三、ASP.NET Core on Docker配置
(1)拉取dotnet/aspnetcore的最新镜像,这里以aspnetcore 2.0为例
# docker pull microsoft/aspnetcore:2.0
PS:如果要拉取最新版本(比如.net core 2.1),可以将版本号改为aspnetcore:latest
如果你想要拉取更多microsoft的镜像,那么搜索一下把:# docker search microsoft
拉取了不想要的镜像,那么删除一个吧,如:# docker rmi imagesID
拉取之后,验证一下是否拉取成功了:# docker images
(2)现在我们进入VS中为我们的一个ASP.NET Core WebAPI编辑一个Dockerfile
# 父镜像 FROM microsoft/aspnetcore:2.0 # 设置工作目录 WORKDIR /app # 复制发布文件到/app下 COPY . /app # 设置端口 EXPOSE 8810 # 使用dotnet Manulife.DNC.MSAD.NB.AgentService.dll来运行ASP.NET Core项目,注意大小写 ENTRYPOINT ["dotnet", "Manulife.CD.MSAD.NB.AgentService.dll", "--server.urls", "http://*:8810"]
(3)发布这个ASP.NET Core WebAPI,并将Release文件传送到Linux服务器中(你可以选择xFTP或者WinScp等工具)
(4)进入上图的AgentService目录中,开始打包docker镜像
# docker build -t agentservice-container:1.0 . => 不要忘记后面还有一个点.
此刻再次验证:# docker images
(5)万里长征最后一步:运行docker
# docker run --name agentservice -d -p 8810:8810 agentservice-container:1.0
这里的两个端口号分别是宿主机和容器的映射,前一个是你在外部访问的端口号,后一个是你要映射到docker容器中的端口号,切记和我们在Dockerfile中暴露出来的端口号保持一致。
_PS:_这里如果docker run失败后再次运行会提示名称已存在,可以使用以下命令来删除容器
# docker rm -f [dockername]
如果想要docker容器在非正常退出后自动重启,可以加上--restart选项,例如下面:
# docker run --name agentservice -d -p 8810:8810 agentservice-container:1.0 --restart=always
(6)验证docker运行效果
方式一:在宿主机验证
方式二:在远程客户端通过浏览器访问
四、Supervisor守护进程
此部分主要针对于在Linux上的dotnet core应用程序,保证程序在异常或者是电脑重启的时候仍然能够正常访问。大家可以浏览杨晓东的《ASP.NET Core Linux下为dotnet创建守护进程》以及focus-lei的《在docker上运行.net core程序》来学习,这里就不再赘述了。
参考资料
(1)菜鸟教程,《Docker教程》
(2)杨晓东,《ASP.NET Core Docker部署》,《ASP.NET Core Linux下为dotnet创建守护进程》
(3)李朝强,《Docker打包ASP.NET Core应用,在CentOS上运行》
(4)圣杰,《.NET Core容器化@Docker》
(5)focus-lei,《在Docker上运行.net core程序》
(6)Esofar,《CentOS7 部署 ASP.NET Core应用程序》
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
K8S避坑指南 - Deployment更新POD内容器无法收到SIGTERM信号
简述 容器化后,在应用发布时,某个服务重启,导致该服务调用方大量报错,直到服务重启完成。报错的内容是RPC调用失败,我们的RPC这块是有优雅关闭的,也就是说,在进程收到SIGTERM信号后,我们通过JVM的ShutdownHook机制,注册了RPC服务的反注册钩子,在进程收到SIGTERM时应用会主动从注册中心摘除自身防止调用方大量报错。但是为什么容器化后会导致这个问题呢? 问题排查 应用正常启动查看容器内进程 # yum install psmisc # pstree -p bash(1)───java(22)─┬─{java}(23) ├─{java}(24) ├─{java}(25) ├─{java}(26) ├─{java}(27) ├─{java}(28) ├─{java}(29) ├─{java}(30) ... # ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 09:50 ? 00:00:00 /bin/bash run.sh start root 22 1 15 09:50 ? 00:01:20 /app/3rd...
- 下一篇
内网穿透技术浅评
科普一下给有需要的童鞋参考。穿透原理大致分如下几类: 1、代理穿透 原理示意图: 优势: 保持100%穿透成功率 用户无需公网IP 不足: 运营方提供公网访问入口,硬件投入大 带宽要求高,免费用户往往会被限速,产生免费使用上的“鸡肋” 2、直接穿透 原理示意图: 优势: 自主可控,无需第三方转发 保持100%穿透成功率 不足: 服务端必须具备公网IP 带宽取决于服务端和客户端两者的最小带宽(面向云主机带宽不友好,主要是贵!死贵!!) 由于直接暴露在公网,会有安全问题 需要自己搭建,门槛较高 3、P2P穿透 原理示意图: 优势: 点对点,能最大化使用带宽,使用感知友好 不足: Ipv4环境下成功率取决于NAT类型,移动网络(3G/4G下)基本没戏 Ipv6环境下成功率高,取决于防火墙策略(防火墙穿透) 几乎全基于UDP协议或其衍生自定义协议,安全性和可靠性或多或少存在缺陷 4、Ssh隧道穿透: 略 常用免费工具穿透姿势: -/- 代理穿透 直接穿透 P2P穿透 自主代理 公网IP 备注 花生壳 YES NO NO NO 不需要 限速到怀疑人生 teamviewer YES NO NO N...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启