一、Docker简介
Docker是哪些?
Docker的日文原意是“搬运工”,在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App弄成一种标准化的、可移植的、自管理的组件,可以在任何主流系统中开发、调试和运行。
说白了,docker是一种用了新颖方法实现的轻量级虚拟机,类似于VM,并且在原理和应用上和VM的差异还是很大的.而且docker的专业别称是应用容器(ApplicationContainer)。
为何要用容器?
应用容器是个啥样子呢,一个做好的应用容器长得如同一个装好了一组特定应用的虚拟机一样,例如我如今想用mysql,那我就找个装好了mysql的容器就可以了,之后运行上去,我还能使用mysql了。
为何不能直接安装一个mysql?安装一个SQLServer也可以啊,但是有的时侯按照每位人笔记本的不同,在安装的时侯可能会报出各类各样的错误,万一你的机器中毒了,你的笔记本挂了,你所有的服务都须要重新安装.并且有了docker,或则说有了容器就不同了,你就相当于有了一个可以运行上去的虚拟机,只要你能运行容器,mysql的配置就省了.并且假如你想换个笔记本,直接把容器”端过来”就可以使用容器上面的服务.
总结Docker的优点可以分为四类:
1.多
可以通过镜像一布署多个应用,组成完整的构架环境。
2.快
docker容器很轻!很快!容器的启动时间是次秒级的,节省开发、测试、部署的时间。
3.好
docker容器可以在几乎所有的环境中运行,化学机、虚拟机、公有云、私有云、个人笔记本、服务器等等。
docker容器之间是隔离的,假如容器出现问题,可以通过镜像快速生成全新的容器保证正常访问。
4.省
在容器中不用搭建系统,只须要基本的运行环境就可以了,这样就省去了系统环境硬件的消耗。
docker容器不须要hypervisor,他是内核级的虚拟化。
这么为何不用VM?
这么既然容器和VM如此类似为何不用VM?docker容器相对于VM还是有好多优点的:
1.启动速率快,容器一般在1秒内可以启动.而VM要许久.
2.资源借助率高,一台普通服务器可以跑上千个容器,而跑VM就。。。。。。
3.性能开支小,VM须要额外的CPU和显存来完成OS的功能,这一部份抢占了额外的资源.
为何相像的功能在性能上会有这么巨大的差别呢?看一下她们的设计图,先看VM的:
可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方法则是在硬件层面实现。
Docker优势和劣势
作为一种新兴的虚拟化形式,Docker跟传统的虚拟化形式相比具有诸多的优势。
首先redhat有线网络 提示设备未托管,Docker容器的启动可以在秒级实现,这相比传统的虚拟机形式要快得多。
其次红旗linux6.0,Docker对系统资源的借助率很高,一台主机上可以同时运行数千个Docker容器。
容器不仅运行其中应用外,基本不消耗额外的系统资源,致使应用的性能很高,同时系统的开支尽量小。传统虚拟机形式运行10个不同的应用就要起10个虚拟机,而Docker只须要启动10个隔离的应用即可。
具体说来,Docker在如下几个方面具有较大的优势。
更快速的交付和布署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。开发者可以使用一个标准的镜像来建立一套开发容器,开发完成以后,运维人员可以直接使用这个容器来布署代码。Docker可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是怎样创建和工作的。Docker容器很轻很快!容器的启动时间是秒级的,大量地节省开发、测试、部署的时间。
更高效的虚拟化
Docker容器的运行不须要额外的hypervisor支持,它是内核级的虚拟化,因而可以实现更高的性能和效率。
更轻松的迁移和扩充
Docker容器几乎可以在任意的平台上运行,包括化学机、虚拟机、公有云、私有云、个人笔记本、服务器等。这些兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
更简单的管理
使用Docker,只须要小小的更改,就可以取代往年大量的更新工作。所有的更改都以增量的形式被分发和更新,进而实现手动化而且高效的管理。
对比传统虚拟机总结
特点
容器
虚拟机
启动
秒级
分钟级
硬碟使用
通常为MB
通常为GB
性能
接近原生
较弱
系统支持量
单机支持上千个容器
Docker镜像
Docker镜像是Docker容器运行时的只读模板,镜像可以拿来创建Docker容器。每一个镜像由一系列的层(layers)组成。Docker使用UnionFS(联合文件系统)来将这种层联合到单独的镜像中。UnionFS准许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,产生一个单独连贯的文件系统。正由于有了这种层的存在,Docker是这么的轻量。当你改变了一个Docker镜像,例如升级到某个程序到新的版本,一个新的层会被创建。为此,不用替换整个原本的镜像或则重新构建(在使用虚拟机的时侯你可能会如此做),只是一个新的层被添加或升级了。如今你不用重新发布整个镜像,只须要升级,层促使分发Docker镜像显得简单和快速。
每位docker都有好多层次构成,docker使用unionfilesystems将这种不同的层结合到一个image中去。
比如:centos镜像中安装nginx,就成了nginx镜像”,虽然在此时Docker镜像的层级概念就彰显下来了。底层一个centos操作系统镜像,里面叠加一个ngnx层,就完成了一个nginx镜像的建立。层级概念就不难理解,此时我们通常centos操作系统镜像称为nginx镜像层的父镜像。
Docker库房
Docker库房拿来保存镜像,可以理解为代码控制中的代码库房。同样的,Docker库房也有公有和私有的概念。公有的Docker库房名子是DockerHub。DockerHub提供了庞大的镜像集合供使用。这种镜像可以是自己创建,或则在他人的镜像基础上创建。
库房是集中储存镜像文件的场所。有时侯会把库房和库房注册服务器(Registry)混为一谈,并不严格分辨。实际上,库房注册服务器上常常储存着多个库房,每位库房中又包含了多个镜像,每位镜像有不同的标签(tag)。
库房分为公开库房(Public)和私有库房(Private)两种方式。
最大的公开库房是DockerHub,储存了数目庞大的镜像供用户下载。国外的公开库房包括DockerPool等红帽子linux,可以提供台湾用户更稳定快速的访问。
其实,用户也可以在本地网路内创建一个私有库房。
当用户创建了自己的镜像以后就可以使用push命令将它上传到公有或则私有库房,这样上次在另外一台机器上使用这个镜像时侯,只须要从库房上pull出来就可以了。
*注:Docker库房的概念跟Git类似,注册服务器可以理解为GitHub这样的托管服务。
Docker容器
Docker借助容器来运行应用,一个Docker容器包含了所有的某个应用运行所须要的环境。每一个Docker容器都是从Docker镜像创建的。Docker容器可以运行、开始、停止、移动和删掉。每一个Docker容器都是独立和安全的应用平台。
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每位容器都是互相隔离的、保证安全的平台。
可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网路空间等)和运行在其中的应用程序。
*注:镜像是只读的,容器在启动的时侯创建一层可写层作为最下层。
与虚拟机相比,容器有一个很大的差别,它们被设计拿来运行"单进程",难以挺好地模拟一个完整的环境。Docker设计者竭力推崇“一个容器一个进程的形式”,假如你要选择在一个容器中运行多个进程,那惟一情况是:出于调试目的。
容器是设计来运行一个应用的,而非一台机器。你可能会把容器当虚拟机用,但你将丧失好多的灵活性,由于Docker提供了用于分离应用与数据的工具,致使你可以快捷地更新运行中的代码/系统,而不影响数据。
Docker安装
docker官网:
Docker值得关注的特点:
o文件系统隔离:每位进程容器运行在一个完全独立的根文件系统里。
o资源隔离:系统资源,像CPU和显存等可以分配到不同的容器中,使用cgroup。
o网路隔离:每位进程容器运行在自己的网路空间,虚拟插口和IP地址。
o日志记录:Docker将会搜集和记录每位进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
o变更管理:容器文件系统的变更可以递交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或自动配置。
o交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,
CentOS系列安装Docker,Docker支持CentOS6及之后的版本。
CentOS6:
在RedHat/CentOS环境下安装Docker。官方文档要求Linuxkernel起码3.8以上,且docker只能运行在64位的系统中。因为RHEL6和CentOS6的内核版本为2.6,因而必需要先升级内核。
升级内核(记住一定要升级,要不然会出现好多莫名奇怪的问题redhat有线网络 提示设备未托管,建议用yum安装)
1、yum安装带aufs模块的3.10内核
#cd/etc/yum.repos.d
#wget
#yuminstallkernel-ml-aufskernel-ml-aufs-devel
2、修改grub的主配置文件/etc/grub.conf,设置default=0,表示第一个title下的内容为默认启动的kernel(通常新安装的内核在第一个位置),重启系统,这时侯你的内核就成功升级了。
[root@localhost~]#uname-r
3.10.5-3.el6.x86_64
查看内核是否支持aufs:
[root@localhost~]#grepaufs/proc/filesystems
nodevaufs
对于CentOS6,可以使用EPEL库安装Docker,命令如下
#yuminstall
#yuminstalldocker-io
启动docker服务
#servicedockerstart
CentOS7:
Prerequisites(先决条件)
Dockerrequiresa64-bitinstallationregardlessofyourCentOSversion.Also,yourkernelmustbe3.10atminimum,whichCentOS7runs.
Tocheckyourcurrentkernelversion,openaterminalanduseuname-rtodisplayyourkernelversion:
[root@localhost~]#uname-r
Docker软件包早已包括在默认的CentOS-Extras软件源里。因而想要安装docker,只须要运行下边的yum命令:
[root@localhost~]#yuminstalldocker
启动Docker服务:
安装完成后,使用下边的命令来启动docker服务,并将其设置为开机启动:
[root@localhost~]#servicedockerstart
[root@localhost~]#chkconfigdockeron
(此处采用了新式的sysv句型,如采用CentOS7中支持的旧式systemd句型,如下:
[root@localhost~]#systemctlstartdocker.service
[root@localhost~]#systemctlenabledocker.service
查看docker版本
#dockerversion
安装之前删掉这条否则难以安装
rm-rf/var/run/yum.pid
查看docker版本:dockerinfo
以上是使用centos7软件源提供的docker安装程序
附:也可以根据官方文档安装
1.Logintoyourmachineasauserwithsudoorrootprivileges.
2.Makesureyourexistingyumpackagesareup-to-date.
3.Addtheyumrepo
$sudotee/etc/yum.repos.d/docker.repo