容器化-Docker介绍

导读:本文章对Docker技术进行了介绍,阐述了Docker的技术发展历程、容器与虚拟机的差异、Docker原理、特点、Docker三组件和Docker带来的影响,为我们进一步理解Docker打下基础。

一、前言

  2014年春天,我进入一家电商公司做反应式编程研究和落地工作,因为做的是平台工作,希望通过平台去满足不通的业务场景,业务部门只需要进行简单的适配和封装就能进行产品创新。此时就需要一种工具去快速搭建基础环境,环境之间不能相互干扰,业务部门还能方面使用。就这样和Docker进行了第一次偶遇,基于它我们将基础环境、公共组件等封装到镜像中,业务部门只需要将代码放入Docker中就可以轻松使用,原来需要1-2周的环境准备,现在只需要几分钟,太神奇了!

二、什么是docker?

  Docker 是PaaS 提供商 dotCloud, 基于容器技术的轻量级虚拟化解决方案,诞生于2013年初,基于Google公司推出的Go 语言实现,加入了 Linux 基金会,遵从Apache 2.0 协议,原始码在GitHub上进行维护;2017年Docker进行商业化运作,原来在github上开源项目正式改名为moby,docker变成了一家商业化公司。说到Docker,我们就不得不说容器技术了,Docker是一种容器化技术的落地。容器作为一类操作系统层面的虚拟化技术,其目标是在单一Linux主机交付多套隔离性环境,容器共享同一套主机操作系统内核。

三、Docker技术发展历程

2011年 — Warden:由CloudFoundry公司于2011年所建立,其利用LXC 作为初始阶段,随后又将其替换为自家实现方案。与LXC不同,Warden并不会与Linux紧密耦合。相反,其能够运行在任意能够提供多种隔离环境方式的操作系统之上

2013年 — LMCTFY:“Let Me Contain That For You(帮你实现容器化)”。它其实属于谷歌容器技术堆栈的开源版本,负责提供Linux应用程序容器,Kubernetes目前所使用的cAdvisor工具最初就来源于lmctfy项目

2013年 — Docker:起步阶段使用LXC,而后利用自己的libcontainer库将其替换下来。与其它容器平台不同,Docker引入了一整套与容器管理相关的生态系统。其中包括一套高效的分层式容器镜像模型、一套全局及本地容器注册表、一个精简化REST API以及一套命令行界面等等。在后期发展阶段,Docker公司还构建起一套名为Docker Swarm的容器集群管理解决方案

2014年 — Rocket:解决部分Docker当中存在的缺陷,开发目标是在安全性与生产要求满足能力上超越Docker,其基于App Container规范并使其成为一项更为开放的标准

2015年—Docker进行大家视线,开源社区得到前所未有的发展

2016年 — Windows容器发布,docker新技术架构升级

2017年—Docker:正式进行商业化运作,docker与moby分家

2018年-Docker在企业中快速落地

四、容器与虚拟机差异

  容器为应用程序提供了隔离的运行空间:每个容器内都包含一个独享的完整用户环境空间,并且一个容器内的变动不会影响其他容器的运行环境。容器技术使用了namespaces来进行空间隔离,通过文件系统的挂载点来决定容器可以访问哪些文件,通过cgroups来确定每个容器可以利用多少资源。此外容器之间共享同一个系统内核,这样当同一个库被多个容器使用时,内存的使用效率会得到提升。

  对于系统虚拟化技术来说,虚拟层为用户提供了一个完整的虚拟机:包括内核在内的一个完整的系统镜像。CPU虚拟化技术可以为每个用户提供一个独享且和其他用户隔离的系统环境,虚拟层可以为每个用户分配虚拟化后的CPU、内存和IO设备资源

  基于docker容器虚拟化与传统虚拟化对比

五、Docker原理

  Docker是容器引擎,把linux的cgroup、namespace等容器底层技术进行封装抽象,为用户提供了创建和管理容器的便捷界面(命令行和API)

六、Docker特点

  一次构建,可以运行在任何地方;很好的释全了跨平台和强一致性

