.NetCoreApiコンテナとコンテナのMySQLインターネット

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プロジェクト

画像-20200105103151900

第二に、インストールドライブのmysqlの

MySql.Data.EntityFrameworkCore 8.0.18接続.netCore3.0がバグ、不具合は、DB移行を行うため。Pomelo.EntityFrameworkCore.MySqlドライブのために使用。

Microsoft.EntityFrameworkCore.tools。

画像-20200105103321440

第三に、新しいモデルは、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、アップデート・データベースを実行

画像-20200105105337799

六、追加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);
        }
    }

}

八、プロジェクトを開始するために、テスト接続が成功します

画像-20200105110437253

九、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

画像-20200105111250017

図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

画像-20200105113954007

docker inspect mysql01

画像-20200105114103427

15、ブラウザのアクセスはlocalhost:8084 /ユーザー/取得します。

画像-20200105113559841

netcoreapi接続のMysql成功にドッカ

おすすめ

転載: www.cnblogs.com/roluodev/p/12151887.html