他是个什么玩意?
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
他能干些什么?
程序员开发总是离不开Linux的操作。
虚拟机: 一个操作系统里安装运行另一种操作系统。应用程序对此无感知。
虚拟机的缺点
- 资源占用率高 搞一个zk集群,内存分分钟要爆掉
- 冗余步骤多
- 启动慢
虚拟化技术
由于上面说道的虚拟机的这些缺点。
不再模拟一个完整的操作系统,而是有了容器,就可以容器与虚拟机不同,不需要捆绑一整套操作系统,系统因此变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
而容器内的应用进程直接运行与宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便
每个容器之间互相隔离(集装箱合理),每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源,耦合度低。
Docker、Messos等容器新技术使大规模动态调度成为可能(弹性云扩容)
新浪微博,热点,会吧新浪服务器扩让,短时间内完成大批量节点扩容
痛点
在虚拟机中装一款 产品 (redis、zk、mongo、mysql、mq……),安装和环境配置非常吗发,换一台机器就要重来一次,费事费力。 这很不符合程序员思维,,,共同代码 是要封装的,只要调一次就好了。
能否从根本上解决问题? 能不能安装的时候,把原始环境(全家桶)一模一样的复制过来。
我为什么要用它?
之前搬家,从头搭建费事费力,用了docker就可以把整个房子 给搬过来,直接入住。 分钟级->秒级
- 我想迅速在本地启动一个redis服务(这真是的我初衷。。。)
- 我想迅速在本地启动一个zookeeper服务
- 我想迅速在本地启动一个mongoDB服务
- 我想迅速在本地启动一个mysql服务
- 我想迅速在本地启动一个habse服务
三要素
- 仓库 集中存放镜像文件的地方,最大的公开仓库 是 DockerHub (https://hub.docker.com)
- 镜像
就是一个只读的模版。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。
- 容器 容器是用镜像创建的运行实例,他可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以吧容器看作是一个简易版迷你版的Linux环境(包括rootyoghurt权限、进程空间、用户空间、和网络空间等)。
Dog dog1 = new Dog();
Dog dog2 = new Dog();
Dog dog3 = new Dog();
Docker | 面向对象 |
---|---|
容器 | 对象 |
镜像 | 类 |
仓库 | are neat |
鲸鱼背上的集装箱,每个集装箱就是一个容器。
总结:
- Docker本身是一个容器运行在提或称为管理引擎。我们吧应用程序和配置依赖打包好行程一个可交付的运行环境,这个打包好的运行环境就 是 image镜像文件。 只有通过这个镜像文件才能生成Docker容器。image文件可以看做是容器的模版。Docker根据Image文件生成容器的实例。容一个iamge文件,可以生成多个同时运行的容器实例。
- image文件生成的容器实例,本身也是一个文件,称为镜像文件。一个容器运行一种服务,当我们需要的时候,就可以通过docker荣护短创建一个对应的运行实例,也就是我们的容器
- 对于仓库,就是放了一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候从仓库中拉下来就可以了。
安装
前提: CentOS 6.5(64-bit)或以上
执行docker ps命令,出现错误
“Cannot connect to the Docker daemon at unix: ///var/run/docker.sock. Is the docker daemon running?”
此时已确定Docker本身已经安装正常。
问题原因是因为docker服务没有启动,所以在相应的/var/run/ 路径下找不到docker的进程。
执行 service docker start 重新启动docker服务即可