-
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,如下图所示(注释写的很清楚了)
asp.net core docker file
1 FROM mcr.microsoft.com/dotnet/core/sdk:2.2 as build-env 2 # code目录 3 WORKDIR /code 4 5 #项目拷贝至code 6 COPY *.csproj ./ 7 RUN dotnet restore 8 9 # #代码拷贝至code 10 COPY . ./ 11 # #发布文件在code/out文件夹 12 RUN dotnet publish -c Release -o out 13 # #找到runtime 14 FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 15 # #新建一个目录app 16 WORKDIR /app 17 # #code目录发布的代码文件放到app 18 COPY --from=build-env /code/out ./ 19 # 输出到80端口 20 EXPOSE 80 21 ENTRYPOINT [ "dotnet","UserApi.dll" ]