【docker学习之一】什么是docker
1、本人对Docker的理解——什么是Docker
一开始看了许多文章,但是总觉得还是没有完全理解什么是Docker。建议先动手操作实践,之后回头再来看看什么是Docker。
Docker可以轻松方便自由的搭建和部署各种应用(包含运行环境 )的一个软件,它可以运行在Linux 、windows 和 MacOS系统上。
简单得来说,Docker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs),容器内部是程序代码+支持运行程序的各种软件; 目前云服务的基石是操作系统级别的隔离,在同一台物理服务器上虚拟出多个主机。Docker则实现了一种应用程序级别的隔离; 它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM),转换到操作程序运行的“容器”上来。
特点:
1、将应用和运行环境打包在一起,大大提升的应用部署的便利性。
例如:有一个网站产品已经开发完成,我们要将它部署到服务器上去(服务器环境为centos6.6 + php5.6-fpm+nginx+mysql+redis),我们通常的做法是安装PHP5.6-fpm(需要安装各种PHP扩展),再安装nginx,再安装mysql 和 redis ,之后再配置各个软件的config文件。再将代码部署到服务器上,之后再调试代码,如果没有问题就成功部署完成了。这样一套流程走下来,要同时占用运维和开发人员的时间,其中运维人员估计要花一天时间,开发估计也要半天,期间还有沟通成本。如果这个时候发现这个产品比较好用,要在其他公司服务器上再搭一套,虽然运维和开发都比较熟悉这个产品的运行环境和代码,估计最快也要大半天时间才能搞定,这个还是在相同服务器操作系统的情况下要半天时间,假如此时服务器操作系统是ubuntu 或者是 debian 那么运维同学又要重新摸索,估计多少要多费些精力。如果用docker就不用这么麻烦,只要把这个网站产品(运行环境+代码)制作成一个镜像(docker中的一个概念,后面会解释),之后任何地方想要用这个产品只要下载这个镜像,再用一条命令,即可运行网站应用。时间成本估计只有10分钟左右。
2、Docker和虚拟机的区别
减少服务器性能开销主要是和虚拟机VM比较而言,Docker和虚拟机两者虽然都属于虚拟化的技术,目标都是为了将一套应用程序所需的执行环境打包起来,建立一个孤立环境,方便在不同的硬件中移动,但两者的运作思维截然不同。虚拟机是在操作系统层面进行虚拟化,而Docker是在应用程序层面进行虚拟化。传统虚拟化技术从操作系统层下手,目标是建立一个可以用来执行整套操作系统的沙盒独立执行环境,习惯以虚拟机(Virtual Machine)来称呼。而Docker则是直接将一个应用程序所需的相关程序代码、函式库、环境配置文件都打包起来建立沙盒执行环境,一台硬件服务器要虚拟多个环境必须安装多个操作系统,每个操作系统对应一个虚拟机,而Docker却不用,它只是运行在服务器上的一个软件而已,但都实现了虚拟效果。由于不用安装多个操作系统,对硬件的利用率相对于虚拟机而言会大大提升。
3、各个应用间不互相影响
在现实中,如果一台服务器或者一台虚拟机上同时运行两个或者多个项目,当由于某个项目访问量过高或者出现故障拖累某个环境的性能(例如:访问量过大PHP性能达到瓶颈),那么其他项目由于都共用同一个环境,所以都会受到影响。例如:服务器一上同时运行两个项目A和B,此时B项目由于访问量突增或者遭到攻击,PHP性能达到瓶颈处理速度巨慢,那么A项目也会受到影响。那么在Docker中则不会出现这样的问题(具体也要看如何部署),Docker中容器(Docker的一个概念后面会详细介绍)间是不会相互影响的,我们把A和B放到两个容器内,假如B或者A崩溃,绝对不会影响到A或者B。
参考文档:
http://www.lupaworld.com/article-243555-1.html
2、Docker安装
以centos 操作系统为例,Docker 运行在CentOS 6.5 或更高的版本的 CentOS 上,需要内核版本是 2.6.32-431 或者更高版本 ,因为这是允许它运行的指定内核补丁版本。
升级CentOS版本命令
yum install update
升级Linux 内核
请看http://www.tuicool.com/articles/rUvERv
最后安装Docker
sudo yum install docker
docker的github地址是:https://github.com/docker/docker
官方网站是:https://www.docker.com/