第1章 Docker介绍
1.Docker是什么
Docker是Docker.Inc 公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在 GitHub 上,基于Go语言并遵从Apache2.0协议开源。
Docker是通过内核虚拟化技术(namespaces及cgroups等)来提供容器的资源隔离与安全保障等。
由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率。
2.容器与虚拟机对比
传统虚拟化和Docker分层对比:
VM虚拟化和Docker特性对比
总结Docker的特点:
1.轻量 共享宿主机内核
2.快捷 即使复杂的应用也可以一次构建,处处运行
3.速度 启动速度非常快,秒级启动
4.统一 环境统一,同一个镜像运行的容器环境都是一样的
5.灵活 版本升级非常方便
3.namespace和cgroup
namespace资源隔离
kernel提供了namespace的机制用来隔离相关资源。namespace设计之初就是为了实现轻量级的系统资源隔离。
可以让容器中的进程仿佛置身于一个独立的系统环境中。
namespace | 隔离内容 |
---|---|
UTC | 主机名和域名 |
IPC | 信号量、消息队列和共享内存 |
PID | 进程编号 |
Network | 网络设备、网络栈、端口等 |
Mount | 文件系统 |
User | 用户和用户组 |
cgroups资源限制
cgroup的作用主要是用来控制资源的使用,比如限制CPU内存和磁盘的使用等
cgroups的四大作用:
资源限制: 比如设定任务内存使用的上限。
优先级分配: 比如给任务分配CPU的时间片数量和磁盘IO的带宽大小来控制任务运行的优先级。
资源统计:比如统计CPU的使用时长、内存用量等。这个功能非常适用于计费。
任务控制:cgroups可以对任务执行挂起、恢复等操作。
4.docker的三个重要概念
Image(镜像):
那么镜像到底是什么呢?Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
Container(容器):
容器(Container)的定义和镜像(Image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
Repository(仓库):
镜像仓库是 Docker 用来集中存放镜像文件的地方,类似于我们之前常用的代码仓库。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。
我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 Latest 作为默认标签。
镜像和容器图解:
5.docker的组成部分
Docker是传统的C/S架构分为docker client和docker server
Docker 客户端是 Docker 用户与 Docker 交互的主要方式。
当您使用 Docker 命令行运行命令时,Docker 客户端将这些命令发送给服务器端,服务端将执行这些命令。
Docker 命令使用 Docker API 。
Docker 客户端可以与多个服务端进行通信。