本教程是运维教程的一部分,什么是Docker?
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像(Docker Image)中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker 技术学习目录:
- 容器技术概述
- Docker容器安装部署
- Docker 镜像管理
- Docker 基础操作
- Docker 高级操作
- Docker File详解
- 综合实验
- Docker 的网络模型
什么是容器?
容器是一种容纳、存储、运输物品的基础工具。类似于集装箱。
虚拟化技术?

虚拟化分为寄居虚拟化和裸机虚拟化,此图展示的是寄居虚拟化的结构,物理主机承载的OS上安装VM工具,借此达到虚拟多个环境的目的。详见:虚拟化技术详解。
虚拟化即使可以实现这种场景:让程序运行在同一台宿主机上的相对隔离的环境中,互不干扰。但是这种方法花销比较大,实现起来比较繁琐。为运行一个程序安装一个独立的操作系统不太客观。而Docker技术完美地解决了这种问题,我们来看一下Docker技术的结构:

可以看到Docker将Hypervisor成替换成了Docker Engine层,Docker Engine会自动将上层的应用运行环境进行隔离,而不需要单独为每个程序的运行提供一个完整的操作系统。
我们所说的隔离是一种什么样的概念呢?
下面是NameSpace资源隔离条件:

运行程序满足NameSpace资源隔离条件,则两个程序的运行可以看做是隔离的,每个程序所运行的环境,可以看做一个独立的容器。这个可以从虚拟化的角度进行理解,容器化要解决的正是虚拟化所要解决的问题。
使用docker容器化封装应用程序的意义?
- 统一了基础设施环境--docker环境:硬件配置、OS版本、运行时环境异构...
- 统一了程序打包方式--docker镜像:java、python、node...
- 统一了程序部署方式--docker容器:docker run
容器技术简史
我们先了解一下容器化技术的简史:
chroot -> Solaris Containers -> OpenVZ -> cgroups -> LXC(Linux Containers) -> Docker(2013年) -> Rocket(2014年,不够简单、规范) -> Windows Containers -> K8S 微服务。
Docker 诞生
参看: 维基百科:Docker
Build Once,Run Anywhere.
Docker 是什么
- Docker基于容器技术的轻量级虚拟化解决方案。
- Docker是容器引擎,把Linux的cgroup、namespace 等容器底层技术进行封装为用户提供创建和管理容器的编辑界面、命令行、API。
- Docker是一个诞生于2013开源项目,基于go语言实现。
- Docker引入可一整套容器化管理生态系统,包括分成镜像模型、容器注册库、友好的Rest Api。
Docker结构再看

- Docker 是没有VM层的,它是直接建立在属主OS上的,通过Docker Engine 提供容器化的服务。
- Docker为每一个应用提供独立的、隔离的运行环境。容器是隔离的,并且共享了宿主OS,并且在必要的时候还可以共享一些公共二进制文件或者是库文件。
- Docker具有快速部署、更低载荷、简单移植、快速重启等特点。
容器技术和虚拟化技术的优缺点比较
