写在前面docker
工做缘由须要接触很火的Docker,因此开始这个系列的笔记。初步制定的学习教材是《第一本Docker书》,辅以一些网上材料,因此笔记先以此书为主要内容。数据库
1.0 容器的简介安全
容器与管理程序虚拟化的不一样点:服务器
- 管理程序虚拟化经过中间层将一台或多台独立的机器虚拟运行于物理硬件之上;
- 容器则是直接运行在操做系统内核之上的用户空间。所以,容器虚拟化也被称为“操做系统级虚拟化”。
因为客居于操做系统,容器只能运行与底层宿主机相同或类似的操做系统。架构
和传统的虚拟化以及半虚拟化相比,容器运行不须要模拟层和管理层,而是使用操做系统的系统调用接口,下降了开销。运维
固然容器也有一些局限性,好比它被一些人认为是不安全的、它的技术比较复杂、不易安装和自动化。分布式
1.1 Docker简介工具
Docker是一个可以把开发的应用程序自动部署到容器的开源引擎。它的目标是提供一个轻量、快速的环境,可以运行开发者的程序,并方便高效的将程序从开发者的笔记本部署到测试环境,而后再部署到生产环境。性能
Docker但愿为程序开发提供如下功能:学习
- 提供一个简单、轻量的建模方式。用几分钟能够把本身的程序Docker化,并用“写时复制”模型,使修改应用程序也很是迅速。建立容器来运行应用程序也很快速,而且一台宿主机能够运行不少容器,使用户能够尽量充分的利用系统资源。
- 职责的逻辑分离。使用Docker,开发人员只须要关系容器中运行的应用程序,而运维人员只须要关系如何管理容器。同时增强开发人员写代码的开发环境与应用程序要部署的生产环境的一致性。
- 快速、高效的开发生命周期。Docker的目的之一就是缩短代码从开发、测试到部署、上线运行的周期,让应用程序具备可移植性、易于构建,并易于协做。
- 鼓励使用面向服务的架构。Docker推荐单个容器只运行一个应用程序或进程,这样就能造成一个分布式的应用程序模型。在这种模型下,应用程序或服务均可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得简单。
1.2 Docker组件
- Docker客户端和服务器。Docker客户端只需向Docker服务器或守护进程发出请求,服务器或守护进程完成全部工做并返回结果。Docker提供了一个命令行工具docker以及一套RESTful API。能够在同一台宿主机上运行守护进程和客户端,也能够从本地的Docker客户端链接到运行在另外一台宿主机上的远程Docker守护进程。
- Docker镜像。镜像是构建Docker世纪的基石。用户基于镜像来运行本身的容器。镜像也是Docker生命周期中的“构建”部分。镜像是基于Union文件系统的一种层式的结构,由一系列指令一步步构建出来。也能够把镜像当作容器的“源代码”。镜像体积小,便携,易于分享、存储和更新。可使用已有的镜像,也能够构建本身的镜像。
- Registry。Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营的公共Registry叫作Docker Hub。用户能够在其上注册帐号,分享并保存本身的镜像。Docker Hub上的镜像包括Nginx Web Server的镜像、MySQL数据库的镜像等等。也能够假设本身的私有Registry。
- 容器。Docker能够帮助构建和部署容器,只要把本身的应用程序或者服务打包放进容器便可。容器是基于镜像启动起来的,容器中能够运行一个或多个进程。能够认为,镜像是Docker生命周期中的构建或者打包阶段,而容器使启动或执行阶段。总结起来,Docker容器就是:一个镜像格式,一系列标准的操做和一个执行环境。
1.3 咱们能用Docker作什么
- 加速本地开发和构建流程,使其更加高效、更加轻量化。本地开发人员能够构建、运行并分享Docker容器。容器能够在开发环境中构建,而后轻松的提交到测试环境中,并最终进入生产环境;
- 可以让独立服务或者应用程序在不一样的环境中获得相同的运行结果。这一点在面向服务的架构和重度依赖微型服务的部署中尤为实用;
- 用Docker建立隔离的环境来进行测试。例如,用Jenkins CI这样的持续集成工具启动一个用于测试的容器;
- Docker可让开发者先在本机上构建一个复杂的程序或者架构来进行测试,而不是开始就在生产环境部署、测试;
- 构建一个多用户的平台即服务基础设施;
- 为开发、测试提供一个轻量级的独立沙盒环境,或者将独立的沙盒环境用于技术教学;
- 提供软件即服务应用程序,如Memcached即服务;
- 高性能、超大规模的宿主机部署。