系列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 ...
随机推荐
- sqli lab 1-4
less-1 爆库 id=1222' union select 1,group_concat(schema_name),database() from information_schema.schem ...
- python-trade
https://tool.lu/pyc/在线反编译pyc import base64 correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt' flag = base64.b6 ...
- apache虚拟主机配置-域名/IP和端口两种配置
由于百度上有非常详细的资料,我这里就转载而已:https://jingyan.baidu.com/article/4f7d5712d48a191a201927e0.html
- Python学习15之python内置六大标准类型
1.六大标准类型:数值型,str,list,set,tuple,dic 2.数值型:int,float,bool,complex 3.区别: 1)数值型和str,tuple都是不可变类型 而list, ...
- Openstack Swift 创建用户和 container
openstack user create --domain default --password-prompt [用户名];openstack role add --project admin - ...
- 单源最短路问题--朴素Dijkstra & 堆优化Dijkstra
许久没有写博客,更新一下~ Dijkstra两种典型写法 1. 朴素Dijkstra 时间复杂度O(N^2) 适用:稠密图(点较少,分布密集) #include <cstdi ...
- 【小技巧】【App store切换为中文】
为什么80%的码农都做不了架构师?>>> 贡献作者 -[XJDomain]博客XJ: https://my.oschina.net/shengbingli/blogGitHub ...
- Netty随记之ChannelInboundHandlerAdapter、SimpleChannelInboundHandler
ChannelInboundHandlerAdapter ChannelInboundHandlerAdapter是ChannelInboundHandler的一个简单实现,默认情况下不会做任何处理, ...
- 《高性能Linux服务器构建实战》——第1章轻量级HTTP服务器Nginx
第1章 轻量级HTTP服务器Nginx本章主要介绍Nginx的配置管理和使用.作为一个轻量级的HTTP服务器,Nginx与Apache相比有以下优势:在性能上,它占用很少的系统资源,能支持更多的并发连 ...
- Java 类类型之 String 类型
类类型 引用数据类型存的都是地址,通过地址指向对象: 基本数据类型存的都是具体值: 字符串 (String) 类型 特点: 1.字符创都是对象: 2.一旦初始化,不能被更改,字符串缓冲区支持可变的字符 ...