【Step By Step】将Dotnet Core部署到Docker下

一、使用.Net Core构建WebAPI并访问Docker中的Mysql数据库

这个的过程大概与我之前的文章《尝试.Net Core—使用.Net Core + Entity FrameWork Core构建WebAPI(一)》一致。

但是在我们这里,由于docker中无法部署sql server,所以我采用了Mysql数据库,顺便吐槽一下 SQL Server真的太贵了,阿里云的Mysql实例价格和SQL Server实例价格差10倍,真的好夸张。

Mysql官方的EF Core支持刚刚出来,由于文章是后续补充的,在我尝试的时候官方驱动还没有出,所以我使用的是第三方的驱动:Pomelo.EntityFrameworkCore.MySql,据说是国内一个90后的小伙儿写的,非常牛X.

引用之后,就和EF访问SQL Server没有什么区别了,但是:由于我们的Mysql实例是安装在Docker容器中的,那两个Docker容器之间怎么互相通信呢?

首先在启动API Image的时候,需要使用--link 命令,来建立API和Mysql 容器之间的访问通道,大概命令如下:

docker run -it -p 9100:9100 --name testapi --link msyqldb:msyqldb testapi

在Link的时候我们给需要连接的容器起了一个别名,这个别名就是一个主机名一样,可以直接用来访问,这个时候我们的连接字符串就类似于:

Data Source=mysqldb;port=3306;Initial Catalog=数据库名称;Integrated Security=False;Persist Security Info=False;User ID=用户名;Password=密码

这里,我们的DataSource,也就是实例的名称,就直接写主机名,也就是我们在Link的时候起的那个别名,就OK啦~只要你突破了这点,那访问基本上就没有什么问题了。

Coding 工作结束之后,发布你的API,并且最终打包成Image,启动容器,这一系列过程可以参考我的上一篇文章:《【Step By Step】将Dotnet Core部署到Docker上

二、使用.Net Core构建一个Web程序并访问Docker中的WebAPI

在Docker中的Web程序访问另外一个Docker容器中的API, 需要解决的问题如下:

1.API的路径是啥?

2.跨域问题

其中第一个问题的解决思路和我们上面连接数据库的解决思路是完全一致的,只要在Link的时候,加上别名,就可以用http://别名:端口号 来访问你的api即可。

第二个问题不仅仅是在docker中会遇到的问题,在平时我们开发Web程序时,也会遇到这样子的问题,常用的解决方案有以下几种:

A.避免用js访问API,而采用后端代码去调用,就没有跨域这一说了

B.后端API HttpHeader增加Access-Control-Allow-Origin:* Access-Control-Allow-Headers:Content-type  Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS三个选项

C.Jsonp,就是把数据当做一个js文件来加载~

这里我采用方法A来解决跨域问题(简单、暴力、最彻底):

第一步:通过Nuget引用Orion.ApiClientLight类库,这是一个封装了一系列调用api方法的类库,我们可以通过他很方便的调用API并序列化结果

第二步:在Controller中初始化APIClient对象,JsonApiClientLight apiClient = new JsonApiClientLight();

第三步:调用方法来访问API。

下面的代码是我调用一个CRUD的API来访问API的简单实现:

  public class HomeController : Controller
    {
        JsonApiClientLight apiClient = new JsonApiClientLight();

        public async Task<IActionResult> Index()
        {
            var list = await apiClient.GetAsync<List<Member>>("http://jb91api:9103/api/mermbers/mermber/list");
            return View(list.Response);
        }

        [HttpGet]
        public  IActionResult Create()
        {
            return View();
        }

        [HttpPost,ActionName("Create")]
        public async Task<IActionResult> CreatePost(CreateMember model)
        {
            if(ModelState.IsValid)
            {
                var member = await apiClient.PostAsync("http://jb91api:9103/api/mermbers/mermber/", model);
                return RedirectToAction("Index");
            }
            return View(model);
        }

        public async Task<IActionResult> Delete(int id)
        {
            if (id > 0)
            {
                await apiClient.DeleteAsync("http://jb91api:9103/api/mermbers/mermber?id=" + id.ToString());
            }
             return RedirectToAction("Index");
        }
    }
时间: 2024-10-15 11:59:45

【Step By Step】将Dotnet Core部署到Docker下的相关文章

【Step By Step】将Dotnet Core部署到Docker上

