Docker容器技术是基于Go语言实现的云开源项目,诞生于2013年,是一种高效、敏捷、和轻量级的容器解决方案,发布于2013年。Docker基于Linux平台上的多项开源技术,其中最重要的就是Linux容器(Linux Containers,LXC)技术。python
Docker的优势:linux
更快速的交付和部署。使用Docker,开发人员可使用镜像来快速构建一套标准的开发环境;开发完成以后,测试和运维人员能够直接使用彻底相同环境来部署代码。只要开发测试过的代码,就能够确保在生产环境无缝运行。Docker能够快速建立和删除容器,实现快速迭代,大量节约开发、测试、部署的时间。而且,整个过程全程可见,使团队更容易理解应用的建立和工做过程。nginx
更高效的资源利用。Docker容器的运行不须要额外的虚拟化管理程序(VirtualMachine Manager,VMM,以及Hypervisor)支持,它是内核级的虚拟化,能够实现更高的性能,同时对资源的额外需求很低。跟传统虚拟机方式相比,要提升一到两个数量级。docker
更轻松的迁移和扩展。Docker容器几乎能够在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、我的电脑、服务器等,同时支持主流的操做系统发行版本。这种兼容性让用户能够在不一样平台之间轻松地迁移应用。centos
更简单的更新管理。使用Dockerfile,只须要小小的配置修改,就能够替代以往大量的更新工做。而且全部修改都以增量的方式被分发和更新,从而实现自动化而且高效的容器管理。安全
Docker与虚拟机的比较:服务器
Docker容器很快,启动和中止能够在秒级实现,而传统的虚拟机方式须要数分钟。网络
Docker容器对系统资源需求不多,一台主机上能够同时运行数千个Docker容器(在IBM服务器上已经实现了同时运行10K量级的容器实例)。架构
Docker经过相似Git设计理念的操做来方便用户获取、分发和更新应用镜像,存储复用,增量更新。app
Docker经过Dockerfile支持灵活的自动化建立和部署机制,提升工做效率,使流程标准化。
Docker容器除了运行其中应用外,基本不消耗额外的系统资源,保证应用性能的同时,尽可能减少系统开销。传统虚拟机方式运行N个不一样的应用就要起N个虚拟机(每一个虚拟机须要单独分配独占的内存、磁盘等资源),而Docker只须要启动N个隔离的“很薄的”容器,并将应用放进容器内便可。应用得到的是接近原生的运行性能。
在隔离性方面,传统的虚拟机方式提供的是相对封闭的隔离。但这并不意味着Docker就不安全,Docker利用Linux系统上的多种防御技术实现了严格的隔离可靠性,且能够整合众多安全工具。从1.3.0版本开始,Docker重点改善了容器的安全控制和镜像的安全机制,极大提升了使用Docker的安全性。在已知的大规模应用中,目前还没有出现值得担心的安全隐患。
Docker体系结构:
Docker使用C/S架构,docker daemon做为server端接受client端的请求,而后进行处理。server端和client端也能够运行在同一个机器上,使用socket或者RESTful API进行通讯。server端也就是docker daemon运行在主机的后台,client以系统命令的形式存在,用户用docker命令来跟docker daemon 交互。用户经过输入docker命令能够管理docker的镜像、容器、网络和数据卷。
Docker三大核心概念:
一、镜像(Docker images)
Docker镜像是Docker容器运行时的只读模板,镜像能够用来建立Docker容器。每个镜像由一系列的层 (layers) 组成。Docker使用UnionFS(联合文件系统)来将这些层联合到单独 的镜像中。UnionFS容许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,造成一个单独连贯的文件系统。正由于有了这些层的存在,Docker是如此的轻量。当你改变了一个Docker镜像,好比升级到某个程序到新的版本,一个新的层会被建立。所以,不用替换整个原先的镜像或者从新创建(在使用虚拟机的时候你可能会这么作),只是一个新的层被添加或升级了。如今你不用从新发布整个镜像,只须要升级,层使得分发Docker 镜像变得简单和快速。
例如:在centos镜像中安装nginx,就成了“nginx镜像”,其实就是在底层的一个centos操做系统镜像上加一个nginx层,就完成了一个nginx镜像的构建。此时咱们通常centos操做系统镜像称为nginx镜像层的父镜像。
二、容器(Docker containers)
Docker利用容器来运行应用,一个Docker容器包含了全部的某个应用运行所须要的环境。每个Docker容器都是从Docker镜像建立的,是经过镜像建立的运行实例。Docker容器能够运行、开始、中止、移动和删除。每个Docker容器都是独立和安全的应用平台,彼此 相互隔离、互不可见。
三、仓库(Docker repository)
Docker仓库其实就是存放Docker images的地方。而另外有一个概念叫作注册服务器(Registry),一个注册服务器上能够有多个仓库。一个仓库通常存放着一类镜像,这些镜像经过自身不一样的Tag(标签)进行区分。
Docker的两个核心底层技术:
一、名称空间(Namespace)
上面说到Docker的隔离性,其实名称空间就是在Docker中用来隔离容器的主要技术。
1) pid namespace
用来隔离不一样用户的进程
2)net namespace
隔离容器的网路
3)IPC namespace
由于容器中进程交互仍是采用linux常见的进程间交互方法 (interprocess communication - IPC),包括常见的信号量、消息队列和共享内存
4)mnt namespace
相似chroot,将进程放在特定目录执行。容许不一样namespace的 进程看到的文件结构不一样
5)uts namespace
容许每一个container拥有独立的hostname和 domain name, 使其在网络上能够被视做一个独立的节点而非Host上的一个进程。
6)user namespace
使得每一个container能够有不一样的user和group id
二、cgroups(Control groups)
cgoups实际上是将全部进程放到一个组里面统一管理的机制。主要提供了资源限制、优先级分配、资源统计、进程控制的做用。
Docker的安装:
环境:centos7的维护版、centos-extras仓库须要激活、使用overlay2 存储驱动
一、yum remove docker dockerclient dockerclientlatest dockercommon dockerlatest dockerlatestlogrotate dockerlogrotate dockerselinux dockerengineselinux dockerengine 卸载旧版本的Docker 二、yum install y yumutils devicemapperpersistentdata lvm2 安装使用yum-config-manager命令 三、yum-config-manager --add-repo 使用官方源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 使用国内源(建议国内源,官网的可能会慢) 四、yum install docker-ce 安装 五、systemctl start docker docker run helloword 测试
Docker官方文档:docs.docker.com