Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。


1、Docker 简介

Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。
Docker自2013年以来非常火热,无论是从 github 上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持, 就连 Google 的 Compute Engine 也支持 docker 在其之上运行。

官网地址https://www.docker.com/

2、Docker 架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。

3、Docker 特点

1)Docker能够通过容器提供更小的操作系统占用空间来减少开发规模。

2)有了容器,跨不同单元的团队(如开发、QA和运维)更容易跨应用程序无缝地工作。

3)可以在任何地方部署Docker容器,在任何物理和虚拟机上,甚至在云上。

4)由于Docker容器非常轻量级,所以它们很容易伸缩。

4、Docker 组件

1)Docker for Mac

可以在Mac 操作系统上运行Docker容器。

2)Docker for Linux

可以在Linux操作系统上运行Docker容器。

3)Docker for Windows

可以在Windows操作系统上运行Docker容器。

4)Docker Engine

用于构建Docker镜像和创建Docker容器。

5)Docker Hub

Docker Hub是一个基于云的存储库,Docker用户和合作伙伴可在其中创建,测试,存储和分发容器镜像。

6)Docker Compose

用于定义使用多个Docker容器的应用程序。

5、Docker 安全性

为了保证容器内应用程序能够隔离运行并且保证安全性。Docker使用了多种安全机制以及隔离措施。包括Namespace,Cgroup,Capability限制,内核强访问控制等等。

Docker 安全性的重点在于防止内核代码执行与防止对Docker守护进程的攻击。对于看重Docker的用户,可以在默认Docker安全的基础上采用如下办法提高Docker的安全性。

1)使用安全可靠的Linux内核并保持安全补丁的更新

2)使用非root权限运行docker守护进程

3)使用selinux或者APPArmor等对Docker守护进程的权限进行限制

4)在其它基于虚拟化的容器中运行Docker容器

Docker被逃逸的风险并不会比使用其它基于虚拟化实现的容器大,二者的攻击面和攻击手段差距极大。相对的,由于没有虚拟化导致的性能损失,Docker在性能方面对比虚拟化容器有极大的优势。由于Docker在运行过程中几乎不会有额外的性能开销,在非常重视安全的场景中。使用Docker容器和虚拟化容器的双层容器保护也是很常见的解决方案。

推荐文档