构建Mysql容器

1、拉取mysql镜像

docker pull mysql/mysql-server

2、创建mysql镜像

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_ci

3、进入mysql 授权给上面用户"lzl"权限

①docker exec -it mysql01 bash

②mysql -uroot -p

③GRANT ALL PRIVILEGES ON . TO 'LZL'@'%' WITH GRANT OPTION;

构建.NetCoreApi

一、新建api项目

二、安装mysql驱动

MySql.Data.EntityFrameworkCore 8.0.18连接.netCore3.0 有Bug ,做Db迁移的时候失败.因此采用Pomelo.EntityFrameworkCore.MySql驱动。

Microsoft.EntityFrameworkCore.tools。

三、新建Model、配置DbContext

①新建文件夹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.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; }
} }

四、配置UserContext DI注入、配置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;"
}

注意:此处Server=mysql01为第一步Mysql容器的名称。在本地开发的时候可以设置为对应的Db服务器地址。

五、初始化Db

依次执行 Add-Migration IntialDb、Update-Database

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

七、新建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进入项目的dos目录、构建api镜像

docker build -t userapi:prod .

-t 镜像名称 dockerfile所在的目录

11、创建network,用于连接mysql容器和api容器

docker network create -d bridge my-network

-d 参数指定 Docker 网络类型,有 bridge overlay。其中 overlay 网络类型用于 Swarm mode

12、创建启动api容器,指定对应的network

docker run -d -p 8084:3827 --network my-net --name myuserapi userapi:prod

本机端口8084,容器监听端口3827

13、由于mysql01容器并没有加入到该网络连接,api容器依然无法访问。下面将mysql01添加到my-net中来

docker network connect my-net mysql01  #添加进网络

docker network disconnect my-net mysql01 #从网络中移除

14、查看两个容器是否在同一网段

docker inspect myuserapi

docker inspect mysql01

15、浏览器访问localhost:8084/User/Get。

docker中netcoreapi连接Mysql成功

.NetCoreApi容器与MySql容器互联的更多相关文章

  1. docker 安装tomcat容器和mysql容器

    1. docker pull mysql:5.6 2.docker run -p 3306:3306 --name mysql -v /data/mysql/conf:/etc/mysql/conf. ...

  2. docker容器互联 (.net core容器,mysql容器)

    背景 有两个容器一个运行的.net core的项目 另一个运行的mysql的数据 并且这两个容器在同一个机子上(或者局域网),那么理论上.net core的项目去访问mysql是可以走内网的 但是容器 ...

  3. asp.net core容器&mysql容器network互联 & docker compose方式编排启动多个容器

    文章简介 asp.net core webapi容器与Mysql容器互联(network方式) docker compose方式编排启动多个容器 asp.net core webapi容器与Mysql ...

  4. Java开源博客My-Blog之mysql容器重复初始化的严重bug修复过程

    写在前面的话 <Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦> <Java开源博客My-Blog之docker容器组件化修改> ...

  5. docker:从 tomcat 容器连接到 mysql 容器

    docker 中的容器互联是一个较为复杂的话题,详细内容将在后续章节中介绍. 续前 2 个章节的内容,我们创建了一个 mysql 容器和一个 tomcat 容器,可以使用 「docker ps」来查看 ...

  6. docker学习笔记4:利用docker hub上的mysql镜像创建mysql容器

    docker hub上有官方的mysql镜像,我们可以利用它来创建mysql容器,作为一个服务容器使用. 1.下载mysql镜像 docker pull mysql 2.创建镜像 docker run ...

  7. docker 容器的mysql主从复制

    一. 1.首先拉取docker镜像,我们这里使用5.7版本的mysql:   docker pull mysql:5.7 2.分别启动主从两个容器: docker run -p 3339:3306 - ...

  8. 使用docker容器运行MySQL数据库并持久化数据文件

    1.下载mysql镜像 # docker pull mysql 2.启动mysql容器 # docker run -itd -v /data:/var/lib/mysql -p 33060:3306 ...

  9. Docker搭建Mysql容器

    转载自:http://blog.csdn.net/Mungo/article/details/78521832?locationNum=9&fps=1 本文介绍如何使用docker迅速搭建My ...

随机推荐

  1. 待性能改善的一个SQL

    select t.*, t.rowid from tb_tk_datasakusei_ctrl t; alter table ATOMBB.TB_TK_JISSEKI_INFO_DETAIL add ...

  2. Android教程 -07 Activity的任务栈和启动模式

    Activity是由任务栈管理的,一般情况下一个应用程序只有一个任务栈. 什么是栈? 栈是一种常用的数据结构,栈只允许访问栈顶的元素,栈就像一个杯子,每次都只能取杯子顶上的东西 栈的特点就是先进后出, ...

  3. X-WAF 安装配置指南

    X-WAF 是一款方便易用的云WAF,使用反向代理的方式介入Web服务器和访问者之间,不需要像 modSecurity 和 Naxsin 那样作为nginx的模块,需要进行编译安装 X-WAF使用 O ...

  4. JavaScript引用类型和基本类型的区别

    JavaScript变量可以用来保存的两种类型的值:基本类型值和引用类型值. 基本类型值有5种类型:undefined,null,boolean,number,string 引用类型值有两种类型:函数 ...

  5. 从规则引擎到复杂事件处理(CEP)

    Drools Fusion既是规则引擎,又可以作为CEP.除了事件定义和时间推理之外,对于引擎本身也会有一些不同的使用.主要体现在会话时钟.流模式.滑动窗口和对事件的内存管理. 会话时钟 由于事件的时 ...

  6. js实现点击隐藏图片

    方法一: 把图片的display设为none,触发点击事件时,display变为block <style> img { width: 400px;height: 300px; displa ...

  7. PHP开源框架Laravel的安装与配置

    编将带领大家一步步在Windows 7平台下搭建该框架: 工具/原料   windows 7 Composer Laravel最新框架 方法/步骤   1 安装composer.安装之前要确保目录:w ...

  8. Redux 初始化完整结构

    文件管理 目录文档 ★★★index.js★★★ ★★★app.js★★★ ★★★store->index.js★★★ ★★★actions->index.js★★★ ★★★store-& ...

  9. HDU 1358 Period(KMP next数组运用)

    Period Problem Description For each prefix of a given string S with N characters (each character has ...

  10. 51nod 挑剔的美食家

    挑剔的美食家    基准时间限制:1 秒 空间限制:131072 KB 分值: 5 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一 ...