Hello Docker

Docker: Build, Ship, and Run Any App, Anywhere
在任何地方构建、交付和运行任何应用
1. 引言
最近简单的学习了下Docker,本文先简要梳理下Docker涉及到的一些重要概念,后续在结合.NET Core探讨其基本用法。
2. What's Docker
Docker是用GO语言编写,利用Linux内核的几个特性来提供它的功能。Docker是一个开放平台用于快速开发、分发和部署应用程序。它提供了一个操作系统级别的抽象。它隔离了应用程序对基础架构(操作系统等)的依赖。解决了生产、测试、部署环境的一致性问题。
Docker提供了容器(松耦合且隔离的环境)去打包和运行应用程序。良好的安全性和隔离性允许我们在一个主机上运行多个容器。因为容器是直接在宿主机器的内核中运行且不需要额外的管理程序的负载(比如虚拟机需要VMware管理程序),所以说容器是轻量级的。
3. Docker Engine

从图中可知,Client使用docker CLI(命令行工具)通过Docker REST API去和docker daemon(docker的守护进程)进行交互,docker daemon负责去创建和管理Docker objects(比如镜像、容器、网络和存储卷等)。
4. Docker的适用场景

快速、一致地交付应用
Docker通过使用容器(其提供应用程序和服务)来提供标准化的工作环境来精简开发周期。容器在持续集成和持续开发(CI/CD)中十分有用。
考虑以下示例场景:
- 开发人员在本地编写代码,并使用Docker容器与同事分享他们的工作。
- 开发人员使用Docker将应用程序推入测试环境,并执行自动和手动测试。当开发人员发现错误时,他们可以在开发环境中修复它们,并将其重新部署到测试环境进行测试和验证。
- 完成测试后,将修复程序推送给客户就如同将更新的镜像推送到生产环境一样简单。
响应式部署和缩放
Docker的可移植性和轻量级特性也使得动态管理工作负载变得非常容易,几乎可以实时地按业务需求对应用程序和服务进行扩展和收缩。
在同一硬件运行多个工作负载
Docker的轻量级及运行快速的特性,允许我们用更少的资源做更多的事情,最大化的使用计算机的资源。Docker是高密度环境和中小型部署的理想选择。
5. Docker架构

从图中我们可以看出,Docker是一个C/S架构。客户端通过REST API与Docker的守护进程进行交互,守护进程从Registry(仓库,如DockerHub)拉取镜像,再构建、运行和分发容器等。
6. Docker VS Vitual Machine
首先,Docker是一种容器管理技术,而非虚拟化技术。与我们熟知的虚拟机有着本质区别:

通过上图可知,Docker是基于Docker引擎通过共享宿主机的硬件资源,使用容器来提供独立运行环境来运行应用程序!而VM则是基于Supervisor(虚拟机管理程序)使用虚拟机技术来提供隔离的虚拟机,在虚拟机的操作系统上提供运行环境!虽然两者都提供了很好的资源隔离,但很明显Docker的虚拟化开销更低!
7. 核心术语
下面我们就来重点梳理下Docker涉及到的一些核心术语:Registry、Image、Container、Stack、Service、Swarm。
Registry(仓库)
Docker Registry 用来存储Docker镜像,比如Docker官方的Docker Hub就是一个公开的仓库。在上面我们可以找到我们想要的镜像。当然我们也可以建立私有的镜像仓库。
当我们执行Docker pull或Docker run命令时,若本地无所需的镜像,那么将会从仓库(一般为DockerHub)下载(pull)一个镜像。Docker执行run方法得到一个容器,用户在容器里执行各种操作。Docker执行commit方法将一个容器转化为镜像。Docker利用login、push等命令将本地镜像推送(push)到仓库。其他机器或服务器上就可以使用该镜像去生成容器,进而运行相应的应用程序。
另外,我们可以在Docker Store进行镜像交易。
Image(镜像)
镜像是自读的,用于创建Docker容器。我们可以基于一个镜像做一些额外的自定义更改后,commit成我们自己的镜像。也可以使用Dockerfile,build成我们自己的镜像。Docker使用镜像分层技术,Dockerfile中的每个指令都会创建为镜像中的一个层。

