docker 创建.netcore2.2 api容器 以及连接mysql容器
1】环境说明
操作系统:Window 10 专业版
开发工具 Vs2019专业版
Docker: Docker for Windows 
docker在windows上安装完毕之后可以看到

2】拉取mysql镜像以及创建容器
1:首先 以管理员方式打开PowerShell

docker运行成功会显示


2:拉取mysql5.7镜像 ,在powershell输入下面命令,然后回车
docker pull mysql:5.7
然后可以看到镜像

3:创建mysql容器
建议下面代码先写好,然后合并成一行,再执行
docker run
--name mysql57
-p :
-e MYSQL_USER=qy
-e MYSQL_PASSWORD=
-e MYSQL_ROOT_PASSWORD=
-d mysql:5.7
--character-set-server=utf8 --collation-server=utf8_general_ci
下面是上面代码的注释
docker run
--name mysql57 #容器名称
-p : #端口映射 前面3306是mysql的访问端口,后面是本身的访问端口 如果设置成3307: 那么数据库建立之后,通过外部(比如navicat)访问就只能通过3307访问mysql
-e MYSQL_USER=qy #创建账号
-e MYSQL_PASSWORD= #创建账号的密码
-e MYSQL_ROOT_PASSWORD= #重置root的密码
-d mysql:5.7 #镜像名称(从那个镜像上面创建容器)
--character-set-server=utf8 --collation-server=utf8_general_ci #设置utf- 这样mysql就可以加入中文字符

在STATUS中如果显示up则表示改容器正在运行,mysql容器到此一段落
3】创建api项目
1:创建项目
选择模板

勾选.netCore2.2同时选择api项目

2:nuegt包下载
由于是连接mysql 所以在nuget中安装以下包
MySql.Data.EntityFrameworkCore =》安装的是最新版本8.0.18
Microsoft.EntityFrameworkCore.Tools =》由于使用的.netCore2.2 所以安装 2.2.0


3创建一个实体 以及上下文
public class User
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Age { get; set; }
}
public class TestContext : DbContext
{
public TestContext (DbContextOptions<TestContext > options)
: base(options)
{
} public DbSet<User> User { get; set; }
}

4配置文件
appsettings.json中添加数据库连接语句[注意server后面跟的是mysql的容器名称]
"AllowedHosts": "*",
"ConnectionStrings": {
"MysqlUser": "server=mysqlTS;port=3306;database=beta_user;userid=root;password=Ee123"
}
连接好了之后。在 Startup.cs->ConfigureServices中添加以下文件[注意放在services.addMvc 的后面]

问了方便再创建的数据库中看到数据。所以在 ValuesController.cs添加以下内容 []
#region MyRegion
private TestContext _testContext; public ValuesController(TestContext estContext)
{
_testContext = estContext;
} [HttpGet]
public string Get()
{
string reMsg = "无数据"; //1先保存一个数据
int num = ;
var getall = _testContext.User.Where(c => true).OrderByDescending(c => c.Id).FirstOrDefault();
if (getall != null)
{
num = getall.Id + ;
}
_testContext.User.Add(new Models.User
{
Id = num,
Name = "测试" + num,
Age = "" + num
});
_testContext.SaveChanges(); //2获取一个数据,然后返回
if (getall != null)
{
var get = _testContext.User.SingleOrDefault(c => c.Id == );
reMsg = get.Id + get.Name;
} return (reMsg);
}
#endregion

然后打开 程序包管理器空值台 输入代码迁移数据库

在控制台输入以下代码【注意执行这段命令之前。先把 appsettings.json中连接数据库的 server=mysql 改成 server=localhost 因为mysql是项目发布到docker中使用。而localhost是在本地使用 如果这里不该。程序将连接不上数据库】
#程序包管理器控制台
Add-Migration Init/[自定义名称]
Update-Database

(update-database 代码太多,就不截全了)
执行完毕之后可以看到数据库已经生成【本地通过navicat看】

4】将创建的项目制作成镜像并且弄成容器运行
1创建dockerfile文件并且发布项目
由于使用的是vs编辑器。建议在vs上生成dockerfile
右键项目,添加docker支持。然后弹出框中选择linux。将dockerfile文件修改好之后修改属性为 【始终支持】 然后发布项目



dockerfile代码
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. #FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
#WORKDIR /app
#EXPOSE
#EXPOSE
#
#FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
#WORKDIR /src
#COPY ["dockerTs/dockerTs.csproj", "dockerTs/"]
#RUN dotnet restore "dockerTs/dockerTs.csproj"
#COPY . .
#WORKDIR "/src/dockerTs"
#RUN dotnet build "dockerTs.csproj" -c Release -o /app/build
#
#FROM build AS publish
#RUN dotnet publish "dockerTs.csproj" -c Release -o /app/publish
#
#FROM base AS final
#WORKDIR /app
#COPY --from=publish /app/publish .
#ENTRYPOINT ["dotnet", "dockerTs.dll"] FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
COPY . .
EXPOSE
EXPOSE
ENTRYPOINT ["dotnet", "WebApplication1.dll"]
项目发布注意选择 【文件夹】格式 =》注意 发布的时候 appsettings.json中连接数据库的 server=localhost 改成 server=mysql 因为mysql是项目发布到docker中使用

