MySQLdocker4dotnet #3 在macOS上选择Visual Studio Code和Docker开发asp.net core和mysql应用

.net猿碰到了小鲸鱼,觉得越来越兴奋。本来.net猿只是在经过家里这田子窗看外面的社会风气,可是望着海峡彼岸的苹果园越来越旺盛,实在不想再去做壹头宅猿了。于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去探望。

.net猿上了小鲸鱼渡轮就先问了1个标题,苹果园上有能用来编写c#代码的和Visual
Studio一样强大的IDE么?那时,天空闪过一道Gamma射线,艾瑞克神说,给你贰个Visual Studio
Code,去玩吧。于是.net猿搭那小鲸鱼的快船队(Los Angeles Clippers)顺遂的到达了苹果山,伊始了她的吃苹果之旅。

… … 作者只好憋出来这么多了,还是来干货吧。


明天,我们来探视哪些在macOS上利用 Visual Studio Code 开发 Asp.net Core
应用,并运用Docker来展开付出调试和布署。在此以前在动用 Visual Studio
的时候,大家看到了能够的集成性,IDE把装有的工具链全体配备好了,你要做的只是F5就足以了,今日我们来品尝一入手工编写制定Dockerfile和Docker-Compose文件。其它,既然要开源,大家就彻底一点,此次我们不再行使sqlite只怕sql
server作为数据库,而利用开源界最流行的mysql作为大家运用的后台数据库。

准备支付条件

率先大家供给下载和设置多少个工具

1. Visual Studio Code 和 .Net Core

Visual Studio Code
是微软为普遍开发职员提供的免费开源的跨平台代码编辑器,和任何流行的代码编辑器,如:Sublime,
Atom一样,它可怜小,运转速度快,同时经过种种插件协理区别开发语言的编辑。差别的地点在于,VSC的插件不仅仅提供静态的语言高亮,自动语法检查和测试和成就功效外;还提供越来越高档的编写翻译器服务支撑,那使得VSC能够在早晚水准上代表IDE的机能,举办代码的编写翻译,调节和测试和发表操作。

MySQL 1

下载地址:https://code.visualstudio.com
(同样我们能够在群众号中输入d4dtools获取最新版本的code安装包,提供Windows/Mac/Linux差别版本)

Asp.net Core 是一个跨平台的 asp.net
开发环境,能够通过以下地点下载macOS上的安装包

MySQL 2

下载地址:http://dot.net

注:如若您前面设置过asp.net 5大概 rc版的.net
core,须求在运作以上安装命令从前先卸载,在d4dtools网盘中下载
dotnet-uninstall-pkgs.sh,运转即可。

2. Node.JS和NPM,以及 bower, gulp 和 grunt 等前端工具

Node.js是七个javascript的运转引擎,提供服务端的javascript运行能力,同时也蕴藏了npm这几个包管理器,能够用来设置
bower, glup,grunt等前端工具。

MySQL 3

下载地址:http://nodejs.org
(d4dtools中包括v4.4.7 LTS安装包的Windows和Mac版本)

设置到位后,让通过以下命令安装前端工具

npm install bower gulp grunt-cli -g

3. 安装项目模版生成工具 yeoman 和 asp.net generator

YEOMAN是用来创制项目模版的工具,用惯了Visual
Studio的开发职员一定都很喜爱新建项目标带领工具,选择自个儿要用的项目连串就能够创建出一个可运维的基本项目框架,那让运营一个门类只怕学习编制程序都变的10分不难。Yeman提供了同样的作用。

MySQL 4

运营以下命令就足以成功yeoman的装置

npm install yo -g

在yeoman中提供了差异的generator(模版生成器)来提供不相同品类的连串的转移,为了能够生成asp.net
core应用,我们需求设置aspnet generator

npm install generator-aspnet -g

安装好今后就足以创制项目了

MySQL 5

你也可以团结创办generator,参考 aspnet generator 的 github
源代码来学习。
https://github.com/omnisharp/generator-aspnet

