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

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

在两者的结合上,微软官方给予了很大的支持,从官方发布的一些文章和VS 2017在创建.NET Core项目时自带的Docker选项均可以看出来,这也与Core的跨平台特性有很大的关系,而Docker正是能够选择以Linux或Windows环境部署web

添加Dockefile

上一篇文章介绍了如何拉取Core的官方镜像,可是咱们终究要将Docker应用到咱们的开发环境中,如何将咱们本身的项目生成为镜像并部署到Docker上呢?第一步就添加Dockerfile这个文件,在VS2017中大体是三种方法,它们稍有区别,但最终也都是创建了一个Dockerfile文件docker

1. 在建立项目时添加

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

2. 手动添加

已经在使用的项目能够经过“右键-添加-Docker支持”,这样也能够新建Dockerfile文件windows

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

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

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

Dockefile语法

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

FROM
MAINTAINER
RUN
CMD
EXPOSE
ENV
ADD
COPY
ENTRYPOINT
VOLUME
USER
WORKDIR
ONBUILD
  • FROM

FROM <image>工具

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

FORM指令是Dockerfile文件的第一行,但能够不惟一,根据须要能够有多个

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

  • 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文件所在的路径后执行命令便可

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

为了体现Dockerfile指令的效果,咱们删除以前建立的镜像再执行一次Build指令,此次Docker没有下载Core的sdk,由于以前已经下载过了。不过我在这里遇到了网络问题,发现以前的镜像拉取也失败了,因此换了一个镜像加速地址,而后简化了一下dockerfile文件,而后重复上面的操做就好了

FROM microsoft/dotnet:2.1-aspnetcore-runtime
WORKDIR /app
COPY . .
EXPOSE 80
ENTRYPOINT ["dotnet", "CoreDockerDemo1.dll"]

能够看到dockerfile里面的指令被依次执行,完成以后咱们使用 docker image ls 就能够看到咱们构建的镜像了,以后用上面的方法能够建立Docker便可

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

使用这种方式就不须要本身手动构建了,只要在VS里的调试按钮点一下便可。因为咱们前面添加过这套协调控制程序,因此如今这个项目里能够直接选择docker进行调试

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

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

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


基本上有了这些,就能够利用Docker给开发工做带来一些便捷,若是后面还要继续深刻的话,就是将Docker与持续集成结合起来应用到网站服务器环境上

相关文章
相关标签/搜索