文章目录
第一章 Docker介绍
1.1 背景介绍
Docker是一个开源的应用容器引擎,基于LXC(Linux Container)内核虚拟化技术实现,提供一系列更强的功能,比如镜像、Dockerfile等。Docker理念是将应用及依赖包打包到一个可移植的容器,可发布到任意Linux发行版Docker引擎上。使用沙箱机制(对内容进行了独立包装)运行程序,程序之间互相隔离;Docker使用Go语言开发。
Docker采用C/S架构,Docker daemon作为服务端接受来自客户端请求,并处理这些请求,比如创建、运行容器等。客户端为用户提供了一系列的指令。
vmware虚拟机 + centos(ISO镜像) = 得到一个可以使用的Linux系统
传统的纯物理部署的缺点:
虚拟化技术:
虚拟化也有局限性,每一个虚拟机都是一个完整的操作系统,要分配系统资源,虚拟机多道一定程度时,操作系统本身资源也就消耗殆尽,或者说必须扩容。
虚拟化:云服务器,其实就是使用网上的虚拟机。
虚拟机工具巨头:
- vmware workstation (属于个人学习使用),主要是用于windows平台。创建虚拟机(安装系统)
- linux下的虚拟工具,kvm工具。(创建虚拟机+安装各种系统)
- 企业版虚拟化 vmware esxi虚拟化工具,高性能服务器结合。进行平台资源虚拟化。
云计算:将计算工作,放在云上去执行。例如:去阿里云购买RDS数据库服务,不需要自己搭建数据库,做数据库高可用等等。
1.2 虚拟化背景:
虚拟化(技术)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。
全虚拟化:VMware提出一种二进制翻译技术。VMware在虚拟机操作系统和宿主计算机(物理计算机+windows/mac操作系统)之间扮演一个桥梁的角色,将虚拟机中的要执行的指令“翻译”成恰当的指令在宿主物理计算机上执行,以此来模拟执行虚拟机中的程序。
半虚拟化(Xen内核定制修改),与全虚拟化相比避免了敏感指令(删除之类的)对本体系统的修改,降低操作风险。这项技术的代表是Xen,它最大的问题是需要修改操作系统源码,Linux开源倒是可以,windows是闭源的。
硬件辅助虚拟化(VT/AMD -v),CPU辅助虚拟化。
KVM-QEMU,KVM全称for Kernel -based Virtual Machine,意为基于内核的虚拟机。KVM作为一项虚拟化技术已经集成到Linux内核之中。也会安装出一个完整的操作系统,与VMware在这方面相同。
容器技术-LXC&Docker,前面的技术其虚拟化的目标都是一台完整的计算机,拥有底层的物理硬件、操作系统和应用程序执行的完整环境。为了让虚拟机中的程序实现像在真实物理机器上运行“近似”的效果,背后的HyperVisor做出了大量的工作(相当于装东西的盒子太过豪华,对于要装的内容来说其实没必要)。而docker 其实就满足了程序运行的环境需要(大小与外观适合的盒子,说装袜子就装袜子,想装衣服就重拿个盒子)。
1.3 容器技术
Docker 最初是DotCloud公司在法国期间发起的一个公司内部项目,后来以Apache2.0授权协议开源,其是由go语言开发的,基于Linux内核的Cgroups、NameSpace,以及Union FS(联合唯一文件系统)等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。
由于隔离的进程独立宿主机和其他隔离的进程(在本体主机上,运行两个端口相同的软件也不会冲突),也被称之为容器。
Docker被定义为开源的容器引擎,可以方便的对容器进行管理。如对镜像打包封装、引入Docker Registry对镜像统一管理。利用Docker可以实现开发、测试、生产环境的部署一致性,极大的减少运维成本。
1.4 容器和虚拟机的差异
1.4.1 传统虚拟机技术
虚拟机是虚拟出一套硬件,在其上运行一个完整的操作系统,例如我们使用KVM,指定系统镜像,然后装系统,最终可以使用,在该系统上再运行所需的应用程序
KVM创建虚拟机时,指定较少的CPU, 内存,硬盘等资源,虚拟机性能较低。
1.4.2 容器技术
容器内的应用程序直接运行在宿主机的内核上,容器内没有自己的内核,也没有对硬件进行虚拟,因此容器比起虚拟机更为轻便。(容器内的程序,就好比直接运行在宿主机上,能够使用宿主机最大的硬件资源,但程序之间又是隔离的。)
1.4.3 容器对比KVM的好处
- 容器能够提供宿主机原生的性能,而KVM虚拟机是分配宿主机硬件资源,性能较弱。
- 同样配置的宿主机,最多可以启动10个虚拟机的话,可以启动100+的容器数量。
- 启动一个KVM虚拟机,得有一个完整的开机流程,花费时间较长,或许得20s,而启动一个容器只需要1s.
- KVM需要硬件CPU的虚拟化支持,而容器不需要。
- docker提供了除内核以外完整的运行时环境,确保了应用环境的一致性。
第二章 Docker 基础组件
运行镜像生成容器。
2.1 Docker Daemon
安装使用Docker, 得先运行Docker Daemon进程(服务),用于管理docker。
- 镜像 images,构建容器(我们将应用程序所需的环境,打包为镜像文件)。镜像仓库(dockerhub),用于保存镜像文件,提供上传、下载镜像,作用好比GitHub。
- 容器 containers
- 网络 network
- 数据卷 Data Volumes
2.2 Rest 接口
提供和Daemon交互的Api接口
2.3 Docker Client
客户端使用Rest Api和Docker Daemon进行访问。
2.4 Docker 平台组成
2.5 Images
镜像是一个只读模板,用于创建容器,也可以通过Dockerfile文本描述镜像的内容。镜像的概念类似于编程开发里面对象的类,从一个基类开始(基础镜像Base Image)。构建容器的过程,就是运行镜像,生成容器实例。
Docker镜像的描述文件是Dockerfile,包含了如下的指令。
- FROM定义基础镜像
- MAINTAINER 作者
- RUN 运行Linux命令
- ADD 添加文件/目录
- ENV 环境变量
- CMD 运行进程
Dockerfile,将你部署项目的操作,写成一个部署脚本,这就是dockerfile,且该脚本还能够构建出 镜像文件。
2.6 Container
容器是一个镜像的运行实例,镜像>容器。
创建容器的过程:
- 获取镜像,如
docker pull centos
,从镜像仓库拉取。 - 使用镜像创建容器。
- 分配文件系统,挂载一个读写层,在读写层加载镜像。
- 分配网络/网桥接口,创建一个网络接口,让容器和宿主机通信。
- 容器获取IP地址。
- 执行容器命令,如/bin/bash
- 反馈容器启动结果。
第三章 安装docker
提前准备好一个宿主机(vmware 去创建一个linux机器,然后安装docker去使用),虚拟化+容器
基础配置:
wget -0 /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -0 /etc/yum.repos.d/epel.repo http://mirrors