MySQLの建物コンテナ
1、MySQLを引っ張るミラー
ドッキングウィンドウプルのmysql / mysqlのサーバ
2、ミラーリングされたMySQLを作成します
ドッキングウィンドウの実行は、-p 3306 -d:3306 -e MYSQL_USER = "lzl" -e MYSQL_PASSWORD = "パスワード" -e MYSQL_ROOT_PASSWORD = "パスワード" --name mysql01のmysql / mysqlのサーバ--character-セットサーバー= UTF8を - 照合サーバ= utf8_general_ci
3、「lzl」権限以上のユーザーにライセンスMySQLを入力します。
①docker幹部-it mysql01バッシュ
②mysql-uroot -p
③GRANTALL権限に。TO 'LZL' @ '%' GRANT OPTION付き。
.NetCoreApiの構築
まず、新しいAPIプロジェクト
第二に、インストールドライブのmysqlの
MySql.Data.EntityFrameworkCore 8.0.18接続.netCore3.0がバグ、不具合は、DB移行を行うため。Pomelo.EntityFrameworkCore.MySqlドライブのために使用。
Microsoft.EntityFrameworkCore.tools。
第三に、新しいモデルは、configure DbContext
①新規フォルダEntityes、新しいユーザー
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; }
}
}
②新規フォルダのデータ、新UserContext.cs
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; }
}
}
第四には、configure UserContext DI注入は、configure MYSQLの接続文字列
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;"
}
注:ここでのサーバ= mysql01は、最初のステップMySQLのコンテナの名前です。ローカルの開発サーバーは、アドレスに対応するDBへ設定することができた場合。
Dbを初期化V.
ターンでは、アドインの移行IntialDb、アップデート・データベースを実行
六、追加SeedData
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();
}
}
}
7つの新しいUserControllerで
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);
}
}
}
八、プロジェクトを開始するために、テスト接続が成功します
九、APIのDockerfile準備
# 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"]
10、cmdはミラーAPIを構築するプロジェクトのDOSディレクトリを入力します
docker build -t userapi:prod .
-Tディレクトリイメージ名dockerfile
図11は、ネットワークを作成し、容器のMySQLコンテナAPIを接続します
docker network create -d bridge my-network
-d
ドッカーパラメータは、ネットワークの種類を指定し、そこにありますbridge
overlay
。前記overlay
のネットワークタイプスウォームモード
図12に示すように、対応するネットワークを指定し、起動APIコンテナを作成
docker run -d -p 8084:3827 --network my-net --name myuserapi userapi:prod
ローカルポート8084、リスニングポートコンテナ3827
図13は、容器およびネットワーク接続に加えmysql01ので、APIコンテナはアクセス不能のままです。に私のネットに追加された次のmysql01
docker network connect my-net mysql01 #添加进网络
docker network disconnect my-net mysql01 #从网络中移除
同じネットワークセグメント内の2つのコンテナかどうかを確認する14。
docker inspect myuserapi
docker inspect mysql01