2将项目文件制作成镜像
打开windowsPowerShell。cd到项目的发布文件地址
然后创建镜像 运行下列代码
docker build -t dockersample .
【docker build -t 镜像名称:版本号 . 】 注意.不要漏掉了
【docker build -t 镜像名称 . 】 注意.不要漏掉了

3使用network方式创建容器连接
在docker的容器中有link和network两种方式连接。考虑到link被docker放弃。这里就使用network
3.1首先创建一个network
docker network create -d bridge Mybridge
# docker network create -d bridge 名称

3.2 network创建完毕之后。就来创建容器(发布的.netCore项目)
docker run -d -p : --net Mybridge --name dockersampleRQ dockersample
docker run -d -p 访问端口:程序设置带你看 --net network名称 --name 创建的容器名称 镜像名称
3.3network桥接mysql容器
docker network connect Mybridge mysql
docker network connect network Bridge方式创建的名称 要连接的数据库容器
3.4修改mysql名称
因为之前发布的.netCore项目中appsettings.josn中连接的名称是 mysqlTS而mysql容器的名称是mysql所以,想让程序运行。需要修改一下mysql容器名称
docker rename mysql mysqlTS docker rename mysql容器名称 修改后名称
访问8002端口就可以看见正常方位

当然不能每次都去修改容器名称
这里提供另外种方法就是通过vim去修改appsettings.josn文件
4通过vim修改appsettings.josn文件
4.1首先进入需要修改的容器
docker exec -it dockersampleRQ bash
docker exec -it 容器名称 bash

4.2安装vim
依次输入
apt-get update
回车
apt-get install -y vim
回车

vim安装完毕之后,进入appsettings.josn文件
vim appsettings.json
vim 文件名.后缀

回车之后看见页面如图

进入编辑状态需要进行以下操作
先按ESC 然后按 i
就可以进行编辑了
编辑完毕之后
先按ESC
冒号键 按 w 按 q 按 enter 键 esc :wq
保存完毕之后,看看文件修改效果

然后把项目的容器重启

打开网页查看效果

5】拓展 使用docker-compose.yml (2019-11-22更新)
上面demo中使用的就两个容器,需要一个个部署生成,然后使用network桥接。比较麻烦。所以考虑使用docker-compose.yml取代上面手写一个个生成容器的办法。
【docker-compose.yml建议使用vscode编辑器编写。】
1准备阶段
首先再docker准备需要的mysql镜像。我这里使用的是mysql5.7

创建文件docker-compose.yml 【被注释的部分是磁盘映射,就是本机物理磁盘映射到docker上的位置。但是本机再设置docker 的shared drives时候一直失败,所以先跳过。正式发布文件就删除这个】
version: '' services:
db:
image: mysql:5.7
container_name: mysqlYml
command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci
restart: always
ports:
- '3306:3306'
environment:
MYSQL_USER: qy
MYSQL_PASSWORD: Ee123
MYSQL_ROOT_PASSWORD: Ee123
# volumes:
# -/K/docker/beta/mysql-init:/docker-entrypoint-initdb.d
web:
build: .
container_name: 'aspnetcore'
ports:
- "8003:80"
depends_on:
- db

同时注意appsettings.josn的连接名也需要修改

2开始创建容器
首先cd到文件路径下

2执行
#1创建
docker-compose build
#2启动
docker-compose up

当所有执行完毕之后。查看镜像和容器

这个时候访问8003依旧无法访问。原因是项目用的是codefirs。还么有进行数据迁移。而mysql也没有数据库


3迁移数据库

通过navicat查看

最后刷新网页

6】.netCore3.1codefirst 跟新
.netCore 3.1
mysql 8.0
需要安装以下插件
Pomelo.EntityFrameworkCore.MySql
Microsoft.EntityFrameworkCore.Tools
同时注意修改appsettings.json中的数据库连接方式
"ConnectionStrings": {
"MysqlUser": "server=localhost,3306;database=core3;userid=root;password=Ee123"
}
最后注意Startup.cs =》ConfigureServices
var connection = Configuration.GetConnectionString("MysqlUser");
services.AddDbContext<MyDbContext>(options => options.UseMySql(connection));

