docker是docker.lnc公司开源的一个基于LXC技术之上构建的container容器引(openstack是基于KVM),源代码托管在GitHub上,基于Go语言并遵从Apache2.0协议开源。
docker是通过内核(linux内核)虚拟化技术(namespaces及cgroups等)(KVM是基于硬件虚拟化技术来实现的)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以docker容器在运行时,不需要类似虚拟机(VM)额外的系统开销,提高资源利用率。
docker的组成:docker是一个C/S结构的(C/S就是客户端/服务器,B/S就是浏览器/服务器模式)
Docker Client
Dockerserver
docker的组件:
1,镜像(image)
2,容器(container)
3,仓库(repository)
Docker镜像
Docker镜像( Image) 就是一个只读的模板。
例如:一个镜像可以包含一个完整的ubuntu 操作系统环境,里面仅安装了 Apache
或用户需要的其它应用程序。
镜像可以用来创建Docker 容器。
Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以
直接从其他人那里下载一个已经做好的镜像来直接使用。
Docker 容器
Docker利用容器( Container) 来运行应用。
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是
相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的Linux 环境( 包括root用户权限、进程空间、用户
空间和网络空间等)和运行在其中的应用程序。
*注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
Docker 仓库
仓库(Repository) 是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务
器(Registry) 混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着
多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag) 。
仓库分为公开仓库(Public) 和私有仓库( Private) 两种形式。
最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。
国内的公开仓库包括时速云 、网易云 等,可以提供大陆用户更稳定快速的访问。
当然,用户也可以在本地网络内创建一个私有仓库(参考本文“私有仓库”部分) 。
当用户创建了自己的镜像之后就可以使用push 命令将它上传到公有或者私有仓
库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上pull 下来
就可以了。
*注:Docker仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服
务
容器与虚拟化的区别:containersvs VMS
Docker和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
VM:首先需要有一个server(物理机)上面需要装一个操作系统host OS,再上去需要起一个虚拟机管理器(比如是KVM,XEN等),然后在上面跑一个虚拟机guest OS,在虚拟机上就可以跑各种应用了。
containers:需要有一个server(物理机)上面需要装一个操作系统host OS,然后他是基于docker的一个引擎来创建各个docker,是隔离起来的
docker与openstack的对比:
docker能干什么?
1,简化配置。(环境不一致配置就不一致:测试环境中我们装了python的依赖,生产环境没有装就会出现上线失败)(openstack,saltstack也能做)
2,代码流水线管理(开发写一个代码需要开发环境,测试者测试,然后上线)保证所有环境一致(saltstack也能做,保证所有环境都是saltstack)
3,开发效率(新员工入职的时候新机器需要配置很多环境,不同业务线的给打包不同的镜像)(openstack起个虚拟机更快,每人一台虚拟机)docker起在本地可能一断电就没了
4,应用隔离(虚拟机是完全隔离,docker只是一个隔离(openstack起KVM需要占用资源,docker不用))
5,服务器整合(一个服务器可以跑多个docker来提高服务器的利用率)
6,调试能力(进入docker调试比较难,虚拟机就方面很多)
7,多租户(opensatck本来设置就是多租户,每个project就是一个租户)
8,快速部署(体积小,快)(微信春晚抢红包,一秒钟启动上千个docker)
用docker的理由:
1,技术储备。2,符合当前业务需求,3,速度快
docker的坏处:docker用的是S/C架构,一当服务器挂了,所有的docker都会停止运行。
centos7下载docker :yum installdocker -y
启动:systemctlstart docker