本教程的前提是,你已经在Linux服务器上已经成功的安装了Docker,我会大概介绍在此过程中用到的Docker命令,并不会介绍所有的Docker命令(因为我也不会). 一.在Docker中运行Dotnet Core Hello World 微软官方提供了已经集成好Dotnet Core运行所需环境的Docker Image,我们可以直接使用命令: docker run -it microsoft/dotnet:latest 其中 -i :表示以后台模式开始Docker Container -t

【Step By Step】将Dotnet Core部署到Docker(中)

三.在Docker中运行MySql MySQL 官方也提供了各种版本的MySQL Image来供用户使用,我们可以使用如下命令来创建并运行一个MySQL Image: docker run -it -p 3306:3306 --name mysqldb -e MYSQL_ROOT_PASSWORD=root mysql:latest 其中,-e MYSQL_ROOT_PASSWORD指定MYSQL Root用户的密码. 除此之外,可用的选项还有:MYSQL_ROOT_PASSWORD.MYSQL

dotnet Core 部署 HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效

尝试 以管理方式按顺序重新安装 确认dotnet core 版本安装没问题 其他问题参考一下她  --->      https://www.cnblogs.com/programYuan/articles/10478924.html 原文地址:https://www.cnblogs.com/0819lsl/p/11095455.html

关于.Net Core 部署在Linux下连接SqlServer数据库超时解决办法

.Net Core 在 Linux 下连接 SqlServer 需要 SqlServer2008 SP3或以上版本,或SqlServer2012,或SqlServer2014. 如果SqlServer2008低于SP3版本,会出现连接超时的问题. 解决办法: 官方下载SqlServer 2008 Sp3 补丁 https://download.microsoft.com/download/9/6/4/964BB4EC-FC28-4DA7-9295-7D4A8FDBE1A4/CHS/SQLServ

NET Core Web 应用部署到 Docker 中运行

NET Core Web 应用部署到 Docker 中运行 环境介绍 : 虚拟机:VirtualBox 5.1.6 系 统:Ubuntu 16.04.1 LTS 系统准备完成后可以使用 sudo apt-get udpate 和 sudo apt-get upgrade 对系统进行更新,然后打开https://www.microsoft.com/net/core#ubuntu 这个网址,在ubuntu系统中安装 .net core 运行环境.直接复制/粘贴给出的命令就可以了. 安装 Docker

持续交付工具ThoughtWorks Go部署step by step

持续交付工具ThoughtWorks Go部署step by step http://blogs.360.cn/360cloud/2014/05/13/%E6%8C%81%E7%BB%AD%E4%BA%A4%E4%BB%98%E5%B7%A5%E5%85%B7thoughtworks-go%E9%83%A8%E7%BD%B2step-by-step/ Posted on 2014 年 5 月 13 日 by zieckey | Leave a reply 1. ThoughtWorks  Go简

ubuntu上部署windows开发的dotnet core程序

目标:完成windows上开发的dotnet core程序部署至linux服务器上(Ubuntu 14.04) windows上开发dotnet core很简单,安装好VS2017,建立相关类型的项目进行开发即可. Linux服务器中需要做以下几个工作: 1.安装dotnet core, 运行dotnet程序必备条件. 2.安装supervisor守护进程,可以帮助你自动启动站点. 3.安装nginx做代理 1. 安装dotnet core #依次执行下面的命令,安装的版本有问题的话,按照错误提

Docker 部署Dotnet Core MVC项目

1.dotnet core创建项目 dotnet new mvc -o myweb cd myweb 然后就是业务代码的编辑,增删改查乱七八糟的需求上的东西吧,总之就是一顿coding.... dotnet publish -o ./release 项目就发布到 release文件夹了 然后为docker创建一个创建镜像的文件 也叫dockerfile  不懂的可以看下官方api 内容如下: donetcore.dockerfile FROM microsoft/dotnet RUN mkdir

边缘化搭建 DotNet Core 2.1 自动化发布和部署(下)

写在前面 本篇文章是上一篇边缘化搭建 DotNet Core 2.1 自动化发布和部署(上)的后续操作,本文主要讲解如何开启Docker Remote API,开启Remote API后的权限安全问题.配置Jenkins构建项目,并在云服务器上构建成功.废话不多说,我们一起来动手操作吧. 先决条件 1.一台Debain 9系统 x86 服务器 硬件环境:1核2G 40G硬盘. 2. x86服务器成功安装并运行Docker环境(本文不阐述安装过程,读者可查阅参考文献) 2.根据上一篇边缘化搭建 D