docker 创建.netcore2.2 api容器 以及连接mysql容器的更多相关文章
- docker:从 tomcat 容器连接到 mysql 容器
docker 中的容器互联是一个较为复杂的话题,详细内容将在后续章节中介绍. 续前 2 个章节的内容,我们创建了一个 mysql 容器和一个 tomcat 容器,可以使用 「docker ps」来查看 ...
- [笔记]使用Go语言Redigo包在Docker容器内连接Redis容器的方法
Docker容器之间的连接可以带来不少方便,下面记录下如何在自己容器内通过环境变量连接与之连接的Redis容器的方法. 先起一个Redis的Docker容器,命名为 redis,再起一个自己的Dock ...
- docker部署多个mysql容器,并使用java连接
测试springboot多个数据源配置时,需要安装多个mysql容器,由于资源限制,当前只有一台虚拟机,如果在一台机器上安装多个mysql实例,是可以的,但步骤比较繁琐,使用docker来安装MySQ ...
- 使用docker创建MySQL容器,并在springboot中使用
最近在看网上找了个springboot的项目试试,在项目中需要的MySQL版本是5.7,但是本机的MySQL只有5.5.因此想着在我的服务器上跑一个MySQL:5.7的容器解决这一问题,但是在实际操作 ...
- 外部连接mysql docker容器异常
为了方便,使用python测试连接mysql容器 脚本内容非常简单 #!/usr/bin/python3 import pymysql conn=pymysql.connect(host=,passw ...
- ubuntu中使用docker部署.netcore2.1
概述 .netcore发布这么久,到现在才在项目中实际运用,之前算是了解一点,一般找工作都会问是否运用过.netcore,软件研发来说,如果这个技术没用过,觉得挺难,其实不难..netcore ...
- MacOS使用Docker创建MySQL主从数据库
一.拉取MySQL镜像 通过终端获取最新的MySQL镜像 docker pull mysql/mysql-server 二.创建MySQL数据库容器配置文件对应目录 我们在当前用户下创建一组目录,用来 ...
- MacOS使用Docker创建MySQL主主数据库
主从同步配置可以参考上一篇MacOS使用Docker创建MySQL主从数据库 一.创建MySQL数据库容器配置文件对应目录 我们在当前用户下创建一组目录,用来存放MySQL容器配置文件,(Linux下 ...
- docker mysql容器的安装使用
docker拉取镜像的命令为 docker pull image[:TAG] 如果我们想安装的mysql版本不是最新的版本,则需要填充TAG,如果不带上TAG,则默认安装的为最新版本,虽然可以通过do ...
随机推荐
- 从无到有实现搭建vue+ElementUI+less+ES6的开发环境并进行简单的开发的项目
项目简介:该项目是基于日常计算宿舍水电煤气费的需求写的,旨在从无到有实现搭建vue+ElementUI+less+ES6的开发环境并进行简单的开发,使用webpack进行代码的编译.压缩和打包,并疏通 ...
- GeoServer 发布的图层预览不了
说明: 在用Geoserver发布Postgis发布的图层后,去LayerPreview中预览,但是选openlayers时,没有跳转到预览页面,而是弹出了下载WMS. 解决方案: 用KML方式预览时 ...
- python之turtle画蚊香
原理:利用turtle绘制圆形,并使圆半径逐步增加 代码如下: import turtle turtle.pensize(30) for i in range(30): turtle.circle(i ...
- saltstack 自动化运维
salt介绍 saltstack是由thomas Hatch于2011年创建的一个开源项目,设计初衷是为了实现一个快速的远程执行系统. salt强大吗 系统管理员日常会进行大量的重复性操作,例如安装软 ...
- Linux 基本命令操作 (文件共享) 一
前言:在学习Linux过程中,遇到一些经典而又基本的命令操作,想记录下来去帮助刚学Linux的同学.下面是有关相关的操作,我会进行详细的分解步骤:希望能够帮助到你们.由于时间仓促,再加上笔者的能力有限 ...
- HDFS原理概念扫盲
1.概述 hdfs文件系统主要设计为了存储大文件的文件系统:如果有个TB级别的文件,我们该怎么存储呢?分布式文件系统未出现的时候,一个文件只能存储在个服务器上,可想而知,单个服务器根本就存储不了这么大 ...
- 解决Mybatis-plus高版本不向后兼容的问题
mybatis-plus插件后面的版本没有兼容低版本.即:不存在低版本中EntityWrapper这个类了.而该类采用数据库表真实字段名作查询条件,这样硬编码形式确实不友好,比如如果后面数据库表中字段 ...
- 第一次c语言作业。
第一次c语言作业 作业1 2.1 你对软件工程专业或者计算机科学与技术专业了解是怎样? 我认为计算机科学与技术是研究信息过程.用以表达此过程的信息结构和规则及其在信息处理系统中实现的学科.这门学科是为 ...
- 分布式主键解决方案之--Snowflake雪花算法
0--前言 对于分布式系统环境,主键ID的设计很关键,什么自增intID那些是绝对不用的,比较早的时候,大部分系统都用UUID/GUID来作为主键,优点是方便又能解决问题,缺点是插入时因为UUID/G ...
- 《手把手教你》系列练习篇之8-python+ selenium自动化测试 -压台篇(详细教程)
1. 简介 本文是练习篇的最后一篇文章,虽然练习篇的文章到此就要和大家说拜拜了,但是我们的学习之路才刚刚开始.不要停下你的脚步,大步朝前走吧!比你优秀的人还在走着,我们有什么理由停下自己的脚步了,生命 ...