Docker的学习--介绍和安装

什么是 Docker

Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。

Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。

在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

下面的图片比较了 Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。

为什么要使用 Docker?

首先,Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。 其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。

容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。

具体说来,Docker 在如下几个方面具有较大的优势。

1) 更快速的交付和部署

对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。

开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。

2) 更高效的虚拟化

Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。

3) 更轻松的迁移和扩展

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

4) 更简单的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

5) 对比传统虚拟机总结

特性
容器
虚拟机
启动 秒级 分钟级
硬盘使用 一般为 MB 一般为 GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个

Docker安装(Ubuntu 14.04)

1) 通过系统自带包安装

Ubuntu 14.04 版本系统中已经自带了 Docker 包,可以直接安装。

sudo apt-get update
sudo apt-get install -y docker.io
sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
sudo sed -i ‘$acomplete -F _docker docker‘ /etc/bash_completion.d/docker.io

如果使用操作系统自带包安装 Docker,目前安装的版本是比较旧的 1.0.0。 要安装更新的版本,可以通过使用 Docker 源的方式。之后要讲到的 Docker 加速器需要1.3.2版本以上,所以建议直接使用 Docker 源的方式安装最新版本。

2) 通过Docker源安装最新版本

要安装最新的 Docker 版本,首先需要安装 apt-transport-https 支持,之后通过添加源来安装。

sudo apt-get install apt-transport-https
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
sudo apt-get update
sudo apt-get install lxc-docker

Docker 的安装资源文件存放在Amazon S3,会间歇性连接失败。所以安装Docker的时候,会比较慢。 你可以通过执行下面的命令,高速安装Docker。

curl -sSL https://get.daocloud.io/docker | sh

适用于Ubuntu,Debian等大部分Linux,会3小时同步一次Docker官方资源。如果安装不成功,可以选择使用二进制包安装方式。 下载二进制包

Docker 的三个基本概念

1) 镜像(Image)

Docker 镜像就是一个只读的模板。

例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。

镜像可以用来创建 Docker 容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。

2) 容器(Container)

Docker 利用容器来运行应用。

容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

*注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。

3) 仓库(Repository)

仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 当然,用户也可以在本地网络内创建一个私有仓库。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

*注:Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。

Docker 加速器

由于国内网络问题的限制,你要从 Docker Hub 上下载一个镜像,非常慢,可能要等半天。国内就有公司(DaoCloud)推出了Docker 加速器(即Docker Hub Mirror服务),要使用该加速器,需要去 DaoCloud 注册一个帐号,得到相应的加速器地址。配置Docker加速器命令如下:

echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=http://×××××.m.daocloud.io\"" | sudo tee -a /etc/default/docker
sudo service docker restart

该脚本可以将--registry-mirror加入到你的Docker配置文件/etc/default/docker中。适用于Ubuntu14.04,其他版本可能有细微不同。其中×××××需要替换为你自己的地址。

尝试去拉镜像会发现速度变快很多:

docker pull ubuntu:14.04

Mirror是Docker的官方机制,它是Registry的一种特殊类型,在部署了Registry之后,需要开启Mirror模式并做一定的配置。具体的流程如下:

Docker Hub 由 Index 和 Registry 构成,Index 保存 Image Layer 的 hash 和关联关系等元数据(Metadata),Registry 用于存储 Image Layer 的实际二进制数据。在客户端没有配置 registry-mirror 参数的情况下,每一次docker pull,客户端都会先连接 Index 获取元数据,然后再连接 Registry 获取实际的 Image 文件。由于Docker Hub 的 Index 节点和 Regsitry 都部署国外,国内用户访问,经常遭遇连接超时或中断的情况,下载速度也极其缓慢。在启用了Mirror 之后,访问流程如下:

  • 客户端的 Docker Daemon 连接 Index 获取 Metadata,这一部分的数据量极小,直连国外的速度可以忍受。
  • 根据 Metadata 的信息,Docker Daemon 与 Mirror 服务器建立连接。如果 pull 的 Image 在 Mirror 上已经有缓存,就直接在 Mirror 上返回地址并下载。
  • 如果 Image 在 Mirror 并无缓存,Mirror 会与 Docker Hub Registry 建立连接,下载 Image,提供给用户的同时,在本地缓存。
  • Mirror 下载 Docker Hub Image 采用 stream 的方式,即可以一边下载,一边提供给客户端的 Docker Daemon,不必等Image完全下载完。

通过以上的描述,可以发现,对于常用的 Image,Mirror 缓存命中率会非常高,如 Ubuntu 等基础 Image,这会极大提高下载速度。同时,Docker Image 采用分层的结构,即使 Image 被更新,也只是下载最新一层非常少的增量数据。

Mirror 服务亦可以通过网络优化,加速对远端 Docker Hub Registry 的访问速度,如采用高速的商业 VPN 建立从 Mirror 到 Docker Hub Registry 的访问。通过七牛等云存储和 CDN 分发网络,会进一步提高国内客户端的下载速度。

参考摘录

registry中文文档:http://weilaihui.gitbooks.io/registry-doc/content/introduction/README.html

Docker中文指南:http://www.widuu.com/chinese_docker/

