.net猿遇到了有点鲸鱼,觉得更为兴奋。本来.net猿只是在通过家里那么田子窗看外面的社会风气,但是看在海峡彼岸的苹果园越来越旺盛,实在不思再次失举行相同只有宅猿了。于是,.net猿决定多上有些鲸鱼的渡轮到苹果园去探望。

.net猿上了多少鲸鱼渡轮就优先咨询了一个题材,苹果园上产生能为此来编写c#代码的跟Visual
Studio一样强大的IDE么?这时,天空闪了同样鸣Gamma射线,艾瑞克神说,给您一个
Visual Studio
Code,去耍吧。于是.net猿搭就小鲸鱼的快船顺利的达了苹果山,开始了外的吃苹果之同。

… … 小编只能按出来这么多矣,还是来干货吧。


今,我们来看看如何在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的效应,进行代码的编译,调试和宣告操作。

图片 1

下载地址:https://code.visualstudio.com
(同样大家好以群众号丁输入d4dtools获取最新版本的code安装包,提供Windows/Mac/Linux不同版本)

Asp.net Core 是一个跨平台的 asp.net
开发条件,可以通过以下地方下载macOS上的装置包

图片 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等前端工具。

图片 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的开发人员一定还充分欢喜新建项目之引工具,选择好如果因此之类类别就可创造有一个但运行的核心类型框架,这被启动一个类别要学编程都换的非常容易。Yeman提供了平的功能。

图片 4

运转以下命令就可就yeoman的安装

npm install yo -g

于yeoman中提供了不同之generator(模版生成器)来提供不同档次的花色之变动,为了能生成asp.net
core应用,我们需要设置aspnet generator

npm install generator-aspnet -g

设置好之后便足以创建项目了

图片 5

君呢得以团结创立generator,参考 aspnet generator 的 github
源代码来读书。
https://github.com/omnisharp/generator-aspnet

4. Docker for Mac

和 Docker for Windows 一样,我们得以以macOS上安Docker for
Mac来支撑Docker环境的管制。

图片 6

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

由来,我们的开销环境就是准备了了。

创建asp.net core webapp

行使上述这些工具,我们即便得生顺利的成立应用程序了

1. 开立项目模版

第一创建一个使目录,源代码目录

mkdir aspnet-mysql
cd aspnet-mysql
mkdir src

然后上src目录使用yoman创建项目

cd src
yo aspnet

选择 Web Application [without Membership and
Authorization]当项目类别,Bootstrap作为前端框架,并受出下名称aspnet-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中相同进行单步调试,查看变量数值的扭转。

图片 8

2. 创立mysql容器作为开发数据库

数据库的开一般会要求我们先安装一个数据库引擎在祥和之机及,现在采取docker,我们得以当容器中运作一个数据库引擎。这样做有多益处,1)自己之机械可以死彻底,不用担心各种程序中互相冲突;2)数据库随用随开,不用的时节即便关,不必占用资源;3)可以每次都因此干净的数据库进行调节,不用顾虑恢复数据状态;如果需要的话,也可以把容器中之多少卷内容同步到本机上。

假如这样做,首先你需要一致玉容器化主机,可以参考照系列第二篇
《docker4dotnet #2
容器化主机》遭遇的做法

此间自己以了千篇一律宝运行于地面的vmwarefusion中之docker主机

图片 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会给一个自由名字
  • -e: 配置容器的环境变量,这里自己安排了
    • MYSQL_ROOT_PASSWORD : root用户密码
    • MYSQL_DATABASE:
      新数据库名称,mysql容器会按部就班要求创建一个ef为名称的空数据库
  • -p: 暴露端口,将3306端口暴露出,便于管理

倘您本地没有mysql的镜像,docker会到docker
hub去下载,如果就发出矣镜像那么启动真的是毫秒级的,启动完成后而就可采用管理工具连接至是容器上,这里自己之所以之MySQL
Workbench

图片 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两单说明已创办而写副了演示数据。

图片 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目录中
  • WORKDIR /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上所用的名字

图片 12

图片 13

这边当dotnet restore这同一步会比慢,因为用下载所有的依赖包。

横流:在普通支付被,你可以以先用时因此包创建一个要好的base
image,替换Dockerfile中之microsoft/dotnet,这样虽毫无每次都又生充斥包了。

现键入docker images命令就可以看到我们新创的image了

图片 14

运行

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

图片 15

卿可以看我们的器皿现在为不错连接至了mysql容器的对外端口上了。在浏览器被输入docker主机的ip地址:5000端口,我们的下就是了在容器中走起了。

图片 16

于docker ps中视底2只容器是这么的

图片 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作为用户称。

现今,你只需要周转以下就一个指令就得就这简单单容器的开行了

docker-compose up

图片 18

以上代码都已发表到我的github上,地址如下:

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

倘您本本文的第一片段装置了具备工具,那么您应该好直接用行docker-compose
up来启动这个动用;以下我录制了一致段落简单的视频(3分钟)来演示这个进程。

 

系文章:

  • docker4dotnet #1 前世今生 &
    世界而好
  • docker4dotnet #2
    容器化主机
  • docker –
    你该亮的10项事

 

求关注微信公众号 【devopshub】,获取更多关于DevOps研发运维一体化的消息

图片 19

相关文章

网站地图xml地图