一 , Docker简介
docker最初是dotcloud公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,基于dotcloud公司多年云服务技术的革新,2013年3月 apache2.0开源。源码托管于github上面。
docker使用Google公司推出Go语言开发实现,基于linux内核的cgroup,namespace,以及AUFS类的Union FS等技术开发实现,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其他的隔离的进程,因此称其为容器。最初实现基于LXC,从0.7以后去除LXC,使用自行开发的libcontainer,1.11开始使用runC和containerd。
二, Docker与传统虚拟化的区别
同样是虚拟化,如下图所示,传统虚拟化在运行环境之上先虚拟化一套硬件,然后在硬件之上运行完成的操作系统,系统之上运行应用服务。而Docker只是在原有系统里面隔离一个单独的空间,没有虚拟化硬件所以应用进程直接运行在宿主机的内核里,这使得docker更加轻量级。
Docker虚拟化(图片来源网络,侵删)
由于docker不许呀进行硬件虚拟化以及运行完整的操作系统等尔瓦埃开销,docker对系统资源的利用率更高。无论是应用执行速度,内存耗损,或者文件存储速度,都要比传统虚拟化技术高效。相比虚拟机技术,一个相同配置主机往往可以运行更多数量的应用。不需要运行完整的系统,因此可以做到秒级甚至毫秒级的启动时间。
由于使用分层存储以及镜像的技术,所需要的运行环境一层一层构建在镜像中,使得应用重复部分的复用更加容易,应用的迁移部署更加简单,一次构建,多处运行,减少了运维人员的工作复杂度。
总结:
三, 基本概念
Docker包括三个基本概念
1)镜像
提到镜像,有对操作系统有一定认知的都知道,镜像是一个压缩的ISO文件,里面包含操作系统运行所需要的运行环境以及库文件,配置文件等等。而docker镜像相当于是一个root文件系统,除了提供容器运行所需要的程序,库,资源,配置等文件还包括运行时准备的一些配置参数(匿名卷,环境变量,用户等)。镜像不包含任何动态数据,在构建完成之后本层镜像就不会被改变。
docker镜像在设计之时,就充分使用Union FS 技术,并被设计为分层存储的架构。所以与传统意义上的镜像有着很大不同,它并非体现为一个打包的文件,而是由一组文件系统组成,或者说由多层文件系统联合组成。
镜像构建时,由下网上一层一层构建,每一层构建完成后就不会发生改变,后一层上对上一层的改变都发生在本本层。删除上一层文件也只是标记删除,并不会影响上一层。所以,构建镜像时,每一层尽量包含本层需要的东西,其他额外的东西应该在构建结束前清理掉。
2)容器
容器的实质是进程,是镜像的实例化, 但与直接在宿主执行的进程不同,容器进程运行与属于自己独立的命名空间,因此容器可以拥有自己的root文件系统,自己的网络配置,自己的进程空间。实质是进程,所以拥有进程的所有特性,可以被创建,启动,暂停,停止,删除等。
由于镜像的特殊架构,使用分层存储,容器运行时,以镜像为基础层,在基础层上,创建当前容器存储层,相当于进程的栈空间。容器存储层和容器一样,容器进程退出时,其对应的容器存储层也随之消亡。所以容器运行时产生的任何数据都不应放在容器存储层,所有文件写入操作都应该使用数据卷,或者绑定宿主目录,直接对宿主发生读写。
3)仓库
仓库保存定义好的镜像,提供保存,下载,版本管理等等功能。通常一个docker Registry 服务包含多个仓库,每个仓库可以包含多个标签tag,每个标签对应一个镜像。若包含的镜像相同版本不同,通常以标签分别标识,我们可以通过<仓库名>:<标签>指定具体那个镜像。如果不给出标签默认以latest作为默认标签。
公开的仓库服务有很多,默认使用官方的Docker hub ,它拥有大量高质量的官方镜像,此外还有coreOs的Quay.io,google 的Goolge Container Registry(K8S),国内访问可能会比较慢,所以国内的云服务商提供了一些针对Docker Hub的镜像服务,常见有:阿里云加速器,DaoCloud 加速器,灵雀云加速器。
国内也有类似Docker Hub的仓库服务。比如时速运镜像仓库,网易云镜像服务,DaoCloud镜像市场,阿里云镜像库等。当然有公开的仓库服务,自己也可以搭建私库,常见使用sonatype Nexus 以及 WMWare Harbor搭建私库,有时间学习一波再来更新。
四,Docker安装
官方网站上有各种环境下的安装指南,这里就不详细展开,粗略的介绍两种环境下相对简单的安装方法。
1)Linux (Ubuntu)
系统要求:
docker目前支持Ubuntu最低版本为12.04LTS,推荐使用14.04LTS或更高版本。
操作系统 64位
内核版本不低于3.10,越新越好,老版本可能有些功能支持不了,或者不稳定。
(1)自动化安装
docker提供一套自动化安装脚本,命令: curl -sSL https://get.docker.com/ | sh
由于墙可能会出现某些下载错误的情况。国内一些云服务商提供了这个脚本的修改版本
阿里云提供的自动化安装脚本 命令:curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/
docker-engine/internet | sh -
DaoCloud提供的自动化安装脚本 命令:curl -sSL https://get.daocloud.io/docker | sh
(2)手动安装
由于docker 使用 Union FS 技术,所以,需要开启系统对 AUFS的内核驱动。此驱动属于可选的内核模块的一部分,如果没有安装可以使用命令下载安装 。命令:$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
安装docker软件包
1,配置APT源
官网源使用HTTPS确保下载过程不被篡改,所以先安装HTTPS服务以及CA证书。
命令:$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80
--recv-keys 58118E89F3A912897C070ADBF76221572C52609D
然后我们需要想source.list添加Docker软件源,下面列出了不同的Ubuntu和Debian版本对应的APT源。
APT源添加到source.list(将其中的
命令:$ echo "
添加成功后更新apt软件包缓存:$ sudo apt-get update
2,安装Docker
命令: $ sudo apt-get install docker-engine
3,启动docker
命令: $ sudo service docker start
4,建立docker用户组
命令:$ sudo groupadd docker
5, 加入当前用户到docker用户组
命令: $ sudo usermod -aG docker $USER
2)window 安装docker
使用docker toolbox 安装docker
安装要求:
1,win7以上64位系统
2,虚拟化支持
1,下载docker toolbox https://www.docker.com/products/docker-toolbox
2,双击安装包进行安装Docker Toolbox
一路next安装成功后打开Docker Quickstart Terminal图标,启动一个终端
启动完成之后就是一个bash命令行。输入docker version 查看docker运行版本等信息,安装就完成了。
参考文档: Docker技术入门与实战第二版