asp.net core容器&mysql容器network互联 & docker compose方式编排启动多个容器
文章简介
asp.net core webapi容器与Mysql容器互联(network方式)
docker compose方式编排启动多个容器
asp.net core webapi容器与Mysql容器互联(network方式)
-- Docker的基础知识(镜像,容器,仓库等概念,还有基本命令)就不再提了,可以从github查看相关中文文档(https://github.com/yeasy/docker_practice/blob/master/SUMMARY.md)。
- 首先,我们创建一个asp.net core的webapi项目,项目中引入Mysql驱动包(Pomelo.EntityFrameworkCore.MySql)修改startup的ConfigureServices方法配置项;修改appsettings配置文件,添加数据库连接字符串(server为mysql容器的名称)。如下图所示


- 添加数据库链接上下文(ApplicationDbContext),添加一个AppUser的用户类,使用EFcore执行数据库迁移

- 从dockerhub下载mysql5.7.26的镜像文件(docker pull mysql/mysql-server:5.7.26); 运行一个docker容器实例( docker run -d --name db -p 3306:3306 -e MYSQL_ROOT_PASSWORD=pwd123456 -v /f/docker_volumn/mysql57/data:/var/lib/mysql -v /f/docker_volumn/mysql57/conf:/etc/mysql/conf.d mysql/mysql-server:5.7.26); 进入刚创建的容器(docker exec -it db bash),通过root用户登录mysql,添加一个lmc ,访问权限为%的用户(这里和我们api项目的连接字符串用户匹配,因为mysql默认root用户访问权限是localhost的)


- 现在我们在api项目中访问mysql,从user表里面查询一个用户然后返回。修改我们的Values控制器,查询一个用户。然后在我们的startup类中,程序启动时候,初始化一个用户,如下图所示:


- 接下来编写我们asp.net core 的docker file,如下图所示(注释写的很清楚了)
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 as build-env
# code目录
WORKDIR /code #项目拷贝至code
COPY *.csproj ./
RUN dotnet restore # #代码拷贝至code
COPY . ./
# #发布文件在code/out文件夹
RUN dotnet publish -c Release -o out
# #找到runtime
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
# #新建一个目录app
WORKDIR /app
# #code目录发布的代码文件放到app
COPY --from=build-env /code/out ./
# 输出到80端口
EXPOSE
ENTRYPOINT [ "dotnet","UserApi.dll" ]asp.net core docker file
- 将api项目打包成docker镜像(docker build -t lmc/aspnetcore:prod .);将lmc/aspnetcore 镜像运行一个容器实例(docker run -d -p 5004:80 -name myuserapi lmc/userapi:prod)。

- 此时我们的api容器是无法连接到我们的Mysql容器的。这里我们使用network做为互联方式(https://github.com/yeasy/docker_practice/blob/master/network/linking.md)。我们创建一个名为mybridge的network (docker network create -d bridge mybridge)。可以用inspect看到network的网关为172.18.0.1


- 我们把我们的api容器与mysql容器都连接到mybridge容器(docker network connect mybridge myuserapi;docker network connect mybridge db) ,此时查看我们的mysql容器和userapi容器详细信息都多了一项mybridge

- 此时访问我们api容器,就可以返回初始化写入的数据了。这里有几个点要注意下:
- api项目的数据库连接字符串要为mysql容器的名称
- 我们可以进入api容器(docker exec -it myuserapi bash) ping mysql容器来验证是否网络互连(需要apt-get update && apt-get install iputils-ping )
- 假如需要修改链接字符串可以在api容器中安装vim
- 我的本机测试因为装有mysql,所以启动db(mysql容器)时候端口映射到3308

docker compose 编排启动多个容器
- docker compose项目是docker官方开源项目,负责对Docker容器几群的快速编排。Compose中有两个概念 :
- 服务 (
service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例(例如我们的demo中userapi 和 db)。 - 项目 (
project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义 (userapi和db加起来为一个项目)。
- 服务 (
- 我们在network的基础上修改,首先,编写dockercompose:(注释很清楚),这里有一点注意下,我们在mysql容器运行时候,执行一个sql脚本
version: ''
services:
db:
image: mysql/mysql-server:5.7. #镜像
container_name: db #容器名称
command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci #运行命令,把mysql容器字符集修改为utf8
restart: always
ports:
- '3308:3306' #端口映射
environment:
MYSQL_ROOT_PASSWORD: pwd123456
MYSQL_USER: lmc
MYSQL_PASSWORD: pwd123456
volumes:
- /d/docker/beta/mysqlcompose-init:/docker-entrypoint-initdb.d #资料卷挂载,mysql容器执行时候会执行绝对路径/d/docker/beta/mysqlcompose-init下的sql文件
web:
build: .
container_name: 'aspnetcore'
ports:
- '8003:80'
depends_on: #启动web之前,检查依赖项,先启动db
- dbdocker-compose.yml

- compose构建项目(docker-compose build),我们的compose项目中有两个service,一个userapi,一个db,userapi依赖于db
- compose创建/启动服务,关联容器 (docker-compose up);(这里需要把第一步中的db容器删除掉,否则会重名);我们可以看到,两个容器已经运行

我们来看一下生成的network




- 最后,访问下api的返回用户数据的端口
- 注意点,和network的解决方案差不多,假如mysql连不上的话,去api容器中ping一下,telnet一下;注意compose.yml文件的是否编写格式正确

asp.net core容器&mysql容器network互联 & docker compose方式编排启动多个容器的更多相关文章
- Visual Studio Code和Docker开发asp.net core和mysql应用
Visual Studio Code和Docker开发asp.net core和mysql应用 .net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对 ...
- asp.net core webapi/website+Azure DevOps+GitHub+Docker
asp.net core webapi/website+Azure DevOps+GitHub+Docker 新春开篇作,主要写一下关于asp.net core web/api 2.2 项目借助dev ...
- ASP.NET CORE做的网站运行在docker实践
用VS2017 建立了 DotNet Core 2.2 的网站后,如何转移到 Docker 下运行? 下面分两种方式来实践: 1.直接手动命今行,将本机目录映射进Docker,运行网站.2.制作 Im ...
- docker4dotnet #3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用
.net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对岸的苹果园越来越茂盛,实在不想再去做一只宅猿了.于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去看 ...
- Asp.Net Core 连接Mysql
上一篇文章里最后在VS里测试是没有问题的,但是在Windows命令行模式下会报错. 首先用dotnet restore命令的时候会出现error: 然后用dotnet run会出现警告,但是依旧会成功 ...
- Asp.Net Core链接Mysql数据库
一.新建一个Asp.Net Core WebMVC程序 添加nuget包 Mysql.Data 二.新建一个UserContext类 下面代码中的UserInfo是我自己建的一个实体,里面有俩字段: ...
- ASP.NET CORE做的网站运行在docker上(不用dockerfile文件部署)
按网上的做法用dockerfile文件是可以弄得出来的,http://www.docker.org.cn/article/119.html, 不过我想把网站文件放在外面硬盘目录,再映射进去,这样只要在 ...
- 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(2)
第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 为Domain Model添加约束 前一部分, 我们已经把数据库创建出来了. 那么我们先看看这个数据库 ...
- Windows下docker的安装,将ASP.NET Core程序部署在Linux和Docker中
参考文章: https://www.cnblogs.com/jRoger/p/aspnet-core-deploy-to-docker.html docker for windows下载连接: htt ...
随机推荐
- Linux下安装Tomcat服务器
Linux下安装Tomcat服务器 一.总结 一句话总结: linux多用才能熟 1.阿里云上面我们买的服务器,怎么让它可以访问特定的端口? 就是给服务器的安全组添加规则:实例-->更多--&g ...
- ADO方式,VC调用Execute执行INSERT INTO插入变量SQL语句的写法
ADO方式,VC调用Execute执行INSERT INTO插入变量SQL语句的写法 有些情况下,SQL SERVER 2008r2中需要保存float,int类型的数据,当C 中的变量为double ...
- java连SQLServer失败 java.lang.ClassNotFoundException:以及 javax.xml.bind.JAXBException
总结:jdk1.8及以下连sqlserver只需驱动,1.8以上除了驱动还需JAXB API. 1 java连SQLServer必须要先下驱动.否则出现: java.lang.ClassN ...
- 6. 使用cadvisor监控docker容器
Prometheus监控docker容器运行状态,我们用到cadvisor服务,cadvisor我们这里也采用docker方式直接运行.这里我们可以服务端和客户端都使用cadvisor 客户端 1.下 ...
- upc组队赛5 Assembly Required【思维】
Assembly Required 题目描述 Princess Lucy broke her old reading lamp, and needs a new one. The castle ord ...
- pandas 使用出现的问题汇总
问题1:<bound method NDFrame.head of 刚开始还以为是自己的数据集有问题,怎么显示不对呢! 解决: 仔细观察,是自己给的输出有问题,data.head什么鬼??? 正 ...
- redis基本介绍搭建篇
1.redis基本介绍 1.1 redis介绍 Redis属于非关系型数据库和Memcached类似,redis也是一个key-value型存储系统. 但redis支持的存储value类型相对更多,包 ...
- leetcode.矩阵.240搜索二维矩阵II-Java
1. 具体题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性:每行的元素从左到右升序排列:每列的元素从上到下升序排列. 示例: 现有矩阵 ...
- 数据概览神器pandas_profiling
安装: pip install pandas_profiling 用法如下: import pandas as pd import pandas_profiling df = pd.read_exce ...
- mac 密码重置
首先请开机或重新启动系统,在电脑刚启动时,请按下键盘上的 command+S 组合键不动, 接下来会在屏幕上看到一串串的命令字符显示,当进入安全模式以后,会看到 一个 root 开始的命令行输入端口. ...