1. 引言

  Docker是目前最流行的容器技术,是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。是开发人员和系统管理员使用容器开发,部署和运行应用程序的平台。也许我们都有一个经历,当开发完某个项目发布到测试系统后测试通过验收上线,到了线上版本却出现了一些问题,这种往往就是因为测试环境和生产环境不一样所导致的。那么使用docker容器进行部署就可以解决此问题,因为当你打包好一个docker镜像后,不管是放到windows上的docker还是linux上的docker,其运行结果都是一致的。

  容器技术正变得越来越重要,因为其拥有以下特点:

  • 灵活:即使是最复杂的应用也可以集装箱化。
  • 轻量级:容器利用并共享主机内核。
  • 可互换:您可以即时部署更新和升级。
  • 便携式:您可以在本地构建,部署到云,并在任何地方运行。
  • 可扩展:您可以增加并自动分发容器副本。
  • 可堆叠:您可以垂直和即时堆叠服务。

  在容器技术出现之前,我们部署应用往往是部署在真机或者是虚拟机上,那么我们来看下对比图

  可以看到容器在本机上运行,并与其他容器共享主机的内核。它运行一个独立的进程,不占用任何其他可执行文件的内存,使其轻量级。相比之下,虚拟机(VM)运行一个完整的“客户”操作系统,通过虚拟机管理程序对主机资源进行虚拟访问。通常,VM提供的环境比大多数应用程序需要的资源更多。

  更多关于docker的文档可以看官网: https://docs.docker.com/get-started/ 。

2. 安装

  windows 10可以安装 Docker for Windows Installer.exe。这里不再介绍具体安装方法。关于在linux上安装docker,可以参考我的另一篇文章:初识docker 。

3. 将Asp.Net Core项目部署在docker上

  随着微软拥抱开源,对容器的支持力度也不断加大,甚至在VS中可以直接添加docker支持生成 Dockerfile 文件。关于Asp.Net Core构建docker镜像可以参考我的微信公众号文章:https://mp.weixin.qq.com/s/Qd1SEoekOmvGy7CzeGLoAg ,这里就不再重复介绍了,毕竟也很简单。

  虽然Dockerfile可以让我们很方便的构建一个单独的容器,但是在工作中,经常会碰到需要多个容器相互配合来完成某项任务。这时候就需要使用docker-compose来解决了。compose允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目,具体使用也可以在我的微信公众号文章中找到:https://mp.weixin.qq.com/s/gEuFjUk9MUS-qWpHj8MGUg 。此处愣是推广了下自己的订阅号,欢迎关注哈,目前大多数文章是和博客园一样的备份,方便自己在手机上可以查看复习。

  docker-compose使用YAML 格式,YAML不是一门标记语言,号称是一种所有编程语言的人性化数据序列化标准。但它的官网 https://yaml.org/ 样式本人是不敢苟同。那么看下它的格式吧。

  • YAML 文件可以由一个或多个文档组成(也即相对独立的组织结构组成),文档间使用“---”(三个横线)作为每个文档开始的分隔符。同时可以使用“...”(三个点号)作为结束符(可选)
  • YAML 认为数据由以下三种结构组成,标量 (相当于数据类型),序列 (相当于数组和列表),键值表(相当于 Map 表)
  • YAM 文件的编写规范:
    • 文档使用 Unicode 编码作为字符标准编码,例如 UTF-8
    • 使用“#”来表示注释内容
    • 使用空格(个数不限,一般2个或4个)作为嵌套缩进工具,不能使用tab缩进
    • 序列表示:
      • 使用“-”(横线) + 单个空格表示单个列表项;
      • 使用"[]"表示一组数据;
      • 组合表示。每个结构都可以嵌套组成复杂的表示结构。
    • 键值表
      • 使用 “:”(冒号) + 空格表示单个键值对 ,比如 date: 2015-02-01
      • 使用"{}"表示一个键值表,如 items: {number: 1234, descript: cpu, price: 800.00}
      • "? " 问号+空格表示复杂的键。当键是一个列表或键值表时,就需要使用本符号来标记。
      • 组合表示。每个结构都可以嵌套组成复杂的表示结构。
    • 文本块
      • 使用 “|” 和文本内容缩进表示的块:保留块中已有的回车换行。相当于段落块
      • 使用 “>” 和文本内容缩进表示的块:将块中回车替换为空格,最终连接成一行。
      • 使用定界符“”(双引号)、‘’(单引号)或回车表示的块:最终表示成一行。
    • 数据类型的约定
      • 对一些常用数据类型的表示格式进行了约定
      • !(叹号)显式指示类型,或自定义类型标识。单叹号通常是自定义类型,双叹号是内置类型
    • 锚点与引用:定义数据的复用。使用 “&” 定义数据锚点(即要复制的数据),使用 “*” 引用上述锚点数据(即数据的复制目的地)

