一、Docker概述
1.1、虚拟化技术发展史
在虚拟化技术出现之前,如果我们想搭建一台服务器,我们需要做如下的工作:
→ 购买一台硬件服务器。 → 在硬件服务器上安装配置操作系统系统。 → 在操作系统之上配置应用运行环境。 → 部署并运行应用。
这种方式的缺点就是:
- 部署应用非常慢。
- 需要花费的成本非常高(时间成本、服务器成本)。
- 应用迁移麻烦;要将应用迁移,又得重复部署应用。
所以,为了解决这个问题,后续出现了虚拟化技术。
1.2、虚拟化技术
虚拟化(英语:Virtualization)是一种计算机资源管理技术,是将计算机的各种硬件资源,比如服务器、网络、CPU、内存及存储等,予以抽象和转换后呈现出一套新的硬件资源环境,在这一套新的硬件环境下可以安装我们的操作系统,部署我们的应用运行环境等,它打破计算机硬件资源不可切割的障碍,使我们可以比原本的计算机硬件资源结构更好的方式来组合应用这些资源。
1.3、虚拟化技术的优缺点
1.3.1、虚拟化技术的优点
一台物理服务器可以虚拟化出多个虚拟的服务器,让计算机资源得以充分利用。
1.3.2、虚拟化技术的缺点
- 每创建一个虚拟机的时候,都会创建一个操作系统,这个操作系统会占用很多资源,这样无疑大大的增加了资源的消耗,当安装的虚拟机越多,资源消耗就越多。
- 环境兼容性问题,开发时的环境运行正常,部署到虚拟机环境测试则有可能发生错误。
1.4、虚拟化分类
虚拟化一般分为:
- 硬件级虚拟化(hardware-level-virtualization)
- 操作系统级虚拟化(os-level-virtualization)
1.4.1、硬件级虚拟化
硬件级虚拟化 是运行在硬件之上的虚拟化技术,它的核心技术是Hypervisor 发音 [haipə'vaizə],Hypervisor 是一种运行在基础物理服务器硬件之上的软件层,可以虚拟化硬件资源,例如 cpu、硬盘、内存资源等。然后我们可以通过在虚拟化出来的资源之上安装操作系统,这也就是所谓的虚拟机。像 VMWare, VirtualBox 等都是使用该技术,我们经常使用的桌面版的虚拟机 VMWare 就是采用这种虚拟化技术。
通过 Hypervisor 层,我们可以创建不同的虚拟机,并且每个虚拟机都是分离、独立的,这样一来,我们就可以在一台硬件服务器和本地操作系统之上虚拟化出多个服务器,用来部署我们的应用
1.4.2、操作系统级虚拟化
操作系统级虚拟化,也被称作容器化,是操作系统自身的一个特性,它允许多个相互隔离的用户空间实例的存在。这些用户空间实例也被称作为容器。普通的进程可以看到计算机的所有资源而容器中的进程只能看到分配给该容器的资源。
通俗来讲,操作系统级虚拟化将操作系统所管理的计算机资源,包括进程、文件、设备、网络等分组,然后交给不同的容器使用。容器中运行的进程只能看到分配给该容器的资源。从而达到隔离与虚拟化的目的。
1.5、容器技术的发展
基于硬件级虚拟化技术的缺点和不足,后续又发展出来了另一种虚拟化技术,即操作系统级虚拟化技术。
操作系统级虚拟化 是运行在操作系统之上的虚拟化技术,它模拟的是运行在一个操作系统上的多个不同进程,并将其封装在一个密闭的容器里面,该技术也称为容器化技术。
在容器化技术领域,Docker 是目前最流行的一种实现。Docker 发布于 2013 年,Docker 基于 LXC 技术,LXC 是 Linux 平台上的容器化技术实现。
LXC 是 Linux Container 的简写,它是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,它与宿主机使用同一个内核,性能损耗小,这种技术是 Linux 提供的,但是直到 Docker出世,该技术才被发挥出来。
1.6、Docker的发展史
2010年,几个年轻人在旧金山成立了一家做PaaS(Platform as a Service,平台及服务)平台的创业公司,起名为 dotCloud,并且还获得了创业孵化器 Y Combinator 的支持,虽然 dotCloud 期间获得过一些融资,但随着 IT 巨头(微软、谷歌、亚马逊等)也杀入 PaaS 平台,dotCloud举步维艰。
2013 年,dotCloud 的创始人,28 岁的 Solomon Hykes 做了一个艰难的决定:将 dotCloud 的核心引擎开源,这项核心引擎技术能够将 Linux容器中的应用代码打包,轻松的在服务器之间迁移。
然而这个基于 LXC(Linux Container)技术的核心管理引擎开源后,让全世界的技术人员感到惊艳,感叹这一切太方便了!也正是dotCloud 的创始人这个艰难的孤注一掷的决定让所有的 IT 巨头们也为之一颤。
从 2013 年 Docker 开源开始,Docker 技术风靡全球,于是 dotCloud公司决定将 Docker 作为主要业务进行发展,并把公司改名为 DockerInc,全身心投入到 Docker 的开发中,并于 2014 年 8 月,Docker 宣布把 PaaS(Platform as a Service,平台及服务)业务 dotCloud 出售给位于德国柏林的同样专注于平台即服务业务的提供商 cloudControl,从此 Docker 可以轻装上阵,专注于 Docker 的研发。
从 2013 年 2 月决定开源,到 2013 年 3 月 20 日发布 Docker 0.1,只用了一个月时间。当前 Docker 的最新版本是 18.03。
Docker 迅速成长,在 2014 年 6 月 9 日,Docke 团队宣布发布 Docker1.0,1.0 版本标志着 Docker 平台已经足够成熟,并可以被应用到生产产品中(还提供了一些需要付费的支持选项)。
一年的时间,使一个围绕着 Docker 的小型初创企业生态体系逐渐形成。Docker 先后赢得了 Google、 微软、Amazon、VMware 等 IT 巨头的青睐,他们纷纷表示将保证自己平台与 Docker 容器技术的兼容性。
2016 年 2 月 29 日,CloudControl 公司在其官方博客中宣告即将破产,隶属于cloudControl公司的dotCloud也宣布将于2月29日关闭服务。作为 Docker 的前身,DotCloud 目睹 Docker 的成长,成为云平台的一颗新星,而自己却力不从心,Docker 的繁荣间接地导致 Docker 的前身 dotCloud 在 PaaS 平台的衰败,兴衰成败,令人唏嘘不已,这也许是颠覆式创新的经典案例。
1.7、Docker是什么
Docker 是一个开源的应用容器引擎,它基于 Google 公司推出的Go 语言实现,项目代码托管在 GitHub 上进行维护;
Docker 技术让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,打包好的容器可以发布到任何流行的 Linux 服务器上运行,这样就可以解决开发环境与运维环境不一致的问题了,所以容器技术解决了开发和运维之间的矛盾,让开发专注于开发,运维专注于运维,不要被环境问题所打扰。
Docker 彻底释放了虚拟化的威力,极大降低了计算机资源供应的成本,Docker 重新定义了程序开发测试、交付和部署过程,Docker 提出了“构建一次,到处运行”的理念,让应用的开发、测试、部署和分发都变得前所未有的高效和轻松!
Docker 是一种轻量级的操作系统虚拟化解决方案,Docker 的基础是 Linux 容器(LXC)技术,在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单;Docker 自开源后受到广泛的关注,Docker最早是基于Ubuntu开发的,但后续 CentOS、Debian、Fedora 等主流的 Linux 操作系统都支持 Docker。
简单地说,Docker 是对软件和其依赖环境的标准化打包,应用之间相互隔离,共享一个 OS Kernel(解决了资源浪费的问题),可以运行在很多主流操作系统上,Docker 本身不是容器,Docker 只是管理容器的引擎。
1.8、容器和虚拟机器的区别
- 容器是将代码和环境的关系打包在一起的一个集合,而虚拟机是在物理层面上,分出来的一个操作系统。
- 多个容器可以运行在同一台物理服务器上,并共享一个操作系统的内核资源。多个虚拟机也可以运行在同一台机器上,但每个虚拟机都需要一个完整的操作系统。
- 容器是在本地操作系统层面上实现虚拟化,直接复用本地主机的操作系统,不需要单独安装操作系统,而传统的虚拟化技术方式则需要单独安装每个虚拟机的操作系统。
比较项 | 容器 | 虚拟机 |
启动时间 | 秒级 | 分钟级 |
硬盘空间 | 一般为几十 MB | 一般为 10GB |
性能 | 接近原生 | 接近原生 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
操作系统 | 与宿主机共享OS | 宿主机上允许虚拟机的OS |
1.9、为什么使用 Docker
作为一种新兴的虚拟化技术,Docker 跟传统的虚拟化方式相比具有众多的优势。
- Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。
- Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。
- 容器除了运行其中的应用外,基本不消耗额外的系统资源,使得应用的性能很高。传统虚拟机方式运行 10 个完全不同的应用可能我们会起 10 个虚拟机来部署,而 Docker 只需要启动 10 个隔离的应用即可。
- Docker 可以更快速的交付和部署,大量地节约开发、测试、部署的时间,对开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
- 更高效的虚拟化,Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
- 更轻松的迁移和扩展,Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等,这种兼容性可以让用户轻松地把一个
应用程序从一个平台直接迁移到另一个平台。
二、Docker环境搭建
2.1、Docker版本
Docker 从 2013 年 3 月 20 日发布 Docker 0.1,到现在已经发布了多个版本,从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。
- Docker CE:社区免费版,可永久免费使用。
- Docker EE:企业版,功能更全,更强调安全,但需付费使用。
2.2、Docker的安装
CentOS7 系统可以直接通过 yum 进行安装。
查看是否已经安装了Docker
yum list installed | grep docker # 如果有的话则删除对应的包 yum remove docker...... 复制代码
使用yum进行安装
yum install docker -y 复制代码
设置Decker开机自启
# 启动 docker 服务端 systemctl start docker # 启用 docker 服务开机自启 systemctl enable docker 复制代码
查看Docker版本检测是否安装成功
docker -v 复制代码
卸载Docker
yum remove docker.x86_64 -y yum remove docker-client.x86_64 -y yum remove docker-common.x86_64 -y 复制代码
2.3、启动Docker
启动
systemctl start docker # 或者使用这一条也可以 service docker start 复制代码
停止
systemctl stop docker # 或者使用这一条 service docker stop 复制代码
重启
systemctl restart docker # 或者使用这一条也可以 service docker restart 复制代码
检查 docker 进程的运行状态
systemctl status docker # 或者是这一条也可以 service docker status 复制代码
查看 docker 进程
ps -ef | grep docker