4. Docker for Mac

与 Docker for Windows 一样,大家能够在macOS上安装Docker for
Mac来支撑Docker环境的田管。

MySQL 6

下载地址:https://www.docker.com/products/docker
(d4dtools网盘:Docker.dmg)

至此,我们的支付环境就准备实现了。

创建asp.net core webapp

应用上述那几个工具,大家就能够很顺遂的确立应用程序了

1. 开立项目模版

先是创立1个接纳目录,源代码目录

mkdir aspnet-mysql
cd aspnet-mysql
mkdir src

然后进入src目录使用yoman成立项目

cd src
yo aspnet

选择 Web Application [without Membership and
Authorization]作为项目连串,Bootstrap作为前端框架,并付诸应用名称aspnet-mysql

MySQL 7

回车后,yoman创设项目中的代码文件结构,并运营 bower install
完结所需求的javascript/css的设置

然后运转以下命令,完毕asp.net的nuget信赖包安装

cd aspnet-mysql
dotnet restore

最后,键入以下命令打开 Visual Studio Code

code .

这时,VSC会自动生成以下配置文件,用于配置VSC中的开发调试工具链

.vscode/launch.json
.vscode/task.json

于今,你就能够切换成调节和测试视图,并点击运营按钮开头调试你的施用了,你也足以在代码中安装断点,像在Visual
Studio中千篇一律进行单步调节和测试,查看变量数值的变通。

MySQL 8

2. 创制mysql容器作为支付数据库

数据库的开发一般会要求大家先安装2个数据库引擎在投机的机器上,未来使用docker,大家得以在容器中运转1个数据库引擎。那样做有举不胜举利益,1)自身的机械能够很绝望,不用顾虑各样程序之间相互冲突;2)数据库随用随开,不用的时候就闭合,不必占用能源;3)能够每趟都用干净的数据库进行调节和测试,不用顾虑恢复生机数据状态;如果需求的话,也可以把容器中的数据卷内容同步到本机上。

要如此做,首先你必要一台容器化主机,能够参照本种类第1篇
《docker4dotnet #2
容器化主机》
中的做法

这里本身动用了一台运维在地头的vmwarefusion中的docker主机

MySQL 9

先是通过以下命令将docker命令重定向到这台主机中

eval $(docker-machine env {machine-name})

运作以下命令运维一台mysql数据水库蓄水体量器,成立四个号称ef的数量,并将3306端口揭破给地点环境

docker run --name mysql-dev -e MYSQL_ROOT_PASSWORD=P2ssw0rd -e MYSQL_DATABASE=ef -p 3306:3306 -d mysql

参数表达:

  • name:
    给容器起个名字叫做mysql-dev,那样便于后面管理用,如若不给名字的话docker会给1个随意名字
  • -e: 配置容器的环境变量,那里自个儿安插了
    • MYSQL_ROOT_PASSWOMuranoD : root用户密码
    • MYSQL_DATABASE:
      新数据库名称,mysql容器会安份守己要求创立贰个ef为名称的空数据库
  • -p: 暴光端口,将3306端口暴表露来,便于管理

只要你本地没有mysql的镜像,docker会到docker
hub去下载,借使已经有了镜像那么运营真的是阿秒级的,运行实现后你就足以选用管理工科具连接到那一个容器上,那里本人用的MySQL
Workbench

MySQL 10

您能够看来 ef 数据库已经创办好了。

3. 布署asp.net应用使用mysql作为Entity Framework数据源

私下认可的asp.net 应用程序在Windows上选取sql
server只怕localdb作为数据源,在非windows系统上使用的是sqlite。那里,localdb和sqlite都只好作为开发调节和测试用途,若是急需投产就必要使用sql
server,对应到开源产品,大家得以接纳mysql作为sql
server的替代品。在上一步中大家早已配备好了用来开发的mysql服务器(容器),未来大家须求对应用程序举办配备,让Entity
Framework能够应用mysql作为数据源。

