首页 > 其他分享 >Docker发布.net6.0项目

Docker发布.net6.0项目

时间:2022-11-20 13:55:07浏览次数:64  
标签:容器 项目 antservice net6.0 发布 镜像 docker Dockerfile Docker

 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

标签:容器,项目,antservice,net6.0,发布,镜像,docker,Dockerfile,Docker
From: https://www.cnblogs.com/smj-7038/p/16905934.html

相关文章

  • 根据docker镜像反推dockerfile
    Dockerfile是一个文本文件,其中包含我们为了构建Docker镜像而手动执行的所有命令。Docker可以从Dockerfile中读取指令来自动构建镜像。我们可以使用dockerbuild命......
  • Publish/Subscribe(发布/订阅),一次向多个消费者发送消息
    生产者packageorg.example.pubsub;importcom.rabbitmq.client.BuiltinExchangeType;importcom.rabbitmq.client.Channel;importcom.rabbitmq.client.Connection;......
  • Windows11 Docker镜像存储路径更改(非C盘路径)
    https://blog.csdn.net/Ber_Bai/article/details/120816638?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v......
  • docker-y1
    一、namespace、cgroup在容器中的作用Namespacenamespace是Linux系统的底层概念,在内核层实现,即有一些不同类型的命名空间被部署在内核,各个docker容器运行在同一docker主......
  • 一.docker的安装
    零、安装DockerDocker引擎支持主流的操作系统:windows、macos、linux、uinx。0.1、centos安装Docker1.提供yum-config-manager的实用程序 yum-yinstallyum-util......
  • npm 发布注意事项
    镜像需切换回registry镜像npmconfigsetregistryhttps://registry.npmjs.org/更新完毕后可切换回淘宝镜像npmconfigsetregistryhttps://registry.npm.taobao.or......
  • 每天一点基础K8S--dockerfile的常见语法
    `dockerfile类似于ansible中的playbook文件,按需对dockerimage进行定制修改。参考文件可以通过mandockerfile查看,也可以去官网查看dockerfile中,常用语法主要包括:1......
  • 每天一点基础K8S--dockerfile练习
    点击查看代码#dockerfile文件[11-1415:39:27huaweiroot~/dockerfile]#ls-ltotal8-rw-r--r--1rootroot579Nov1415:25dockerfile-rw-r--r--1root......
  • Docker安装mysql
    1、拉取mysql镜像(或者指定版本也行,例如dockerpullmysql5.7)dockerpullmysql 2、创建挂载目录数据库的配置和数据文件,不适合放容器内部,需要挂在到宿主机上......
  • docker入门
    docker安装卸载使用Docker仓库进行安装设置仓库安装所需的软件包。yum-utils提供了yum-config-manager,并且devicemapper存储驱动程序需要device-mapper-persis......