4. Docker集群

  至于docker swarm 或者 k8s 本人还未涉猎,留待以后补充吧。

Docker准备的更多相关文章

  1. docker——容器安装tomcat

    写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...

  2. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...

  3. Docker 第一篇--初识docker

    已经多年不写博客, 看完<晓松奇谈>最后一期猛然觉醒, 决定仔细梳理下自己这几年的知识脉络. 既然决定写, 那么首先就从最近2年热门的开源项目Docker开始.Docker 这两年在国内很 ...

  4. 在docker中运行ASP.NET Core Web API应用程序(附AWS Windows Server 2016 widt Container实战案例)

    环境准备 1.亚马逊EC2 Windows Server 2016 with Container 2.Visual Studio 2015 Enterprise(Profresianal要装Updat ...

  5. docker for mac 学习记录

    docker基本命令 docker run -d -p 80:80 --name webserver nginx 运行容器并起别名 docker ps 展示目前启动的容器 docker ps -a 展 ...

  6. scrapy爬虫docker部署

    spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...

  7. [原][Docker]特性与原理解析

    Docker特性与原理解析 文章假设你已经熟悉了Docker的基本命令和基本知识 首先看看Docker提供了哪些特性: 交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上, ...

  8. 开发者的利器:Docker 理解与使用

    困扰写代码的机器难免会被我们安装上各种各样的开发工具.语言运行环境和引用库等一大堆的东西,长久以来不仅机器乱七八糟,而且有些相同的软件还有可能会安装不同的版本,这样又会导致一个项目正常运行了,却不小心 ...

  9. 使用python自动生成docker nginx反向代理配置

    由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候 ...

  10. 微服务与Docker介绍

    什么是微服务 微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源.这是因为它们通过扩展组件来处理功能瓶颈问题.这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个 ...

随机推荐

  1. The database principal owns a schema in the database, and cannot be dropped. (.Net SqlClient Data Pr

    解决microsoft sql server error:15138的方法 http://blog.csdn.net/gray13/article/details/4458523 用sp_change ...

  2. 后台(一)vue+element-ui (按需加载)

    vue init webpack    项目名称 npm install axios                    //先安装! npm install --save axios vue-ax ...

  3. 二分算法题目训练(二)——Exams详解

    CodeForces732D——Exams 详解 Exam 题目描述(google翻译) Vasiliy的考试期限将持续n天.他必须通过m门科目的考试.受试者编号为1至m. 大约每天我们都知道当天可以 ...

  4. Python基础之只接收关键字参数的函数

    当我们希望函数的某些参数强制使用关键字参数时,可以将强制关键字参数放到某个*后面就能得到这种效果.比如: def recv(maxsize, *, block): """ ...

  5. Centos7使用python3连接inception报错解决办法

    inception支持mysqldb库但不支持pymysql库,无奈mysqldb库不兼容py3,直接使用pymysql 连接inception报错如下: ValueError: invalid li ...

  6. unctf esayrop wp

    目录 题目基本信息 题目漏洞 思路 exp脚本 题目基本信息 题目漏洞 首先在main函数中需要绕过一个if判断才能进入漏洞函数 漏洞函数中很明显的栈溢出漏洞,同时还控制了返回地址不能超过文件映射到内 ...

  7. STM32F4 LTDC

    首先配置同步时序先看参考手册 下面看一个实际例子,一块439的开发板 设置: 配置时序 LTDC_InitStruct.LTDC_HorizontalSync = ; /* */ LTDC_InitS ...

  8. <JavaScript>几道javascript练习题

    问题1: 作用域(Scope) 考虑以下代码: (function() { var a = b = 5; })(); console.log(b); 控制台(console)会打印出什么? 答案 上述 ...

  9. hystrix流程图收藏

    最近在看张开涛的亿级流量的书,学习了一个新的防雪崩的功能hystrix,在学习这个功能的过程中,看了一些网站也温习了一些知识,例如double_check locking功能,还有cache的击穿作为 ...

  10. 各种Android UI开源框架 开源库

    各种Android UI开源框架 开源库 转 https://blog.csdn.net/zhangdi_gdk2016/article/details/84643668 自己总结的Android开源 ...