此地,我们选取的是由国内开发职员进献的开源库,github地址如下:
https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

率先在 project.json 文件的 dependencies 配置节中参与以下引述:

"Pomelo.EntityFrameworkCore.MySql": "1.0.0-prerelease-20160726"

再者加上一个nuget.config配置文件,并在当中添加Pomelo的源地址,那首假设因为那个nuget库现在还未曾正式公布,发表之后就不要进行这几个布局了

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <packageSources>
 <add key="NuGet official package source" value="https://nuget.org/api/v2/" />
 <add key="PomeloMysql" value="https://www.myget.org/F/pomelo/api/v2/"/>
 </packageSources>
</configuration>

 

下一场再次运维 dotnet restore,本次要求添加 –configfile
nuget.config那个参数确认保证dotnet restore能够正确利用nuget源

dotnet restore --configfile nuget.config

4. 添加 MVC Model到花色中

今昔大家就足以在品种中开创大家的实体类了,并且为了演示方便,笔者在还添加了一些示范数据。

代码文件 https://github.com/ups216/aspnet-mysql/blob/master/src/aspnet-mysql/Models/Blog.cs

 

下一场在starup.cs中的ConfigureServices方法中丰富注重注入代码

services.AddDbContext(options=>
 options.UseMySql(Configuration.GetConnectionString("Mysql")));

在Configure方法中调用SampleData.InitDB来制造示范数据

await SampleData.InitDB(app.ApplicationServices);

代码文件:https://github.com/ups216/aspnet-mysql/blob/master/src/aspnet-mysql/Startup.cs

在 appsetting.json 中创立名为Mysql的总是字符串

"ConnectionStrings": {
 "DefaultConnection": "Data Source=aspnetweb01.db",
 "Mysql": "Server={docker machine ip};database=ef;uid=root;pwd=P2ssw0rd;"
 }

代码文件:https://github.com/ups216/aspnet-mysql/blob/master/src/aspnet-mysql/appsettings.json

保证 uid及pwd参数与docker
run命令中的MYSQL_DATABASE,MYSQL_ROOT_PASSWORD一致
[docker machine ip]地点能够通过以下命令获取

docker-machine ip

现行反革命,再度行使VSC运行应用举行调节和测试,你能够看到在mysql中的ef数据中Blogs和Users两个表已经创办并且写入了示范数据。

MySQL 11

应用Docker打包发表应用

上述大家曾经做到了asp.net应用的创立,并且使用了八个周转在容器中的mysql实行付出调节和测试,今后大家必要将这些动用使用docker打包并运维在容器中。

1. 创建Dockerfile

行使yoman成立的运用本人就早已包括了一个Dockerfile,大家只须要进行简要修改即可
文本内容如下

FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app
RUN ["dotnet", "restore", "--configfile", "nuget.config"]
RUN ["dotnet", "build"]
EXPOSE 5000/tcp
ENTRYPOINT ["dotnet", "run", "--server.urls", "http://0.0.0.0:5000"]

代码链接:https://github.com/ups216/aspnet-mysql/blob/master/src/aspnet-mysql/Dockerfile

