跳到主要内容

第1章 Docker介绍

1.Docker是什么

image-20220218094026221.png

Docker是Docker.Inc 公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在 GitHub 上,基于Go语言并遵从Apache2.0协议开源。
Docker是通过内核虚拟化技术(namespaces及cgroups等)来提供容器的资源隔离与安全保障等。
由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率。

2.容器与虚拟机对比

传统虚拟化和Docker分层对比:

1240

VM虚拟化和Docker特性对比

1240

总结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 作为默认标签。

镜像和容器图解:

1240

5.docker的组成部分

Docker是传统的C/S架构分为docker client和docker server
Docker 客户端是 Docker 用户与 Docker 交互的主要方式。
当您使用 Docker 命令行运行命令时,Docker 客户端将这些命令发送给服务器端,服务端将执行这些命令。
Docker 命令使用 Docker API 。
Docker 客户端可以与多个服务端进行通信。

1240