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

目录

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

    • 添加Dockefile

      • 1. 在创建项目时添加
      • 2. 手动添加
      • 3. 容器业务流程协调控制程序支持
    • Dockefile语法
    • Docker项目调试
      • 仅添加文件的方式
      • 容器业务流程协调控制程序支持

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

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

添加Dockefile

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

1. 在创建项目时添加

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

2. 手动添加

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

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

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

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

Dockefile语法

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

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与持续集成结合起来应用到网站服务器环境上

原文地址:https://www.cnblogs.com/LFeather/p/10264619.html

时间: 2024-11-07 12:27:01

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

Docker入门教程(二)命令

Docker入门教程(二)命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第二篇,介绍了Docker的基本命令以及命令的用法和功能. 在Docker系列教程的第一篇文章中,我们了解了Docker的基础知识,知道了它是如何工作以及如何安装的.在这篇文章中,我们将学习15个Docker命令,并通过实践来学习它是如何工作的. 首先,让我们通过下面的命令来检查Docker的安装是否正确: docker info  如果没有找到这条命令,则表示Docke

Docker镜像与仓库(二)Dockerfile

Docker镜像文件与仓库(二) Docker镜像文件与仓库(二) Dockerfile指令 Dockerfile格式: 1.#Comment注释2.INSTRUCTION大写的指令名 argument参数 FROM 1.FROM <image>2.FROM <image>:<tag>3.#通过FROM指定的镜像名都必须是已经存在的镜像,这个镜像叫做基础镜像,而且必须是第一条非注释指令 MAINTAINER 1.MAINTAINER <name>2.#指定镜

《第一本Docker》笔记(二)之安装Docker

二.安装Docker 1. Ubuntu系统中安装Docker: 1) 内核检查:uname –a#Docker要求的内核版本在3.8及以上,并且要求运行在64位的CPU架构的计算机上. 升级内核版本: $ sudoapt-get update $ sudoapt-get install linux-headers-3.8.0-27-generic linux-image-3.8.0-27-generic  linux-headers-3.8.0-27 更新Grub启动加载器来加载新内核 $ s

docker简明教程(二)

前言这篇博文承接我的上一篇<docker简明教程一> http://9399369.blog.51cto.com/9389369/1758576 相对于上一篇来说这篇所讲到的知识会高深一点因为学习的过程不就是一步步的由简单到复杂嘛但是我的风格没变用简单的文字让朋友们学习高深的docker技术.如果觉得我写的好的话顶我上推荐希望能让跟多人看到.学习和受益. 二十二.Docker导出容器到本地文件 不管是容器不是处于运行状态都可以导出 首先查看那容器状态 [[email protected] ~]

Docker基本命令与使用 —— Docker镜像与仓库(二)

一.查看和删除镜像 1.Docker Image 镜像 容器的基石 层叠的只读文件系统 联合加载(union mount) (存储位置 /var/lib/docker) docker info 2.列出镜像 docker images [OPTIONS] [REPOSITORY] -a,--all=false 默认并不显示中间层镜像 -f,--filter=[] 过滤条件 -no-trunc=false 不以截断的形式显示数据(镜像的唯一Id) -q,--quiet=false 只显示镜像的唯一

Docker快速入门(二)

上篇文章<Docker快速入门(一)>介绍了docker的基本概念和image的相关操作,本篇将进一步介绍image,容器和Dockerfile. 1 image文件 (1)Docker 把应用程序及其依赖,打包在 image 文件里面.(2)只有通过这个image文件,才能生成 Docker 容器.image 文件可以看作是容器的模板.Docker 根据 image 文件生成容器的实例.(3)同一个 image 文件,可以生成多个同时运行的容器实例.(4)image 是二进制文件.实际开发中

docker集群(二)--portainer+TLS安全连接docker主机(详细介绍与使用心得)

http://blog.51cto.com/mysky0708/2298049承接上文,在生产中如何安全的链接docker主机呢?我们采用TLS秘钥方式.步骤:第一部分:首先在docker主机上生成秘钥,保存到指定地方:第二部分:在管理节点(portainer)上,指定上述秘钥,添加节点. 具体实施过程:第一部分代码如下 read -s PASSWORD //定义一个密码变量 read SERVER //注意主机名变量要与系统对应 cd /etc/docker //切换到生产密钥的目录 open

Docker的使用初探(一):常用指令说明

目录 Docker的使用初探(一):常用指令说明 为什么要用Docker Docker的安装与简单使用 国内镜像加速 常用指令 Docker的使用初探(一):常用指令说明 前几个星期实践的了,再不记录一下真的就忘干净了 Docker即容器技术,具体的介绍已经有很多,不打算赘述了,说一些优点 为什么要用Docker 对我个人来说,最大的优点就是在一台电脑上可以部署不同的环境而不用担心它们产生冲突,最常见的冲突就是端口占用,使用Docker技术可以很方便地规避这一问题,而且便于管理,我不用在本地处理

Docker Hub 使用初探

Docker Hub 使用初探 —— 魏刘宏 2019.10.26 容器的话题越来越热,今天我也来试试容器的使用,我们以 Docker Hub 为例. Docker Hub 官网为 https://hub.docker.com/ ,主要用于托管容器镜像,我们以 Linux 系统 centos 为例: 详细页面给出了拉取的命令,不带标签默认拉取最新的: 点击 View Available Tags 可查看所有标签,其中标签 7 应该就是标签 centos7 的简写: 我们在 Docker Hub