一.介绍

    本篇完整介绍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. <cstring>中常用的两个函数memset()和memcpy()

    <cstring>是c++对c中的<string.h>进行了重写,这两个头文件中的函数用法是一样的,所以在用的时候包含哪个头文件都行.下面介绍一下 <cstring> ...

  2. Git基本操作和使用

    基本命令: git config git init git clone git remote git fetch git commit git rebase git push 本地基本操作: git ...

  3. 2019-2020-1 20199310《Linux内核原理与分析》第七周作业

    1.问题描述 在前面的文章中,学习了系统调用system_call的处理过程,在MenuOS中运行getpid命令,通过gdb跟踪调用time函数的过程,并分析system_call代码对应的工作过程 ...

  4. BIOS和CMOS区别

    在网上看到一篇关于CMOS的文章,分享一下. 原文地址:http://jingyan.baidu.com/article/c843ea0b51155d77921e4a7a.html BIOS是什么? ...

  5. (转)对 Linux 新手非常有用的 20 个命令

    你打算从Windows换到Linux上来,还是你刚好换到Linux上来?哎哟!!!我说什么呢,是什么原因你就出现在我的世界里了.从我以往的经验来说,当我刚使用Linux,命令,终端啊什么的,吓了我一跳 ...

  6. Ali_Cloud++:阿里云服务器部署【禅道】项目管理系统

    1.开源版安装包下载 地址一:百度云下载 10.0  提取码:2dyg  地址二:官方下载 2.直接解压安装包到/opt目录下 注意:这里我安装的是Linux一键安装包官方给出的方法就是直接解压到/o ...

  7. 徐州H

    #include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=a;i<=b;++i) #defi ...

  8. CF1324 --- Maximum White Subtree

    CF1324 --- Maximum White Subtree 题干 You are given a tree consisting of \(n\) vertices. A tree is a c ...

  9. 《名侦探柯南》动画登陆bilibili

    不管你看没看过.喜不喜欢,也一定听说过<名侦探柯南>这部动画,它和<火影>.<海贼王>几部动画陪伴了一代人成长的道路,而且<名侦探柯南>还是这几部动画中 ...

  10. 《Arduino实战》——2.4 反应速度计:谁真正拥有最快的反应时间

    本节书摘来异步社区<Arduino实战>一书中的第2章,第2.4节,作者:[美]Martin Evans ,Joshua Noble ,Jordan Hochenbaum,更多章节内容可以 ...