系列13 docker asp.net core部署
一.介绍
本篇完整介绍asp.net core web api如何部署到docker容器中,并通过外部访问web api服务。在编写完成dockerfile之后,可以通过docker [image] build命令来创建镜像。
基本的格式为:docker build [options] path | url | -
该命令将读取指定路径(包括子目录)的dickerfile,并将该路径下所有数据作为上下文发送给docker服务端。docker服务端在校验dockerfile格式通过后,啄条执行其中定义的指令,碰到ADD, COPY 和RUN指令会生成一层新的镜像。最终如果创建镜像成功,会返回最终镜像的ID。
1. dockerfile文件创建
创建asp.net core web api应用程序,项目名为:k8swebapi。 dockerfile如下所示:
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
WORKDIR /app
EXPOSE 5000
COPY . .
ENTRYPOINT ["dotnet", "k8swebapi.dll", "--urls", "http://*:5000;http://*:5001"]
2.上传
asp.net core web api 发布后,上传到云服务器opt目录下
[root@VM_0_12_centos opt]# ls
containerd kubectl-1.17.-.x86_64.rpm rh webapipublish
定位到webapipublish目录下,查看刚上传的web文件
[root@VM_0_12_centos opt]# cd webapipublish
[root@VM_0_12_centos webapipublish]# ls
appsettings.Development.json Microsoft.OpenApi.dll
appsettings.json Swashbuckle.AspNetCore.Swagger.dll
dll Swashbuckle.AspNetCore.SwaggerGen.dll
Dockerfile Swashbuckle.AspNetCore.SwaggerUI.dll
k8swebapi.deps.json System.Runtime.CompilerServices.Unsafe.dll
k8swebapi.dll System.Text.Encodings.Web.dll
k8swebapi.pdb System.Text.Json.dll
k8swebapi.runtimeconfig.json web.config
k8swebapi.Views.dll wwwroot
k8swebapi.Views.pdb YLYUN.Common.Dapper.dll
Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer.dll YLYUN.Common.Dapper.pdb
Microsoft.AspNetCore.Mvc.Versioning.dll YLYUN.Common.Dapper.xml
Microsoft.Bcl.AsyncInterfaces.dll
3.构建镜像
执行格式:docker build -t <要生成的镜像的名称> .
k8swebapi为镜像的名称
结尾的 . 指dockerfile路径(.是代表上下文路径,因为dockerfile就在当前目录下)
[root@VM_0_12_centos webapipublish]# docker build -t k8swebapi .
Sending build context to Docker daemon 7.513MB
Step 1/5 : FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
---> e7e3b238011c
Step 2/5 : WORKDIR /app
---> Running in f6496d30d085
Removing intermediate container f6496d30d085
---> 5657f984ae35
Step 3/5 : EXPOSE 5000
---> Running in 93c58d4b5fc1
Removing intermediate container 93c58d4b5fc1
---> 1a6657883eb9
Step 4/5 : COPY . .
---> 9badab908e55
Step 5/5 : ENTRYPOINT ["dotnet", "k8swebapi.dll", "--urls", "http://*:5000;http://*:5001"]
---> Running in 25a44038e606
Removing intermediate container 25a44038e606
---> 3068b399a9f4
Successfully built 3068b399a9f4
Successfully tagged k8swebapi:latest
构建镜像成功后,显示Successfully ,返回镜像ID 3068b399a9f4
4.创建容器并启动容器
使用docker run
-d代表是后台运行容器
--rm指定容器停止后自动删除容器, 用docker stop contriner 停止后自动删除该容器
--P(大写) 宿主主机自动分配端口并关联容器暴露的5000端口,外部使用宿主主机自动分配的端口访问web api服务
--name 容器名称
最后一个参数是镜像名称,前面的参数都是[OPTIONS] 格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
[root@VM_0_12_centos webapipublish]# docker run -d --rm -P --name k8swebapi k8swebapi
dd8b01b33183f621d98043fdddbb7fda5817d312b7943a53718d6e6b0b0b94aa
通过docker ps查看创建的容器,和宿主自动分配的端口32770。 容器内访问api服务端口5000, 容器外访问api服务端口32770
[root@VM_0_12_centos webapipublish]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd8b01b33183 k8swebapi "dotnet k8swebapi.dl…" About an hour ago Up About an hour 0.0.0.0:->/tcp k8swebapi
3ddee94cef3a ubuntu:latest "/bin/bash" days ago Up days quizzical_nash
5. 进入容器
进入k8swebapi容器,查看app目录,再请求api服务,如下所示:
[root@VM_0_12_centos webapipublish]# docker exec -it dd8b01b33183 /bin/bash
root@dd8b01b33183:/app# ls
Dockerfile System.Text.Encodings.Web.dll k8swebapi.Views.pdb
Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer.dll System.Text.Json.dll k8swebapi.deps.json
Microsoft.AspNetCore.Mvc.Versioning.dll YLYUN.Common.Dapper.dll k8swebapi.dll
Microsoft.Bcl.AsyncInterfaces.dll YLYUN.Common.Dapper.pdb k8swebapi.pdb
Microsoft.OpenApi.dll YLYUN.Common.Dapper.xml k8swebapi.runtimeconfig.json
Swashbuckle.AspNetCore.Swagger.dll appsettings.Development.json web.config
Swashbuckle.AspNetCore.SwaggerGen.dll appsettings.json wwwroot
Swashbuckle.AspNetCore.SwaggerUI.dll dll
System.Runtime.CompilerServices.Unsafe.dll k8swebapi.Views.dll
root@dd8b01b33183:/app# curl http://localhost:5000/api/v1/user/IndexList
[{"id":,"name":"张三"},{"id":,"name":"李四"}]root@dd8b01b33183:/app#
6. 外部访问
在宿主主机上访问,如下所示:
[root@VM_0_12_centos webapipublish]# curl http://localhost:32770/api/v1/user/IndexList
[{"id":,"name":"张三"},{"id":,"name":"李四"}][root@VM_0_12_centos webapipublish]#
外面通过windows系统的浏览器访问(这里的ip为服务器云网ip),如下所示:
系列13 docker asp.net core部署的更多相关文章
- Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(2)
上一篇:Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1) 服务器版本 Ubuntu 16.04 LTS. 本 ...
- ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成
ASP.NET Boilerplate 学习 1.在http://www.aspnetboilerplate.com/Templates 网站下载ABP模版 2.解压后打开解决方案,解决方案目录: ...
- ASP.NET CORE部署到Linux
ASP.NET CORE部署到CentOS中 在Linux上安装.NET Core 参考:https://www.microsoft.com/net/core#linuxcentos 配置Nginx ...
- 探索ASP.Net Core 3.0系列六:ASP.NET Core 3.0新特性启动信息中的结构化日志
前言:在本文中,我将聊聊在ASP.NET Core 3.0中细小的变化——启动时记录消息的方式进行小的更改. 现在,ASP.NET Core不再将消息直接记录到控制台,而是正确使用了logging 基 ...
- Azure DevOps+Docker+Asp.NET Core 实现CI/CD(二.创建CI持续集成管道)
前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 上一篇: Azure DevOps+Docker+Asp.N ...
- Docker & ASP.NET Core 教程
第一篇:把代码连接到容器 第二篇:定制Docker镜像 第三篇:发布镜像 第四篇:容器间的连接 第五篇: Docker & ASP.NET Core (5):Docker Compose AS ...
- Asp.Net Core部署到Linux服务器
从2016年7月, .NET Core1.0 正式发布开始,由于时间问题,我没怎么关注过.NET Core,最近刚抽出点时间研究了下,先讲下如何把ASP.NET Core部署到Linux上吧.这里我用 ...
- 探索 ASP.Net Core 3.0系列三:ASP.Net Core 3.0中的Service provider validation
前言:在本文中,我将描述ASP.NET Core 3.0中新的“validate on build”功能. 这可以用来检测您的DI service provider是否配置错误. 具体而言,该功能可检 ...
- Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1)
相关博文: Ubuntu 简单安装和配置 GitLab Ubuntu 简单安装 Docker Ubuntu Docker 简单安装 GitLab Ubuntu Docker 安装和配置 GitLab ...
随机推荐
- phpcms 用phpexcel导入导出excel
html <form method="post" action="?m=content&c=content&a=public_add_excel&q ...
- Add text to 'Ready Page' in Inno Setup
https://stackoverflow.com/questions/1218411/add-text-to-ready-page-in-inno-setup
- js 实现文字滚动功能,可更改配置参数 带完整版解析代码。
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS写文字滚动效果 需求分析: 需要 ...
- js 之 JSON详解
JSON:JavaScriptObjectNotation JSON是一种语法,用来序列化对象.数组.字符串.布尔值和null. JSON是基于JavaScript的语法,但与之不同 注意事项 JSO ...
- Java高效开发IntelliJ IDEA 2019.1 新特性
1. 重构类.文件.符号,Action 搜索 IntelliJ IDEA(以下简称 IDEA) 中的搜索可以分为以下几类 类搜索,比如 Java,Groovy,Scala 等类文件 文件搜索,类文件之 ...
- 演示:配置日志发送到syslog日志服务器
演示目标:配置网络环境中的交换机和路由器将日志发送到syslog日志服务器. 演示环境:如下图10.54所示的演示环境. 演示背景:要求部署网络中的syslog服务器,集中的收集交换机S1和路由器R1 ...
- 百度Openrasp开源的应用运行时自我保护产品,安装教程。
第一步: 下载最新版本的安装包 https://packages.baidu.com/app/openrasp/release/latest/rasp-php-linux.tar.bz2 解压到目录: ...
- 两个命令把 Vim 打造成 Python IDE
运行下面两个命令,即可把 Vim(含插件)配置成 Python IDE.目前支持 MAC 和 Ubuntu. Shell curl -O https://raw.githubusercontent ...
- spring对websocket的集成和使用
WebSocket是HTML5提出的一个用于通信的协议规范,该协议通过一个握手机制,在客户端和服务端之间建立一个类似于TCP的连接,从而方便客户端和服务端之间的通信. WebSocket协议本质上是一 ...
- Go语言入门教程系列——函数、循环与分支
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Golang专题的第四篇,这一篇文章将会介绍golang当中的函数.循环以及选择判断的具体用法. 函数 在之前的文章当中其实我们已经接 ...