一.介绍

    本篇完整介绍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部署的更多相关文章

  1. Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(2)

    上一篇:Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1) 服务器版本 Ubuntu 16.04 LTS. 本 ...

  2. 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.解压后打开解决方案,解决方案目录: ...

  3. ASP.NET CORE部署到Linux

    ASP.NET CORE部署到CentOS中 在Linux上安装.NET Core 参考:https://www.microsoft.com/net/core#linuxcentos 配置Nginx ...

  4. 探索ASP.Net Core 3.0系列六:ASP.NET Core 3.0新特性启动信息中的结构化日志

    前言:在本文中,我将聊聊在ASP.NET Core 3.0中细小的变化——启动时记录消息的方式进行小的更改. 现在,ASP.NET Core不再将消息直接记录到控制台,而是正确使用了logging 基 ...

  5. Azure DevOps+Docker+Asp.NET Core 实现CI/CD(二.创建CI持续集成管道)

    前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 上一篇: Azure DevOps+Docker+Asp.N ...

  6. Docker & ASP.NET Core 教程

    第一篇:把代码连接到容器 第二篇:定制Docker镜像 第三篇:发布镜像 第四篇:容器间的连接 第五篇: Docker & ASP.NET Core (5):Docker Compose AS ...

  7. Asp.Net Core部署到Linux服务器

    从2016年7月, .NET Core1.0 正式发布开始,由于时间问题,我没怎么关注过.NET Core,最近刚抽出点时间研究了下,先讲下如何把ASP.NET Core部署到Linux上吧.这里我用 ...

  8. 探索 ASP.Net Core 3.0系列三:ASP.Net Core 3.0中的Service provider validation

    前言:在本文中,我将描述ASP.NET Core 3.0中新的“validate on build”功能. 这可以用来检测您的DI service provider是否配置错误. 具体而言,该功能可检 ...

  9. Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1)

    相关博文: Ubuntu 简单安装和配置 GitLab Ubuntu 简单安装 Docker Ubuntu Docker 简单安装 GitLab Ubuntu Docker 安装和配置 GitLab ...

随机推荐

  1. (五)PL/SQL条件控制

    简述 决策结构需要程序员指定一个或多个条件要计算,或由程序进行测试,如果条件被确定为真那么一条或多条语句被执行,如果要被执行的其它语句条件被确定为假,则选其它执行块. PL/SQL编程语言提供了以下几 ...

  2. Spring5参考指南:依赖注入

    文章目录 依赖注入 依赖注入的配置详解 depends-on lazy-init 自动装载 方法注入 依赖注入 依赖注入就是在Spring创建Bean的时候,去实例化该Bean构造函数所需的参数,或者 ...

  3. Vue Cli 3 报错:router is not defined

    报错内容: 报错原因: 代码全部放在了路由配置的main.js文件里,router没有定义,使用的时候报undefined 解决方法: 把router.beforeEach放在main.js里面

  4. centos6.X修改ssh默认端口号

    先查看下服务器端口号范围: # sysctl -a|grep ip_local_port_range net.ipv4.ip_local_port_range = 32768    61000 新ss ...

  5. App《最美诗词》开发 -- Java后端(整合框架)

    本人一直是致力于Android开发,由于我们三位Android开发者 @老蔡 @不肯过江东 打算一起开发Android App<最美诗词>,需要服务器端的接口支持,所以便兼职做起了后端的代 ...

  6. java socket实现服务端,客户端简单网络通信。Chat

    之前写的实现简单网络通信的代码,有一些严重bug.后面详细写. 根据上次的代码,主要增加了用户注册,登录页面,以及实现了实时显示当前在登录状态的人数.并解决一些上次未发现的bug.(主要功能代码参见之 ...

  7. Linux文件删除空间未释放

    当系统空间使用量过大需要清理空间或者清理某个文件时,有时会出现执行了删除命令之后磁盘空间并没有释放,很多人首次遇到该情况时会比较困惑,在考虑是不是像windows系统的回收站一样,删除只是逻辑删除到回 ...

  8. shell字符串索引

    shell中的字符串索引一会从0开始,一会从1开始,见例子: #!/bin/bash string="hello world" length=${#string} echo &qu ...

  9. 线段树 I - Transformation 加乘优先级

    I - Transformation Yuanfang is puzzled with the question below: There are n integers, a 1, a 2, …, a ...

  10. TransactionHelper

    public class TransactionHelper { public static OracleTransaction ora_Transaction = null; public stat ...