DaoCloud 宣布 Docker Hub Mirror 服务永久免费:http://www.open-open.com/news/view/130bab3

时间: 2024-10-29 19:10:54

Docker的学习--介绍和安装的相关文章

Docker系列一:Docker的介绍和安装

Docker介绍 Docker是指容器化技术,用于支持创建和实验Linux Container.借助Docker,你可以将容器当做重量轻.模块化的虚拟机来使用,同时,你还将获得高度的灵活性,从而实现对容器的高效创建.部署和复制,并能将其从一个环境顺利迁移至另外一个环境. Docker官方网站:http://www.docker.com Github Docker 源码:https://github.com/docker/docker 基础特性: 基于C/S架构应用程序 模块化 层与镜像版本控制

Docker的学习(一)Windows下安装docker环境以及基础的配置

Docker是什么我这里就不多做介绍了,相信大家都清楚,网上有很多介绍的文章所以作为菜鸟的我就不用我的眼光以及理解来为大家介绍了,还是那句话,这篇文章主要是用作记录学习过程,希望不会误导新人,也希望各位大神看到后可以点评一下不足的地方. 本次操作系统为win10,在Windows下Docker的安装方式有2种(对于Windows10的用户),一种是使用Docker for Windows这种方式只能在Win10使用(部分Win10用户也是不可以的,好比我“学习版系统”),这种方式从安装到配置都比

PHP教程:PHPUnit学习笔记(一)PHPUnit介绍及安装

PHP教程:PHPUnit学习笔记(一)PHPUnit介绍及安装 作者:罪惡 发布于:2011-4-9 19:15 Saturday PHP教程 最近学习并在项目中运用了PHPUnit做自动化测试,我将在博客上基于我的PHPUnit学习笔记进行连载,详细的介绍这个自动化测试框架. 笔记内容基本上基于PHPUnit的官方文档和例子,里面加上我自己理解的翻译和配合描述代码.本笔记使用的PHPUnit版本为3.5.13, 测试平台为ubuntu10.10 PHP5.3.3 什么是PHPUnit? PH

在Windows环境中开始Docker的学习和体验

研究docker有一段时间了,当然我主要的使用环境还是在Linux中,确实很方便. 但也有不少朋友希望使用Windows来工作学习,这里介绍一下在Windows中如何快速开始Docker的学习和体验吧 注意:由于docker原生只支持linux,所以使用Mac的用户,也需要跟Windows用户一样,采用一些额外的配置过程 注意:因为docker只支持64位的CPU,所以你的机器必须是64位的(而且要在BIOS里面启用虚拟化支持),Windows 7或者更高版本 1. 使用Docker Toolb

Docker容器学习梳理--容器间网络通信设置(Pipework和Open vSwitch)

自从Docker容器出现以来,容器的网络通信就一直是被关注的焦点,也是生产环境的迫切需求.容器的网络通信又可以分为两大方面:单主机容器上的相互通信,和跨主机的容器相互通信.下面将分别针对这两方面,对容器的通信原理进行简单的分析,帮助大家更好地使用docker.前面已经在Docker容器学习梳理--基础知识(2)这一篇中详细介绍了Docker的网络配置以及pipework工具. docker单主机容器通信 基于对net namespace的控制,docker可以为在容器创建隔离的网络环境,在隔离的

『中级篇』docker官网介绍(四)

从docker官网了解docker的历史,为了保证文章的质量,多增加了截图,想让各位老铁看的比较爽--###官网 docker官网介绍 ###分类 社区版(Docker Community Edition (CE) ) 企业版(Docker Enterprise Edition (Docker EE)) ###版本由来最早的docker版本都是从1.0慢慢的累积到1.13,在2017年3月份docker的版本发生了变化变成了版本2017.03版本,也形成了CE和EE版本,从此之后docker的版

Laravel介绍及安装

Laravel是目前最流行的php框架,此前已有耳闻,还没有好好的研究下,目前由于项目的需求要用到这个框架,所以只能硬着头皮学习了.今天算是Laravel学习的第一天,先讲讲laravel框架的安装流程. 下载最新版本Laravel框架,可以到Laravel官网下载,也可以到国内社区下载,下载后解压到服务器网根目录. LaraveL框架使用Composer(PHP包管理工具)来管理代码依赖性. 首先,你需要下载Composer的PHAR打包文件( composer.phar ),下载完成后把它放

Docker在CentOS下的安装

工欲善其事,必先利其器. 在我们以后的Docker学习中,都推荐使用CentOS6.5作为学习平台,毕竟Docker的内核也是基于Linux的.本文主要分享笔者在CentOS下的安装Docker的过程. 安装环境:CentOS6.5. 第一步: 首先进入Docker的官方文档,我们迅速找到CentOS下的安装说明. 在CentOS6以后的版本中,Docker包必须在EPEL库中获取,所以我们必须先安装EPEL.如果不了解EPEL(Extra Package for Enterprise Linu

Memcached介绍及安装

memcached:由LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件,现已成为mixi,hatena,Facebook,Vox,LiveJournal等众多服务器提高Web应用程序扩展性的重要因素: memcached是一款开源.高性能.分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序.它是一个基于内存的"键值对"存储,用于存储数据库调用.API调用或页