docker pull mysql/mysql-servermysql
docker run -d -p 3306:3306 -e MYSQL_USER="lzl" -e MYSQL_PASSWORD="password" -e MYSQL_ROOT_PASSWORD="password" --name mysql01 mysql/mysql-server --character-set-server=utf8 --collation-server=utf8_general_cigit
①docker exec -it mysql01 bashsql
②mysql -uroot -pdocker
③GRANT ALL PRIVILEGES ON . TO 'LZL'@'%' WITH GRANT OPTION;json
MySql.Data.EntityFrameworkCore 8.0.18链接.netCore3.0 有Bug ,作Db迁移的时候失败.所以采用Pomelo.EntityFrameworkCore.MySql驱动。c#
Microsoft.EntityFrameworkCore.tools。api
①新建文件夹Entityes、新建User浏览器
namespace Api.Entities { public class User { public int Id { get; set; } public string Name { get; set; } public string Company { get; set; } public string Title { get; set; } } }
②新建文件夹Data、新建UserContext.csbash
namespace Api.Data { public class UserContext:DbContext { public UserContext(DbContextOptions<UserContext> options):base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<User>() .ToTable("t_ApiUser"); } public DbSet<User> Users { get; set; } } }
public void ConfigureServices(IServiceCollection services) { services.AddDbContext<UserContext>(options => { options.UseMySql(Configuration.GetConnectionString("MySqlConString")); }); services.AddControllers(); }
"ConnectionStrings": { "MySqlConString": "Server=mysql01;database=db_appuser;userid=lzl;password=password;" }
注意:此处Server=mysql01为第一步Mysql容器的名称。在本地开发的时候能够设置为对应的Db服务器地址。服务器
依次执行 Add-Migration IntialDb、Update-Database
StartUp.cs添加如下代码初始化数据。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); InitialDataBase(app); } public void InitialDataBase(IApplicationBuilder app) { using (var scope = app.ApplicationServices.CreateScope()) { var context = scope.ServiceProvider.GetRequiredService<UserContext>(); if (!context.Users.Any()) { context.Users.Add(new User() { Company = "kingdee", Name = "LZL", Title = "2020", Id = 1 }); context.SaveChanges(); } } }
namespace Api.Controllers { [ApiController] [Route("[controller]/[action]")] public class UserController : ControllerBase { private ILogger<UserController> _logger; private UserContext _userContext; public UserController(ILogger<UserController> logger,UserContext userContext) { _logger = logger; _userContext = userContext; } [HttpGet] public async Task<IActionResult> Get() { var users = await _userContext.Users.ToListAsync(); return new JsonResult(users); } } }
# 1.指定编译和发布应用的镜像 FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build-env # 2. 指定(编译和发布)工做目录 WORKDIR /app # 3. 拷贝.csproj到工做目录/app,而后执行dotnet restore恢复全部安装的NuGet包 COPY *.csproj ./ RUN dotnet restore # 4. 拷贝当前项目目录下全部文件到工做目录(/app),而后执行dotnet publish命令将应用发布到/app/out目录下 COPY . ./ RUN dotnet publish -c Release -o out # 5. 编译生成Docker镜像 # 5.1.设置基础镜像 FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime # 5.2. 设置(运行)工做目录,并将发布文件拷贝到out子目录下 WORKDIR /app COPY --from=build-env /app/out . # 5.3. 利用环境变量设置ASP.NET Core应用的监听地址 ENV ASPNETCORE_URLS http://0.0.0.0:3827 # 5.4. 执行dotnet命令启动ASP.NET Core应用 ENTRYPOINT ["dotnet", "Api.dll"]
docker build -t userapi:prod .
-t 镜像名称 dockerfile所在的目录
docker network create -d bridge my-network
-d
参数指定 Docker 网络类型,有 bridge
overlay
。其中 overlay
网络类型用于 Swarm mode
docker run -d -p 8084:3827 --network my-net --name myuserapi userapi:prod
本机端口8084,容器监听端口3827
docker network connect my-net mysql01 #添加进网络 docker network disconnect my-net mysql01 #从网络中移除
docker inspect myuserapi
docker inspect mysql01