Container(容器)
容器是docker中最重要的概念,Container是镜像的运行实例,它是一个隔离的、资源受控的可移植的运行时环境,其中包含操作系统、需要运行的程序、运行程序的相关依赖、环境变量等。我们可以通过docker run <image>创建指定镜像的容器,创建容器时会在镜像上附加一个读写层。我们可以连接容器到一个或多个网络,并为其附加存储,或基于它当前状态创建一个新的镜像。Docker使用namespace的技术来实现容器之间的隔离!对于容器的更改是暂时的,当容器停止时,相应的改动就会丢失。我们可以通过挂载volume来持久化存储!
Docker Swarm(Docker集群)
Docker Swarm 是 Docker 的独立原生集群工具的名称。Docker Swarm 将多个Docker主机集群并将它们暴露为单个虚拟的Docker主机。
Service(服务)
通过服务我们可以很好进行容器扩展,默认情况下,服务在Swarm下的所有工作节点之间进行负载平衡。在Docker中我们通过编写docker-compose.yml来定义、运行和扩展服务。
Stack(服务堆)
Stack是一组相互关联的服务,它们可以共享依赖关系,并且可以一起协调和缩放。单个Stack能够定义和协调整个应用程序的功能。
参考资料:
Hello Docker的更多相关文章
- docker——容器安装tomcat
写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...
- Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境
首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...
- Docker 第一篇--初识docker
已经多年不写博客, 看完<晓松奇谈>最后一期猛然觉醒, 决定仔细梳理下自己这几年的知识脉络. 既然决定写, 那么首先就从最近2年热门的开源项目Docker开始.Docker 这两年在国内很 ...
- 在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 ...
- docker for mac 学习记录
docker基本命令 docker run -d -p 80:80 --name webserver nginx 运行容器并起别名 docker ps 展示目前启动的容器 docker ps -a 展 ...
- scrapy爬虫docker部署
spider_docker 接我上篇博客,为爬虫引用创建container,包括的模块:scrapy, mongo, celery, rabbitmq,连接https://github.com/Liu ...
- [原][Docker]特性与原理解析
Docker特性与原理解析 文章假设你已经熟悉了Docker的基本命令和基本知识 首先看看Docker提供了哪些特性: 交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上, ...
- 开发者的利器:Docker 理解与使用
困扰写代码的机器难免会被我们安装上各种各样的开发工具.语言运行环境和引用库等一大堆的东西,长久以来不仅机器乱七八糟,而且有些相同的软件还有可能会安装不同的版本,这样又会导致一个项目正常运行了,却不小心 ...
- 使用python自动生成docker nginx反向代理配置
由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候 ...
- 微服务与Docker介绍
什么是微服务 微服务应用的一个最大的优点是,它们往往比传统的应用程序更有效地利用计算资源.这是因为它们通过扩展组件来处理功能瓶颈问题.这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个 ...
随机推荐
- java 导出blob图片到excel
实现功能,导出当前页面显示员工的图片,核心代码已给出,仅供参考, 如需转载请注明出处http://www.cnblogs.com/wangjianguang/p/7852060.html 随便再扯2句 ...
- C语 三子棋小游戏
#include <stdio.h> #include <Windows.h> #include<time.h> #define row 3 #define lis ...
- sysbench
安装 http://www.cnblogs.com/zhoujinyi/archive/2013/04/19/3029134.html http://space.itpub.net/758322/vi ...
- 史上最强学生管理系统之ArrayList版
其实不管是网上或者培训班,都会有学生管理系统的最基础版本,本人也不过是照猫画虎,在某些细节方面进行了一些渲染,使这个最基本的小程序更加人性化和便于利于操作一点,个人愚见,大牛勿喷,欢迎转载(请注明出处 ...
- 【Java框架型项目从入门到装逼】第一节 - Spring框架 IOC的丧心病狂解说
大家好,好久不见,今天我们来一起学习一下关于Spring框架的IOC技术. 控制反转--Spring通过一种称作控制反转(IoC)的技术促进了松耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的 ...
- Office2016 KMS激活
Office标准版激活 一新买本子需要安装Office,闲来无事就安装了一款Office Standard 2016,网上许多激活秘钥均已过期,无法激活,无奈下选择KMS激活. KMS下载链接如下: ...
- 作为新手 HTML5如何自学为好?
互联网发展到今天,越来越多的技术岗位人才出现了稀缺的状态,就拿当前的HTML5来讲,基本成为了每家互联网公司不可缺少的人才.如果抓住这个机会,把HTML5搞好,那么前途不可限量,而且这门行业是越老越吃 ...
- 正则化方法:L1和L2 regularization、数据集扩增、dropout(转)
ps:转的.当时主要是看到一个问题是L1 L2之间有何区别,当时对l1与l2的概念有些忘了,就百度了一下.看完这篇文章,看到那个对W减小,网络结构变得不那么复杂的解释之后,满脑子的6666------ ...
- Activity讲解
Activity Activity 是 Android 应用的重要组成单元之一(另外三个是 Service.BroadcastReceiver 和 ContentProvider),而 Activit ...
- spring中的自定义标签
为了给系统提供可配置化支持,一般会用原生态的方式去解析定义好的XML文件,然后转化为配置对象.这种方式对于简单.单一的配置文件,或者是XML配置格式固定的配置文件,比较容易处理.但是对于一些配置非常复 ...