天天看点

docker学习笔记1what is a docker?Docker的基本组成Docker底层技术

Docker

  • what is a docker?
    • what is a Container?
    • Container VS Virtual Mechines
  • Docker的基本组成
    • Docker 客户端/守护进程
    • Docker Image镜像
    • Docker Container容器
    • Docker Registries仓库
  • Docker底层技术
    • Namespaces命名空间
    • Control Groups控制组
    • Union flie system
    • Container format

what is a docker?

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。Go语言开源引擎:Git地址

Docker通常用于如下场景:

  • web应用的自动化打包和发布;
  • 自动化测试和持续集成、发布;
  • 在服务型环境中部署和调整数据库或其他的后台应用;
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

what is a Container?

什么是容器?

它一种虚拟化方案,是将代码及其所有依赖项打包的标准软件单元。因此通过容器,应用程序可以快速可靠地从一个计算环境运行到另一个环境。

它是一种操作系统级别的虚拟化,只能运行与底层操作系统相同或相似内核的操作系统。Docker使用的容器技术依赖于Linux内核的Namespace和Cgroup(Control Group)特性,所以docker容器上只能运行Linux内核的系统。

Container VS Virtual Mechines

docker学习笔记1what is a docker?Docker的基本组成Docker底层技术
docker学习笔记1what is a docker?Docker的基本组成Docker底层技术

容器和虚拟机具有类似的资源隔离和分配优势,容器虚拟化的是操作系统而不是实际的硬件。因此对比虚拟机,容器更便携、效率更高。

容器是应用程序层的抽象,它将代码和依赖关系打包在一起。只需要包含应用和其依赖的库,比vm占用的空间更小(容器映像通常有几十mb大小),可以处理更多的应用程序,并且需要更少的vm和操作系统。

虚拟机是将一台服务器转换为多台服务器的物理硬件的抽象。使用虚拟机部署应用除了应用和其依赖的库之外,还要包含完整的操作系统。

Docker的基本组成

Docker由以下几部分组成:

  • Docker Client 客户端;
  • Docker Daemon 守护进程;
  • Docker Image 镜像;
  • Docker Container 容器;
  • Docker Registry 仓库;

    基本结构组成:

    docker学习笔记1what is a docker?Docker的基本组成Docker底层技术

Docker 客户端/守护进程

Docker采取的C/S结构。Docker client同Docker daemon通讯,Docker daemon负责维护docker 容器的构建,运行和分发。

Client和Daemon可以再同一台主机上面执行,也可以分开执行。本地的client可以连接远程的daemon。Client可以通过socker或者REST API同daemon通讯。

通过Docer客户端执行命令,Docker客户端会将这些命令传给Docker守护进程。守护进程还会将命令执行的结果返回给客户端,通过客户端可以查看命令运行的结果。

docker学习笔记1what is a docker?Docker的基本组成Docker底层技术

Docker Image镜像

Image镜像是容器的基石,它是由层叠只读层(read-only layer)组成的只读文件系统。每一个镜像由一系列的层 (layers) 组成。Docker 使用 UnionFS(Union File System:统一文件系统)来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。

通常情况下,新的Image都在旧的Image之上创建。通过编写并执行Dockerfile文件,可以自行创建一个新的Docker Image。

Docker 镜像发生改变时,一个新的层会被创建。程序升级时,不需要替换或重新建立镜像,只添加一个新的层或升级层。

Docker Container容器

Docker容器包含了所有的某个应用运行所需要的环境。容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分。 通过

docker run

命令可运行容器。

Docker Registries仓库

Docker Registry 用来存储Docker镜像,类似代码管理仓库。Docker Hub和Docker Cloud上提供了庞大的镜像集合供使用。可直接下载

docker pull

使用现有的Image或在他人的Image上创建新的Image,使用

docker push

可以推送自己的Image

Docker底层技术

Docker是用Go编写的,它依赖于Linux内核的几个功能来提供其功能。

Namespaces命名空间

类似c++等编程语言中的namnespaces,Docker利用namespces技术来实现工作空间的的隔离。当运行一个container时,Docker就会为其创建namespaces, 容器的各个层都在一个单独的命名空间中运行,其访问权限仅限于该命名空间。

Docker Engine 使用了这几项linux命名空间:

  • pid:Process ID 进程隔离
  • net:Network网络隔离
  • ipc:Interprocess Communicate跨进程访问
  • mnt:Mount 管理挂载点
  • uts:Unix Timesharing System隔离内核和版本标识

Control Groups控制组

control groups 是linux内核提供的一种可以限制、控制、隔离进程组所使用的物理资源的机制。控制组允许Docker Engine将可用的硬件资源共享给容器,并可选择强制执行限制和约束。它提供这几项功能:

  • 资源限制:可设置内存大小
  • 优先级设置:可设定进程组使用资源的优先级
  • 资源计量:计量进程组使用的资源
  • 资源控制:进程组挂起和恢复

Union flie system

联合文件系统或UnionFS是,通过创建一系列层来组成的文件系统,是一种轻量级的高性能分层文件系统,支持将文件系统中的修改进行提交和层层叠加,这个特性使得镜像可以通过分层实现和继承。同时支持将不同目录挂载到同一个虚拟文件系统下。 Docker Engine可以使用多种UnionFS变体,包括AUFS,btrfs,vfs和DeviceMapper。

Container format

Docker Engine 将命名空间、控制组、unionfs结合、包装起来,这个默认的包称为libcontainer,利用libcontainer可创建新的Docker容器。

继续阅读