其一文件很简短,我们来探视它都做了些什么:

  • FROM microsoft/dotnet:latest 告诉docker
    build使用microsoft/dotnet这几个镜像的风尚版作为大家的base image
  • COPY . /app
    将本机上Dockerfile所在目录的富有文件拷贝到容器的/app目录中
  • WOLX570KDI瑞鹰 /app
    设置容器使用/app作为工作目录,那样继续的操作就都在那一个目录中展开
  • RUN dotnet restore 和 RUN dotnet build告诉docker build要执行dotnet
    restore和dotnet
    build四个指令,同时使用nuget.config作为restore的配备文件
  • EXPOSE 5000/tcp 暴露5000端口
  • ENTRYPOINT [“dotnet”, “run”, “–server.urls”,
    http://0.0.0.0:5000”\],设置容器入口为dotnet
    run命令,那一个命令将起动大家应用

2. 创设容器镜像并运营容器

今天,大家就可以运维以下命令达成容器营造了

docker build -t {image name}.

中间 {image name}
你能够随便起,笔者那里用的是ups216/aspnet-mysql,那是自作者背后要上传播docker
hub上所用的名字

MySQL 12

MySQL 13

那里在dotnet restore这一步会相比较慢,因为必要下载全部的注重包。

注:在平时开销中,你能够将先用常用包创设八个友好的base
image,替换Dockerfile中的microsoft/dotnet,那样就毫无每回都重新下载包了。

现行反革命键入docker images命令就能够看来我们新创造的image了

MySQL 14

运行

docker run --name aspnet-msyql-dev -p 5000:5000 ups216/aspnet-msyql

MySQL 15

你能够看出我们的容器以后也不利连接到了mysql容器的对外端口上了。在浏览器中输入docker主机的ip地址:伍仟端口,我们的施用就完全在容器中跑起来了。

MySQL 16

在docker ps中来看的一个容器是那样的

MySQL 17

3. 生育布局打包

以上进程中大家早就将选用铺排到了容器中,并且延续到别的八个容器中运作的mysql服务。然而,大家这么些一而再是透过mysql容器暴光给主机的端口来连接的,这样做在开发进度中会相比较便利,因为您能够容器的实用工具连接到mysql进行操作,但是即使要拓展对外透露就不是个好主意了。

与此同时,作者愿意能够将web应用和mysql容器一同计划,形成三个完整的行使安排包。那时,就需求重视docker-compose来成功了。

先是,大家成立三个用于生产环境的计划文件,appsettings.Production.json,内容如下:

{
 "ConnectionStrings": {
       "DefaultConnection": "Data Source=aspnetweb01.db",
       "Mysql": "Server=db;database=ef;uid=ef;pwd=P2ssw0rd;"
 },
 "Logging": {
      "IncludeScopes": false,
           "LogLevel": {
           "Default": "Debug",
           "System": "Information",
           "Microsoft": "Information"
           }
      }
 }

代码链接:https://github.com/ups216/aspnet-mysql/blob/master/src/aspnet-mysql/appsettings.Production.json

那边大家第二修改了Mysql的连接字符串,使用db作为数据库,并采取ef作为连接用户。

接下来,大家创建一个 docker-compose.yml 文件,内容如下:

version: '2'
 services:
   db:
     image: mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: P2ssw0rd
       MYSQL_DATABASE: ef
       MYSQL_USER: ef
       MYSQL_PASSWORD: P2ssw0rd

   web:
     build: .
     depends_on:
       - db
     links:
       - db
     ports:
       - "5000:5000"
     restart: always
     environment:
     ASPNETCORE_ENVIRONMENT: Production

里头的内容基本上能够从字面意思读懂,那里重要创设了db和web七个容器,web容器注重db容器,并经过db那个名字链接过去,同时安装asp.net
core的environment环境变量为Production。

对应以上大家在appsettings.Production.json文件中做的改动,你就足以明白大家透过Production这些环境变量配置我们的采取去到叁个号称db的mysql服务器上链接名为ef的数据库,并且利用ef作为用户名。

以往,你只须求周转以下那3个限令就能够形成那四个容器的运维了

docker-compose up

MySQL 18

上述代码都曾经发表到本身的github上,地址如下:

https://github.com/ups216/aspnet-mysql/

倘使你遵照本文的率先片段设置了具有工具,那么您应有能够直接用行docker-compose
up来运转这一个利用;以下小编录像了一段简单的摄像(3分钟)来演示那么些历程。

 

有关小说:


 

请关心微信公众号 【devopshub】,获取越来越多关于DevOps研究开发运营一体化的新闻

MySQL 19

网站地图xml地图