七、Docker三组件

  镜像:镜像可以用来创建Docker容器的。一个镜像可以包含一个完整的操作系统环境和用户需要的其它应用程序,docker的镜像是只可读的,一个镜像可以创建多个容器。

  容器:容器是镜像创建的实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

  仓库:仓库是集中存放镜像文件的场所。每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

八、Docker带来的影响

优化资源使用:

以前我们一台32C128G物理机最多虚拟20台左右的4C4G虚机,每台虚拟机启动一个程序,一共部署20多个程序,机器平均利用率不超过20%,导致大量资源浪费;现在通过docker容器方式启动应用,由于容器共享操作系统网络,内存、cpu,我们一台物理机机器平均可以启动60个左右的容器,相当于跑60个左右的应用,经生产验证,应用的性能并没有实际损耗。容器停掉后,资源自动释放;避免资源定期回收
运维效率提升
以前我们对每个应用部署流程:申请资源——》创建虚机——》初始化运行环境——》部署应用程序包——》启动应用,整个流程需要5-7天;如果需要扩展实例时,需要同样的操作流程。容器化带来的变革:编写Dockerfile——》构建镜像——》拉去镜像并运行;Dockerfile中包含运行环境,只需要编写一次;容器运行在资源池中(提前预制好的),整个流程需要几分钟完成

环境一致性

传统方式中每一步可能会出现问题(人工或程序);容器化后构建的镜像始终如一,任何地方运行都不受影响

交付流程的改变

开发——》编译成war/jar——》提交运维部署申请——》运维定期处理——》通知业务上线成功——》业务验证——》发现问题——》通知运维回退;整个过程耗时较长,涉及开发、运维强耦合,任何一步失误导致服务不可用。?容器化变革:开发——》源代码/war/jar——》一键部署——》业务验证——》发现问题——》一键回滚;整个过程几分钟内完成,开发者、项目经理、产品经理等都可以独立完成

加速微服务落地

微服务化后,随着业务的增加、服务的拆分,服务的个数回暴增,以前可能几十个服务,现在变成了几百个服务甚至更多;服务的迭代上线、监控对传统的运维挑战更大,需要投入更多的人力物力去支持;容器化后,每个微服务就是一个容器,容器扩缩可以在秒级内实现,容器的监控有专门的监控工具,业务运行环境在容器中已经初始化好了,目前的运维团队可以更方便的去管理更多的服务。

以应用为中心

传统的应用部署需要先申请机器,考虑物理资源;容器化后,所有容器跑在一个资源池中,只需一次行初始化资源池,后面可以方便使用;业务开发者更聚焦在应用开发层面

加速混合云或多云数据中心建设

应用程序最终通过Dockerfile生成镜像,镜像存储在镜像仓库,由于docker的特性(一次构建、随处运行),在云端或其它数据中心只要安装简单的环境就可以拉去镜像镜像运行。

原文地址:http://blog.51cto.com/14084875/2329273

时间: 2024-10-02 09:56:27

容器化-Docker介绍的相关文章

.NETCore 实现容器化Docker与私有镜像仓库管理

原文:.NETCore 实现容器化Docker与私有镜像仓库管理 一.Docker介绍 Docker是用Go语言编写基于Linux操作系统的一些特性开发的,其提供了操作系统级别的抽象,是一种容器管理技术,它隔离了应用程序对基础架构(操作系统等)的依赖.相较于虚拟机而言,Docker共享的是宿主机的硬件资源,使用容器来提供独立的运行环境来运行应用.虚拟机则是基于Supervisor(虚拟机管理程序)使用虚拟化技术来提供隔离的虚拟机,在虚拟机的操作系统上提供运行环境!虽然两者都提供了很好的资源隔离,

.NET Core容器化之多容器应用部署-使用Docker-Compose

1.引言 紧接上篇.NET Core容器化@Docker,这一节我们先来介绍如何使用Nginx来完成.NET Core应用的反向代理,然后再介绍多容器应用的部署问题. 2. Why Need Nginx .NET Core中默认的Web Server为Kestrel. Kestrel is great for serving dynamic content from ASP.NET, however the web serving parts aren’t as feature rich as

Docker实用指南:将Python Web应用容器化

