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. linux产看磁盘信息命令-lsblk,blkid,dumpe2fs

    一.lsblk命令用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息.块设备有硬盘,闪存盘,cd-ROM等等.lsblk命令包含在util-linux-ng包中 ...

  2. 一个milller_rabin模板

    #include <iostream> #include <cstdlib> #include <stdio.h> #include <algorithm&g ...

  3. 洛谷P1016 旅行家的预算 题解

    主要就是注意一下各个变量的类型别弄混了 https://www.luogu.org/problem/P1016 #include<cstdio> using namespace std; ...

  4. 「学习笔记」FFT及NTT入门知识

    前言 快速傅里叶变换(\(\text{Fast Fourier Transform,FFT}\) )是一种能在\(O(n \log n)\)的时间内完成多项式乘法的算法,在\(OI\)中的应用很多,是 ...

  5. xyz

    import numpy as np a = np.array([[,],[,]]) sumo = np.sum(a,axis=) suml = np.sum(a,axis=O) print(sumo ...

  6. 20191214数组之四:数字不相同的完全平方数(关于数位上数字判断与sprintf)

    sprintf用法参见之前的随笔;(以解决):

  7. Web API 跨域

    1. NuGet下载## microsoft.aspnet.webapi.cors 2 . Web API 路由中 config.EnableCors(new EnableCorsAttribute( ...

  8. webpack4.0源码分析之Tapable

    1 Tapable简介 webpack本质上是一种事件流的机制,它的工作流程就是将各个插件串联起来,而实现这一切的核心就是Tapable,webpack中最核心的负责编译的Compiler和负责创建b ...

  9. python人生如初见之初见yield

    今天学习爬虫Scrapy框架搭建的时候,了解了yield的用法.了解一个东西,无外乎 WHAT? HOW? WHY? WHAT yield英文意思是屈服,退位,放弃.额...其实它是Python中的一 ...

  10. ArcGIS超级工具SPTOOLS1.7升级说明

    ArcGIS超级工具1.7升级说明:多了:5个工具,总87工具. 5.11   数据打包 44 5.11.1.  mxd批量打包MPK:对一个文件夹所有MXD打包MPK 5.11.2.  mxd文档发 ...