构建API与mysql互连
5.Mysql EF Core 快速构建API
-
新建一个空的webapi项目
-
引入依赖Mysql.entityframeworkcore
-
创建AppUser实体
-
创建UserContext类:DbContext
-
添加依赖注入
services.AddDbContext<UserContext>(options => { options.UseMySQL(Configuration.GetConnectionString("MysqlUser")); });
-
在appsettings.json中添加ConnectStrings
"ConnectionStrings": { "MysqlUser": "server=127.0.0.1;port=3306;database=beta_user;userid=root;password=123456" }
-
添加管道
InitUserDataBase(app);//管道添加到UseEndpoint前面 public void InitUserDataBase(IApplicationBuilder app) { using (var scope=app.ApplicationServices.CreateScope()) { var userContext = scope.ServiceProvider.GetRequiredService<UserContext>(); userContext.Database.Migrate(); if (!userContext.Users.Any()) { userContext.Users.Add(new Model.AppUser { Name="jesse"}); userContext.SaveChanges(); } } }
-
在程序包管理器控制台执行
$ add-migration init $ Microsoft.EntityFrameworkCore.Tools #安装工具
-
运行程序。执行成功以后可以在mysql中看到对应的数据库和数据库表
-
添加controller
[ApiController] [Route("api/[controller]")] public class ValueController : Controller { private UserContext _userContext; public ValueController(UserContext userContext) { _userContext = userContext; } [HttpGet] public async Task<IActionResult> Get() { return Json(await _userContext.Users.SingleOrDefaultAsync(u => u.Name == "jesse")); } }
-
新建Dockerfile文件
FROM mcr.microsoft.com/dotnet/sdk:3.1 as build-env
WORKDIR /code
COPY *.csproj /code/
RUN dotnet restore
COPY . /code/
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet:3.1
WORKDIR /app
COPY --from=build-env /code/out /app/
EXPOSE 5001
ENTRYPOINT ["dotnet","User.API.dll"]
-
启动文件中指明运行时url
webBuilder.UseUrls("http://*:5001");
修改ConnectionStrings
"ConnectionStrings": { "MysqlUser": "server=db;port=3306;database=beta_user;userid=root;password=123456" }
13.构建镜像并以link方式互联
$ docker build -t api:dev .
$ docker run -d api:dev
$ docker run -d -p 5001:5001 --name mywebapi --link mysql01:db api:dev # --link链接到mysql01:db(别名)
$ docker run -d -p 5011:5001 --name myapi1130_1 --link mysql01 api1130 #--link链接到mysql01:db(别名)
- docker容器中没有ifconfig或ping命令
#使用命令:
$ apt-get update
$ apt install net-tools
$ apt install iputil-ping
$ apt install iputils-ping(通过该命令安装)
- 在运行的容器内ping db
- Docker NetWork
Bridge:单台
桥接:网桥就有桥接作用,简单的说就是通过网桥可以把两个不同的物理局域网连接起来
#创建network
$ docker network create -d bridge mybridge
$ docker network ls
#桥接
$ docker run -d -p 8001:80 --net mybridge --name aspnetcore api:dev
#链接后容器可以通信
$ docker network connect mybridge mysql01
#获取镜像的原数据
$ docker inspect mysql01
$ docker rename mysql01 db