Docker简介

官方网站:

https://www.docker.com/

Docker是什么?

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙盒机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包装系统。Docker是dotCloud公司开源的一个基于LXC(Linux Container)的高级容器引擎,源代码托管在Github上, 基于go语言并遵从Apache2.0协议开源。Docker让开发者可以打包他们的应用以及依赖包到一个可移植的container中,然后发布到任何流行的Linux机器上。

扩展:

沙盒也叫沙箱,英文sandbox。在计算机领域指一种虚拟技术,且多用于计算机安全技术。安全软件可以先让它在沙盒中运行,如果含有恶意行为,则禁止程序的进一步运行,而这不会对系统造成任何危害。

LXC为Linux Container的简写。Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。LXC主要通过来自kernel的namespace实现每个用户实例之间的相互隔离,通过cgroup实现对资源的配额和度量。

docker

[ˈdɒkə®] 码头工人

注:

docker服务相当于鲸鱼,container容器就是集装箱。

container :集装箱,容器

docker: 码头工人

https://github.com/docker

docker容器技术和虚拟机对比

相同点: docker容器技术和虚拟机技术,都是虚拟化技术。

  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便.

  • docker相对于VM虚拟机,少了虚拟机操作系统这一层,所以docker效率比虚拟机高

  • 你的物理系统启动使用多长时间? 在docker上启动一个实例 1-2秒 是不是吃了一鲸?别着急再往下看!

Docker 架构

工作流程:服务器A上运行docker Engine 服务,在docker Engine上启动很多容器container , 从外网Docker Hub上把image操作系统镜像下载来,放到container容器运行。这样一个容器的实例就运行起来了。最后,通过Docker client 对docker 容器虚拟化平台进行控制。

dockerhub:dockerhub是docker官方的镜像存储站点,其中提供了很多常用的镜像供用户下载,如ubuntu, centos等系统镜像。通过dockerhub用户也可以发布自己的docker镜像,为此用户需要注册一个账号,在网站上创建一个docker仓库。

Docker 核心技术

  1. Namespace – 实现Container的进程、网络、消息、文件系统和主机名的隔离。

  2. Cgroup – 实现对资源的配额和度量。

**注:**Cgroup的配额,可以指定实例使用的cpu个数,内存大小等。就像如下图,vmware虚拟机中的硬件配置参数。

Docker特性

  • 文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。

  • 资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup。

  • 网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址。

  • 日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。

  • 变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。

  • 交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。

优点:

  1. 一些优势和VM一样,但不是所有都一样。比VM小,比VM快,Docker容器的尺寸减小相比整个虚拟机大大简化了分布到云和从云分发时间和开销。Docker启动一个容器实例时间很短,一两秒就可以启动一个实例。

  2. 对于在笔记本电脑,数据中心的虚拟机,以及任何的云上,运行相同的没有变化的应用程序,IT的发布速度更快。Docker是一个开放的平台,构建,发布和运行分布式应用程序。Docker使应用程序能够快速从组件组装和避免开发和生产环境之间的摩擦。

  3. 您可以在部署在公司局域网或云或虚拟机上使用它。

  4. 开发人员并不关心具体哪个Linux操作系统使用Docker,开发人员可以根据所有依赖关系构建相应的软件,针对他们所选择的操作系统。然后,在部署时一切是完全一样的,因为一切都在DockerImage的容器在其上运行。开发人员负责并且能够确保所有的相关性得到满足。

  5. Google,微软,亚马逊,IBM等都支持Docker。

  6. Docker支持Unix/Linux操作系统,也支持Windows或Mac

缺点(局限性):

  1. Docker用于应用程序时是最有用的,但并不包含数据。日志,跟踪和数据库等通常应放在Docker容器外。 一个容器的镜像通常都很小,不适合存大量数据,存储可以通过外部挂载的方式使用。比如使用:NFS,ipsan,MFS等, -v 映射磁盘分区

  2. docker只用于计算,存储交给别人。

Docker基本概念

  1. Docker镜像(Image)

  2. Docker容器(Container)

  3. Docker仓库(Repository)

Docker镜像

  • Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。Docker设计时利用的是分层存储的架构,镜像并非像ISO那样的打包文件。它是由多层文件系统联合组成。镜像构建时,会一层一层构建,前一层是一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。

  • 在构建镜像的时候需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

Docker容器

  • 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。容器的实质时进程,但与直接在宿主执行的进程不同,容器进程运行属于自己的独立命名空间。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。

  • 容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器可以随意删除、重新run,数据却不会丢失。

Docker仓库

  • 镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。

  • 一个Doker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应软件的各个版本。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签。以Persona-X为例,Persona-X是仓库的名字,其内包含不同的版本标签,如,1.0,1.1,1.2,1.3。

  • Doker Registry公开服务是开放给用户使用、允许用户管理镜像的Registry服务。最常使用的Registry公开服务是官方的Docker Hub。

  • Doker Registry私有服务是指用户在本地搭建私有Docker Registry

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值