1、创建一个项目,并且添加docker支持(我这边是用了一个以前就创建好的项目)

  如下图,添加docker支持,选择linux,添加后会自动生成一个Dockerfile文件(这个文件是构建docker镜像的关键)

  

  

   如下图,打开Dockerfile文件查看,发现需要使用到两个基础的镜像

  mcr.microsoft.com/dotnet/aspnet:6.0 基础镜像

  mcr.microsoft.com/dotnet/sdk:6.0 sdk镜像

  

 2、安装基础镜像(mcr.microsoft.com/dotnet/aspnet:6.0 和 mcr.microsoft.com/dotnet/sdk:6.0)

  直接在系统中无脑 docker pull xxx

docker pull mcr.microsoft.com/dotnet/aspnet:6.0
docker pull mcr.microsoft.com/dotnet/sdk:6.0

  

   

   然后docker images查看下,镜像都已经有了 

  

3、将项目上传到linux机器上(我这边使用的是本机的windows子系统,在linux子系统中直接可以访问到本地硬盘,可以直接用cp命令,省去了很多事)

  windows的linux子系统中,本身有个mnt目录,在mnt目录下,可以直接访问到本机硬盘的内容,如下图,在mnt目录下可以看到又c盘和d盘

  ps:非windows子系统需要使用其他传文件方式,具体方法自行百度把。

  

   在/home/smj/projects/  下创建  antServiceApi 文件夹用来放文件,然后将本地的项目复制到linux系统中。

# 复制文件
cp -r /mnt/d/workspace/AntServiceApi/ant-service-api/* /home/smj/projects/antServiceApi/

  /mnt/d/workspace/AntServiceApi/ant-service-api/* 表示本地项目,ant-service-api/* 表示文件夹下所有文件

  /home/smj/projects/antServiceApi/ 表示linux机器上的文件夹,将本地的项目复制到这个文件夹下

  注意:复制时,需要从待解决方案的那一层开始复制

   

 4、通过Dockerfile生成docker镜像(docker build …)

  我们发现,通过vs自动创建的Dockerfile没有和项目的解决方案在一个层级的目录,所以需要将Dockerfile复制到工作目录。

 

mv Dockerfile ../

 

  

  原因:由于vs自动创建的dockerfile不在实际工作目录(解决方案目录)

  建议:直接在vs项目中将Dockerfile移动好然后传到linux机器上,这样就省去到linux机器上移动了

   然后执行编译命令:docker build -t antservice .

docker build -t antservice .

  antservice 表示镜像的名称

  最后一个点. 表示使用当前目录的Dockerfile(所以这个命令需要在解决方案目录下执行

  

   执行完命令后查看查看镜像(docker images),antservice已经创建成功

  

 5、通过镜像运行Docker容器(docker run …)

docker run --name antservice -p 8001:80 -d antservice

  –name antservice 表示容器名称

  -p 8001:80 表示端口映射,-p 宿主机端口:容器端口

  -d 表示后台运行,返回容器id

  最后的antservice 表示使用的镜像名称

  正常情况下到这就算结束了,但是,我这边运行之后发现,容器没跑起来!!!

  

6、踩坑记录(数据库链接,以及swagger踩坑)

  6.1、数据库链接配置不正确

    经过查看容器日志发现,我项目里使用了mysql数据库,但是在docker中连不上数据库,导致容器没有启动。 

# docker查看日志命令
docker logs <OPTIONS> <CONTAINER>

# <OPTIONS>
#  -f : 跟踪日志输出
#  -t : 显示时间
#  –tail :仅列出最新N条容器日志
#  –since:显示某个日期至今的所有日志

# <CONTAINER>
#  代表容器ID或容器名称

# ————-举例—————–

# 查看最近10条日志, 并持续打印
docker logs -f –tail 10 容器id或名称
# 查看某个日期至今的所有日志,并持续打印
docker logs -f –since “2022-11-20” efb78392fcc6 容器id或名称

    6.1.1、首先安装在docker中安装mysql,详情见 Docker安装mysql

    6.1.2、然后再项目的配置文件中修改数据库连接串。

    6.1.3、然后执行上述3-5的步骤重新编译和部署

  6.2、swagger以来的xml没有生成

    有一些项目会使用swagger作为接口文档,项目中也会引入swagger,而然swagger依赖项目生成的xml。

    我们设置项目时,一般只会在Debug模式下才会生成xml,Release分支默认不会生成xml,所以导致编译到docker中的项目找不到相应xml。

    解决方法:设置Release分支也生成xml,然后重复上述3-5的步骤

    

 

     

  6.3、项目配置文件挂载

     项目的配置文件,建议设置挂载,使用宿主机上的配置文件。

    6.3.1、在宿主机上新建配置文件,我创建到了/home/docker/volumes/serviceconfig/antservice/appsettings.json

     

    6.3.2、删除容器后重新使用挂载方式创建(因为挂载需要在docker run的时候进行挂载)

# 停止容器
docker stop 容器id
# 删除容器
docker rm -f 容器id
# 使用挂载方式启动容器
docker run --name antservice -p 8001:80 -d -v /home/docker/volumes/serviceconfig/antservice/appsettings.json:/app/appsettings.json antservice

      -v /home/docker/volumes/serviceconfig/antservice/appsettings.json:/app/appsettings.json 表示挂载,含义: -v 宿主机目录文件:容器目录文件

    6.3.3、验证:将宿主机上的appsetting中的数据库配置故意改错,然后重启容器,会发现连不上mysql,则表示挂载成功

7、最后访问项目的swagger

原文地址:http://www.cnblogs.com/smj-7038/p/16905934.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性