Docker实用指南:将Python Web应用容器化 提供 Zstack社区 前言 Web应用随时可能被攻击者利用来夺取整个主机的权限,这是很常见也是很恐怖的一件事.为了更高的安全性,就需要将不同应用之间进行隔离(尤其是在这些应用属于不同的用户的情况下),然而这种隔离的实现一直是个挑战.到目前为止,隔离性的实现方法已经有了很多,然而它们要么太过昂贵(时间的层面以及资源的层面),要么太过复杂(无论对开发者还是对管理员). 本文将讨论如何让"容器化"的Python Web应用跑在安全的沙

Docker最全教程——数据库容器化(十)

原文:Docker最全教程--数据库容器化(十) 终于按时完成第二篇.本来准备着手讲一些实践,但是数据库部分没有讲到,部分实践会存在一些问题,于是就有了此篇以及后续——数据库容器化.本篇将从SQL Server容器化实践开始,并逐步讲解其他数据库的容器化实践,中间再穿插一些知识点和实践细节.在编写的过程中,我一直处于一种矛盾的心理,是一笔带过呢?还是尽可能的将实践细节全部讲到位呢?最后,我选择了后者,虽然要花费更多的精力,但是既然开始了本次教程,就尽量写到位吧. 目录 数据库容器化 什么是数据库

Asp.NetCore轻松学-使用Docker进行容器化托管

前言 没有 docker 部署的程序是不完整的,在写了 IIS/Centos/Supervisor 3篇托管介绍文章后,终于来到了容器化部署,博客园里面有关于 docker 部署的文章比比皆是,作为硬核实战派,这里做的一定是一套打完带走的功法.本文使用的学习机器是由 Azure 倾情提供的 30 天试用版本,大家都可以申请的哈. 1. 为什么要使用 docker 1.1 docker 介绍 docker 带来的好处是显而易见的,使用 docker 可以在同一台服务器上部署多个版本的应用,彼此间不

一看就懂-Docker容器化

一.Docker简介 1.1 什么是docker docker的英文意思是 码头工人,意思就是搬运东西的意思,其实这和docker的特点是一样的,docker提供的就是一种容器化搬运东西(我们的软件.程序)的过程.docker自己本来是运行在操作系统上一个程序软件,它会提供一个容器环境,使我们的程序独立地运行在容器中,所以说,官方给docker起的这个名字也真是应景. 就连图标也是这么生动形象,富有诗意,让人浮想联翩....(这是去幼儿园的车,还没有拐进大学城) 试想下边这样一个场景:当我们把我

Docker应用容器化

Docker 的核心思想就是如何将应用整合到容器中,并且能在容器中实际运行. 将应用整合到容器中并且运行起来的这个过程,称为“容器化”(Containerizing),有时也叫作“Docker化”(Dockerizing). 容器是为应用而生的,具体来说,容器能够简化应用的构建.部署和运行过程. 完整的应用容器化过程主要分为以下几个步骤. 编写应用代码. 创建一个 Dockerfile,其中包括当前应用的描述.依赖以及该如何运行这个应用. 对该 Dockerfile 执行 docker imag

Docker管理套件使容器化变得更加井然有序

Docker之前发布了一个新的容器控制中心,称为Docker数据中心(DDC),其设计目的是用于大型和小型企业创建.管理和分发容器的一个集成管理控制台. DDC是由包括Docker Universal Control Plane(也是同时发布的)和Docker Trusted Registry等不同的商业组件组成,它也包括了开源组件比如Docker Engine.这个产品让企业在一个中心管理界面中就可以管理整个Docker化程序的生命周期,更加方便. 负责产品管理的SVP Scott Johns

在Docker Hub上你可以很轻松下载到大量已经容器化的应用镜像,即拉即用——daocloud国内镜像加速

Docker之所以这么吸引人,除了它的新颖的技术外,围绕官方Registry(Docker Hub)的生态圈也是相当吸引人眼球的地方. 在Docker Hub上你可以很轻松下载到大量已经容器化的应用镜像,即拉即用.这些镜像中,有些是Docker官方维护的,更多的是众多开发者自发上传分享的.而且你还可以在Docker Hub中绑定你的代码托管系统(目前支持Github和Bitbucket)配置自动生成镜像功能,这样Docker Hub会在你代码更新时自动生成对应的Docker镜像,是不是很方便?