欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Docker的使用初探(二):Docker与.NET Core的结合

程序员文章站 2022-05-07 14:17:26
Docker的使用初探(二):Docker与.NET Core的结合 [TOC] 在二者的结合上,微软官方给予了很大的支持,从官方发布的一些文章和VS 2017在建立.NET Core项目时自带的Docker选项都可以看出来,这也与Core的跨平台特性有很大的关系,而Docker正是可以选择以Lin ......

目录

docker的使用初探(二):docker与.net core的结合

在二者的结合上,微软官方给予了很大的支持,从官方发布的一些文章和vs 2017在建立.net core项目时自带的docker选项都可以看出来,这也与core的跨平台特性有很大的关系,而docker正是可以选择以linux或windows环境部署

添加dockefile

上一篇文章介绍了如何拉取core的官方镜像,但是我们终究要将docker应用到我们的开发环境中,如何将我们自己的项目生成为镜像并部署到docker上呢?第一步就添加dockerfile这个文件,在vs2017中大致是三种方法,它们稍有区别,但最终也都是建立了一个dockerfile文件

1. 在创建项目时添加

在新建core项目时,勾选“启用docker支持”选项,新建的项目会自动添加dockerfile文件,文件的具体内容在下文进行分析

Docker的使用初探(二):Docker与.NET Core的结合

2. 手动添加

已经在使用的项目可以通过“右键-添加-docker支持”,这样也可以新建dockerfile文件

Docker的使用初探(二):Docker与.NET Core的结合

3. 容器业务流程协调控制程序支持

这种方法相对于前两种比较特殊,它不再是单单增加一个dockerfile文件,而是如名称一般是一整条生产链,用于配合持续集成工具的开发-调试-生成-发布一条龙服务。添加的方式与第二种相同,右键项目添加就能看到这个拗口的名字

Docker的使用初探(二):Docker与.NET Core的结合

使用这种方式除了生成dockerfile文件还会在解决方案中添加一个名为docker compose的业务流程协调程序,在新建时可以选择,但是默认自带的只有这个。里面包含两个文件,一个是 .dockerignore 这个和git类似,里面记录的文件不会被打包成镜像发布,另一个是 docker-compose.yml ,用于配置这个业务流程的信息,如镜像名称和dockerfile文件的路径等

Docker的使用初探(二):Docker与.NET Core的结合

dockefile语法

大概是有以下这些,挑几个用到的说一下

from
maintainer
run
cmd
expose
env
add
copy
entrypoint
volume
user
workdir
onbuild
  • from

from <image>

说明使用的镜像,如果本地没有会自动拉取对应名称的镜像,没有指定标签的情况默认就是latest

form指令是dockerfile文件的第一行,但可以不唯一,根据需要可以有多个

以默认的core项目为例,这里拉取的就是core的官方镜像,上篇文章也有用到,分别是运行时和sdk

Docker的使用初探(二):Docker与.NET Core的结合

  • workdir

workdir <工作目录路径>

显而易见就是镜像被安装的路径,如果路径不存在,docker会自动创建

  • copy

copy <源路径> <目标路径>

将文件和目录复制到容器的文件系统。文件和目录需位于相对于 dockerfile 的路径中。

  • run

run <shell/exec>

在当前镜像上要执行的命令,可以使用shell或者exec的格式

  • expose

expose <端口>

服务端容器对外映射的本地端口

  • entrypoint

使用格式 run 一样,但是这个命令是在容器启动后执行的命令,不会被 run 命令覆盖,一个dockerfile里面只能有一个,如果有多个则只执行最后一条

其余的指令还没怎么用到,用法还不太清楚

docker项目调试

我们在前面提到了三种创建dockerfile文件的方法,实际上是两种情况,针对这两种情况,打包镜像的方法也不同

仅添加文件的方式

使用 docker build -t <name> <path> 指令。这种情况更加泛用,无论是不是用vs创建的都可以使用这种指令打包镜像

进入dockerfile文件所在的路径后执行命令即可

Docker的使用初探(二):Docker与.NET Core的结合

为了演示,我先删除的core的官方sdk,由于在dockerfile里面我们写入了使用了 from 命令,所以执行命令后我们发现docker自动下载了镜像,并且打包了我们的项目,但是最后有一句 image operating system "windows" cannot be used on this platform ,因为我这边docker使用的是linux模式,这里我们构建的是windows的容器镜像,所以需要切换一下,系统右下角托盘图标右键“switch to ...”,

Docker的使用初探(二):Docker与.NET Core的结合

为了体现dockerfile指令的效果,我们删除之前创建的镜像再执行一次build指令,这次docker没有下载core的sdk,因为之前已经下载过了。不过我在这里遇到了网络问题,发现之前的镜像拉取也失败了,所以换了一个镜像加速地址,然后简化了一下dockerfile文件,然后重复上面的操作就行了

from microsoft/dotnet:2.1-aspnetcore-runtime
workdir /app
copy . .
expose 80
entrypoint ["dotnet", "coredockerdemo1.dll"]

Docker的使用初探(二):Docker与.NET Core的结合

可以看到dockerfile里面的指令被依次执行,完成之后我们使用 docker image ls 就可以看到我们构建的镜像了,之后用上面的方法可以创建docker即可

Docker的使用初探(二):Docker与.NET Core的结合

容器业务流程协调控制程序支持

使用这种方式就不需要自己手动构建了,只要在vs里的调试按钮点一下即可。由于我们前面添加过这套协调控制程序,所以现在这个项目里可以直接选择docker进行调试

Docker的使用初探(二):Docker与.NET Core的结合

在这之前要对 docker-compose.yml 文件进行配置,基本上与dockerfile类似,而且更加直观,对应输入名称等就好了

Docker的使用初探(二):Docker与.NET Core的结合

我在第一次生成时出现了“未启用卷共享”的错误,这里我们需要在docker的设置中的shared drives标签中把程序生成构建的磁盘选中,然后点击“apply”按钮应用设置,然后docker会自动重启

Docker的使用初探(二):Docker与.NET Core的结合

Docker的使用初探(二):Docker与.NET Core的结合

设置完成后再点击vs中的运行,web应用就会自动编译生成并创建镜像和容器,然后启动网站。第一次启动时可能会询问是否授权ssl证书,进行授权即可

Docker的使用初探(二):Docker与.NET Core的结合


基本上有了这些,就可以利用docker给开发工作带来一些便捷,如果后面还要继续深入的话,就是将docker与持续集成结合起来应用到网站服务器环境上