Docker
什么是Docker
官网:https://hub.docker.com/
Docker时Docker.Lnc公司开源的一个基于LXC技术之上搭建的Container容器引擎,源代码托管在Github上,基于Go语言并遵从Apache2.0协议开源。
Docker属于Linux容器的一种封装,提供简单易用的容器使用接口。
Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,就不用担心环境问题。
总体来说,Docker的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
目的就是为了能运行一个进程,不受其他的干扰;容器前身jail
jail(freebsd)→vserver(chroot change root directory)→libcontainer → runC
增加了系统的安全性,限制了用户的权力;
在经过 chroot 之后,在新根下将访问不到旧系统的根目录结构和文件,这样就增强了系统的安全性。这个一般是在登录 (login) 前使用 chroot,以此达到用户不能访问一些特定的文件。
建立一个与原系统隔离的系统目录结构,方便用户的开发;
使用 chroot 后,系统读取的是新根下的目录和文件,这是一个与原系统根下文件不相关的目录结构。在这个新的环境中,可以用来测试软件的静态编译以及一些与系统不相关的独立开发。
切换系统的根目录位置,引导 Linux 系统启动以及急救系统等。
chroot 的作用就是切换系统的根位置,而这个作用最为明显的是在系统初始引导磁盘的处理过程中使用,从初始 RAM 磁盘 (initrd) 切换系统的根位置并执行真正的 init。另外,当系统出现一些问题时,我们也可以使用 chroot 来切换到一个临时的系统。
实现切根以后,使用chroot就能把子目录当根使用
Docker版本
docker-ce是docker公司维护的开源项目,是一个基于moby项目的免费的容器产品
docker-ee是docker公司维护的闭源产品,是docker公司的商业产品。
Docker编排工具
machine+swarm+compose
mesos+marathon
kubernetes → k8s
Moby是继承了原先的docker的项目,是社区维护的的开源项目,谁都可以在moby的基础打造自己的容器产品
CNCF(Cloud Native Computing Foundation)
OCI(Open Container Initiative)
OCF(Open Container Format)
Docker基础概念
- image镜像
docker镜像就是一个只读模板,比如,一个镜像可以包含一个完整的centos,里面仅安装apache或用户的其他应用,镜像可以用来创建docker容器,另外docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下周一个已经做好的镜像来直接使用
- container容器
docker利用容器来运行应用,容器是从镜像创建的运行实例,它可以被启动,开始、停止、删除、每个容器都是互相隔离的,保证安全的平台,可以吧容器看做是要给简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行再其中的应用程序
- repostory仓库
仓库是集中存储镜像文件的仓库,registry是仓库主从服务器,实际上参考注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)
仓库分为两种,公有参考,和私有仓库,最大的公开仓库是docker Hub,存放了数量庞大的镜像供用户下周,国内的docker pool,这里仓库的概念与Git类似,registry可以理解为github这样的托管服务
Docker的组成
官方文档https://docs.docker.com/get-started/overview/
docker组成 | |
---|---|
Docker Host(主机) | 一个物理机或者虚拟机,用于运行Docker服务进程和容器 |
Docker Server(服务端) | Docker守护进程,运行docker容器 |
Docker Client(客户端) | 客户端使用Docker命令或其他工具调用docker API |
Docker Registry(仓库) | 保存镜像的仓库 |
Docker images(镜像) | 创建实例使用的模板 |
Docker Container(容器) | 从镜像生成对外提供服务的一个或一组服务 |
Docker与虚拟化技术主机级虚拟化:
虚拟化技术回顾
Type-I硬件级别(直接在硬件平台上安装hypervisor虚拟机监视器):ESXI
Type-II软件级别(在宿主机操作系统HostOS安装 虚拟机管理器Virtual Machine Manger VMM): VMware workstation,VirtualBox,Kvm,Xen(半虚拟化)
+-----+-----+-----+-----+
|App A|App B|App C|App D|
+-----+-----+-----+-----+ +-----+-----+-----+-----+
|App A|App B|App C|App D| |Guest|Guest|Guest|Guest|
+-----+-----+-----+-----+ | OS0 | OS1 | OS2 | OS3 |
|Guest|Guest|Guest|Guest| +-----+-----+-----+-----+
| OS0 | OS1 | OS2 | OS3 | | Hypervisor |
+-----+-----+-----+-----+ +-----------------------+
| Hypervisor | | Host OS |
+-----------------------+ +-----------------------+
| Hardware | | Hardware |
+-----------------------+ +-----------------------+
Type I Type II
容器技术
容器和Type II虚拟机、物理机的区别见下图:
+-----+-----+-----+-----+ +-----+-----+-----+-----+
|App A|App B|App C|App D| +-----+-----+-----+-----+ |App A|App B|App C|App D|
+-----+-----+-----+-----+ |App A|App B|App C|App D| +-----+-----+-----+-----+
|+---------------------+| +-----+-----+-----+-----+ |Guest|Guest|Guest|Guest|
|| Runtime Library || |Lib A|Lib B|Lib C|Lib D| | OS0 | OS1 | OS2 | OS3 |
|+---------------------+| +-----+-----+-----+-----+ +-----+-----+-----+-----+
|| Kernel || | Container Engine | | Hypervisor |
|+---------------------+| +-----------------------+ +-----------------------+
| Operating System | | Host OS | | Host OS |
+-----------------------+ +-----------------------+ +-----------------------+
| Hardware | | Hardware | | Hardware |
+-----------------------+ +-----------------------+ +-----------------------+
Physical Machine Container Type II Hypervisor
特点比较
Container | VM | |
---|---|---|
启动速度 | 秒级 | 分钟级 |
运行性能 | 速度快 | 慢 |
磁盘占用 | MB | GB |
数量(每单台物理机) | 60~100 | 2~20 |
隔离性 | 进程级别 | 系统级 |
操作系统 | 支持Linux | 几乎所有 |
封装程度 | 只打包项目代码和依赖;共享宿主机内核 | 完整操作系统 |