1. Docker介绍
1.1 什么是虚拟化
在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如:服务器、网络、内存、存储等等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原来的组态更好的方式来应用这些资源,这些资源的核心虚拟部分是不受现有资源的架设方式,低于或者物理组态所限制,一般所指的虚拟化资源包括计算能力和资料存储。
在实际的生产过程中,虚拟化技术主要是用来解决高性能的物理硬件产能过剩和老的硬件产能过低的重用重组,透明化底层物理硬件,从而最大化的利用物理硬件,对资源充分利用虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip),桌面虚拟化、服务虚拟化、虚拟机等等。
虚拟化简单讲,就是把一台物理计算机虚拟成多台逻辑计算机,每个逻辑计算机里面可以运行不同的操作系统,相互不受影响,这样就可以充分利用硬件资源
1.2 初识Docker
- Docker是一个开源的应用容器引擎
- 诞生于2013年初,基于Go语言实现,dotCloud公司出品(后改名为Docker Inc)
- Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植的容器中,然后发布到任何流行的linux服务器上
- 容器是完全使用沙箱机制,相互隔离
- 容器性能开销极低
- Docker从17.3版本之后分为CE(Community Edition社区版)和EE(Enterprise Edition:企业版)
1.3 容器与虚拟机的比较
什么是虚拟机
虚拟机是一个计算机系统的仿真,简单来说,虚拟机可以实现在一台物理计算机上模拟多台计算机运行任务。
操作系统和应用共享一台或多台主机(集群)的硬件资源,每台VM有自己的OS,硬件资源是虚拟化的。管理程序(hypervisor)负责创建和运行VM,它连接了硬件资源和虚拟机,完成server的虚拟化。
由于虚拟化技术和云服务的出现,IT部门通过部署VM可以可减少cost提高效率。

VMs也消耗大量系统资源,每个VM不仅运行一个OS的完整copy并且需要所有硬件的虚拟化copy,这消耗大量RAM和CPU。相比单独计算机,VM是比较经济的,但对于一些应用VM是过度浪费的,需要容器。
什么是容器
容器是将操作系统虚拟化,这与VM虚拟化一个完整的计算机有所不同。
容器是在操作系统之上,每个容器共享OS内核,执行文件和库等。共享的组件是只读的,通过共享OS资源能够减少复现OS的代码,意味着一台server仅安装一个OS可以运行多个任务。容器是非常轻量的,仅仅MB水平并且几秒即可启动。相比容器,VM需要几分钟启动,并且大小也大很多。
与VM相比,容器仅需OS、支撑程序和库文件便可运行应用,这意味你可以在同一个server上相比VM运行2-3倍多的应用,并且,容器能帮助创建一个可移植的,一致的开发测试部署环境。

比较:
| 特性 | 虚拟机 | 容器 |
|---|---|---|
| 隔离级别 | 操作系统级 | 进程级 |
| 隔离策略 | 运行于Hypervisor上 | 直接运行在宿主机内核中 |
| 系统资源 | 5-15% | 0-5% |
| 启动速度 | 慢,分钟级 | 快,秒级 |
| 占用磁盘空间 | 非常大,GB-TB级 | 小,KB-MB甚至KB级 |
| 并发性 | 一台宿主机十几个,最多几十个 | 上百个,甚至上百上千个 |
| 高可用策略 | 备份、容灾、迁移 | 弹性、负载、动态 |
2. Docker组件
2.1 Docker服务端和客户端
Docker是一个客户端-服务端(C/S)架构程序,Docker客户端只需要向Docker服务端或者守护进程发出请求,服务端或者守护进程完成所有工作返回结果,Docker提供了一个命令行工具Docker以及一整套的Restful API,可以在同一台宿主机器上运行Docker守护进程或者客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程
docker引擎是一个c/s结构的应用,主要组件见下图:

- Server是一个常驻进程
- REST API 实现了client和server间的交互协议
- CLI 实现容器和镜像的管理,为用户提供统一的操作界面
2.2 Docker构架
Docker使用C/S架构,Client 通过接口与Server进程通信实现容器的构建,运行和发布。client和server可以运行在同一台集群,也可以通过跨主机实现远程通信。

2.2.1 Docker镜像
Docker 镜像(Image)就是一个只读的模板。例如:一个镜像可以包含一个完整的操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
镜像(Image)就是一堆只读层(read-only layer)的统一视角,也许这个定义有些难以理解,看看下面这张图:

右边我们看到了多个只读层,它们重叠在一起。除了最下面一层,其它层都会有一个指针指向下一层。这些层是Docker内部的实现细节,并且能够在docker宿主机的文件系统上访问到。统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
2.2.2 Docker容器
Docker 利用容器(Container)来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
创建Container首先要有Image,也就是说Container是通过image创建的。
Container是在原先的Image之上新加的一层,称作Container layer,这一层是可读可写的(Image是只读的)。
在面向对象的编程语言中,有类跟对象的概念。类是抽象的,对象是类的具体实现。Image跟Container可以类比面向对象中的类跟对象,Image就相当于抽象的类,Container就相当于具体实例化的对象。
Image跟Container的职责区别:Image负责APP的存储和分发,Container负责运行APP。

2.2.3 Registy(注册中心)
仓库(Repository)是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括 时速云 、网易云 等,可以提供大陆用户更稳定快速的访问。当然,用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。
3. Docker的安装和启动
3.1 服务器规划
- 服务器: node1
3.2 安装Docker
Docker官方建议在Ubuntu中安装,因为Docker是基于Unbantu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的,在很多版本的Centos中是不支持更新最新的一些补丁包的。
由于我学习的环境都使用的Centos,因此这里将Docker安装到Centos上,注意:建议安装在Centos7.x以上的版本,在Centos6.x的版本中,安装前需要安装其他很多的环境,而且Docker很多补丁不支持更新。
3.2.1 验证Linux内核版本
Docker要求Linux的Kernel版本必须大于3.8,推荐使用3.10及更高,所以需要先验证CentOS的内核是否大于3.8。
- 使用uname命令验证
uname -r
3.2.2 卸载已安装的Docker
如果已经安装过Docker,请先卸载,再重新安装,来确保整体的环境是一致的。由于这个虚拟机是新创建的,所以并没有安装过Docker,但如果同学们使用已有的虚拟机,则需要按照下面的命令卸载。
- 使用yum卸载Docker库
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
3.2.3 安装yum工具包和存储驱动
yum install -y yum-utils device-mapper-persistent-data lvm2
3.2.4 安装Docker的yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
如果连接超时,可以使用alibaba源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.2.5 安装Docker-19.03.5
yum install docker-ce docker-ce-cli containerd.io
3.2.6 启动docker
sudo service

最低0.47元/天 解锁文章





