docker4dotnet #3 在macOS上采取Visual Studio Code和Docker开发asp.net core和mysql应用。docker4dotnet #3 在macOS上应用Visual Studio Code和Docker开发asp.net core和mysql应用。

by admin on 2018年9月27日

.net猿遇到了有些鲸鱼,觉得更加兴奋。本来.net猿只是于通过家里那么田子窗看外面的社会风气,但是看正在海峡彼岸的苹果园越来越红火,实在不思量更失去举行一样才宅猿了。于是,.net猿决定多上有些鲸鱼的渡轮到苹果园去看望。

.net猿遇到了有些鲸鱼,觉得更加兴奋。本来.net猿只是于经过家里那么田子窗看外面的社会风气,但是关押正在海峡彼岸的苹果园越来越红火,实在不思量再度失开一样就宅猿了。于是,.net猿决定多上稍加鲸鱼的渡轮到苹果园去看看。

.net猿上了略微鲸鱼渡轮就优先咨询了一个题材,苹果园上起能用来编写c#代码的与Visual
Studio一样强大的IDE么?这时,天空闪了一样鸣Gamma射线,艾瑞克神说,给你一个
Visual Studio
Code,去玩吧。于是.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作为咱们采取的后台数据库。

今,我们来探望哪当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)

至今,我们的支出条件就准备结束了。

未雨绸缪出条件

首先我们需要下载和安装几独器

1. Visual Studio Code 和 .Net Core

Visual Studio Code
是微软也大面积开发人员提供的免费开源之跨平台代码编辑器,和其他流行的代码编辑器,如:Sublime,
Atom一样,它好小,运行速度快,同时通过各种插件支持不同开发语言的编制。不同的地方在,VSC的插件不仅仅提供静态的语言高亮,自动语法检测与完成功能外;还提供更为高档的编译器服务支持,这令VSC可以以肯定程度达到代表IDE的机能,进行代码的编译,调试以及披露操作。

图片 7

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

Asp.net Core 是一个跨平台的 asp.net
开发环境,可以经过以下地方下载macOS上的设置包

图片 8

下载地址: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等前端工具。

图片 9

下载地址: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提供了平的功力。

图片 10

运转以下命令就可以做到yeoman的装置

npm install yo -g

以yeoman中提供了不同的generator(模版生成器)来供不同品种的型之扭转,为了能生成asp.net
core应用,我们用设置aspnet generator

npm install generator-aspnet -g

安装好以后便足以创造项目了

图片 11

乃也可团结创造generator,参考 aspnet generator 的 github
源代码来读书。
https://github.com/omnisharp/generator-aspnet

4. Docker for Mac

与 Docker for Windows 一样,我们得在macOS上设置Docker for
Mac来支撑Docker环境的田间管理。

图片 12

下载地址: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

图片 13

回车晚,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中一致进行单步调试,查看变量数值的成形。

图片 14

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

数据库的开销一般会要求我们先行安装一个数据库引擎在温馨的机械及,现在采取docker,我们得当容器中运作一个数据库引擎。这样做生过多补,1)自己之机械可以好绝望,不用担心各种程序中互相冲突;2)数据库随用随开,不用的时段就是合,不必占用资源;3)可以每次都为此干净的数据库进行调剂,不用担心恢复数据状态;如果需要的话,也可拿容器被的数量卷内容同步到本机上。

倘如此做,首先你待一致大容器化主机,可以参考按部就班系列第二首
《docker4dotnet #2
容器化主机》遭遇的做法

此间我以了千篇一律雅运行于地面的vmwarefusion中的docker主机

图片 15

率先通过以下命令将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

图片 16

汝得看看 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两个说明就创办而写副了演示数据。

图片 17

创建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

图片 18

掉车晚,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中一致进行单步调试,查看变量数值的成形。

图片 19

2. 开立mysql容器作为支付数据库

数据库的开销一般会要求我们先行安装一个数据库引擎在友好的机械及,现在运docker,我们可当容器被运作一个数据库引擎。这样做生那么些功利,1)自己之机可以死绝望,不用担心各种程序中互相冲突;2)数据库随用随开,不用的时节就是关闭,不必占用资源;3)可以每次都用干净的数据库进行调剂,不用担心恢复数据状态;如果需要的话,也可拿容器被的数量卷内容同步到本机上。

倘若如此做,首先你用一致尊容器化主机,可以参考照系列第二首
《docker4dotnet #2
容器化主机》遭的做法

此间自己以了扳平高运行在当地的vmwarefusion中之docker主机

图片 20

先是通过以下命令将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

图片 21

而可看出 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两单说明就创造以写副了示范数据。

图片 22

采取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上所用底讳

图片 23

图片 24

此间当dotnet restore这无异步会比较缓慢,因为要下载所有的依赖包。

流淌:在通常支出被,你得拿优先用时因此包创建一个祥和之base
image,替换Dockerfile中的microsoft/dotnet,这样便无须每次都再生充斥包了。

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

图片 25

运行

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

图片 26

君得望咱们的容器现在吗不利连接到了mysql容器的对外端口上了。在浏览器被输入docker主机的ip地址:5000端口,我们的应用即了以容器被飞起了。

图片 27

当docker ps中看出的2只容器是这么的

图片 28

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

图片 29

以上代码都曾经发表暨本人的github上,地址如下:

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

使您本本文的首先有的设置了具备工具,那么你应当可以一直用行docker-compose
up来启动这个用;以下我录制了扳平截简单的视频(3分钟)来演示这个历程。

 

连带文章:

  • docker4dotnet #1 前世今生 &
    世界你好
  • docker4dotnet #2
    容器化主机
  • docker –
    你应当明白之10码事

 

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

图片 30

动用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上所用的名字

图片 31

图片 32

此处当dotnet restore这无异于步会比慢,因为待下载所有的依赖包。

流动:在日常支付中,你可用预用时因此包创建一个友好的base
image,替换Dockerfile中之microsoft/dotnet,这样即便毫无每次都重复生充斥包了。

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

图片 33

运行

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

图片 34

乃可见见我们的器皿现在呢是连接至了mysql容器的对外端口上了。在浏览器中输入docker主机的ip地址:5000端口,我们的行使就是全盘在容器中跑起了。

图片 35

每当docker ps中见到底2单容器是这么的

图片 36

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

图片 37

以上代码都已揭晓暨自之github上,地址如下:

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

一旦您仍本文的首先有的装置了装有工具,那么您应有可以直接用行docker-compose
up来启动之利用;以下我录制了同一段子简单的视频(3分钟)来演示这个历程。

 

有关文章:

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

 

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

图片 38

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图