虚拟化,是抽象的一种,在软件和硬件之间增加一层,来解耦软件对硬件的依赖。
Virtualization Paradigm 由于每个VM都有自己的操作系统,自身体积显得过于繁杂肿大,启动准备也需要耗费很长时间。
资源的超载利用也会造成性能降低等缺点。
Hypervisor开辟了一条新的应用便携性的方式,随着计算虚拟化的兴起,其相关的辅助概念
网络和存储也开始了虚拟化进程。开始研究通过VM来交换来实现应用程序分布式布局。
集装箱化Containerization的出现很好的解决了这个问题。
一个容器包含一个应用程序,所有与该程序有关的类库,binary文件,以及其它的依赖对象,组件,实体等。
要求容器轻量化,高便携性,容易快速启动等等。
Docker提供了类似原生系统的性能,很好的满足的承担应用程序容器的角色,推荐一个容器只用于一个应用或者服务。
Docker是什么?
overwhelming 压倒性的
be stuffed with 被..塞满
pathbreaking 开创性的
decisive 决定性的;果断的,坚定的
Docker是一个开源的集装箱引擎,自动打包装载以及部署任何应用程序。
轻量级,便携,自满足容器。
一个Docker就是一个软件篮子,装着运行软件所需的一切依赖。
一个机器上可以有多个Docker容器,它们之间相互以及和主机之间都是完全隔离的。
每个Docker都有自己的处理器空间和网络接口,它可以作为运行一些东西的根入口,有自己的
/sbin/init等。
总之,Docker方案让我们能快速打包组合企业级商业标准级别的程序。
Docker的主要组件有:
Docker engine:根据特定的目的需要生成的Docker容器
Docker Hub:Docker 镜像库
Docker运行在Linux上:
一个docker引擎可以创建,监控和管理多个Docker容器。
Docker主程序运行在Linux内核上,它由Docker引擎和客户端组成。
Linux内核的一些迄今为止还未被充分使用的能力被重新发现,这些能力
集装箱化和虚拟化的区别:
VM 是硬件级别的虚拟化,而容器化是操作系统级别的虚拟化
VM是重量级的,而Container是轻量级的
VM启动和初始化慢,而Container则是实时启动和可扩展性
VM性能是受到限制的,而Container则是原生性能
VM是完全隔离的所以更加安全,而Container是进程级隔离,相对安全性差点。
容器化和虚拟化聚和:
容器技术:
LXC(Linux Containers)它是所有容器技术之父,它展现了一个操作系统级别的虚拟化环境,用于在Linux机器上运行多个隔离开来的Linux系统。
Linux内核提供了控制组(cgroups)功能来限制和管理资源优先级(CPU,内存,块的输入和输出,网络等),而不需要开启任何的虚拟机和命名空间隔离功能,
这样可以将应用程序跟操作系统完全隔离开来,包括进程树,网络,用户id和文件系统。
OpenVZ:操作系统级别的虚拟化技术,它基于Linux 内核和操作系统。
它允许物理服务器来运行多个隔离的操作系统实例成为容器,虚拟的私有服务器VPS,或者叫虚拟环境(VEs)
FreeBSD jail:它是一种实现操作系统级别虚拟化的机制,让系统管理员将FreeBSD系统的计算机划分成多个各自独立的mini操作系统,叫做jails
AIX Workload Partitions:(WPARs),是操作系统级别虚拟技术的软件实现,提供应用程序环境隔离和资源控制。
Solaris Containers(包括Solaris Zones):为x86和SPARC操作系统实现的操作系统级别的虚拟化技术。
安装Docker引擎:
因为Docker是基于Linux内核开发出来的,因此它目前只能直接运行于Linux系统上。
Debain和Ubuntu使用apt-get命令安装
RedHat,Fedora和CentOS 使用yum安装
Ubuntu上安装:
$ sudo apt-get update
$ sudo apt-get install -y docker.io
为docker.io创建一个软件链接docker
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
使用Docker社区提供的最新版本的自动安装脚本安装:
首先添加Docker释放工具库路径到我们的APT资源
$ sudo sh -c "echo deb https://get.docker.io/ubuntu \
docker main > /etc/apt/sources.list.d/docker.list"
然后导入Docker释放工具公共键
$ sudo apt-key adv --keyserver \
hkp://keyserver.ubuntu.com:80 --recev-keys \
36A1D7869245C8950F966E92D8576A8BA88D21E9
接着同步包库:
$ sudo apt-get update
最后安装Docker启动Docker服务
$sudo apt-get install -y lxc-docker
curl 命令安装:
$ sudo curl -sSL https://get.docker.io/ | sh
wget命令安装:
$ sudo wget -qO- https://get.docker.io/ | sh
理解Docker的安装:
主要是了解Docker的组件,它们的版本,存储,执行驱动,文件位置等。
我们可以使用如下docker字命令来检查安装情况:
docker version 和 docker info
$sudo docker -D info 可以查看更多信息
客户端和服务器的交互:
在Linux上安装的Docker一般会通过Unix socket来在服务器和客户端之间通信(/var/run/docker.sock)
Docker有一个IANA注册端口,2375,处于安全原因,默认为关闭状态。
下载第一个镜像:
安装完成后,接下来就是从Docker注册器下载镜像了。
Docker registry是一个应用程序库,它保存了各种应用从基础的Linux镜像到高级应用程序。
docker pull命令用于下载它们。
$ sudo docker pull busybox
511136ea3c5a: Pull complete
df7546f9f060: Pull complete
ea13149945cb: Pull complete
4986bf8c1536: Pull complete
busybox:latest: The image you are pulling has been verified. Important:
image verification is a tech preview feature and should not be relied on
to provide security.
Status: Downloaded newer image for busybox:latest
下载后我们可以通过如下命令查看:
$ sudo docker images
运行第一个容器:
$ sudo docker run busybox echo "Hello World!"
"Hello World!"
在AWS上运行一个Docker容器
Docker容器问题排解:
通过运行如下命令检查Docker
$ sudo service docker status
可以到如下目录查看运行日志:
/var/log/upstart/docker.log