docker机制概述
docker机制
docker是容器化的一种实现,可用来部署。
docker hub提供了很多社区开发的容器。
docker用了一种叫做client-server的机制。
client:
命令行工具docker用于和docker server基于RESTful API来执行操作
server:
docker在一个操作系统上作为一个进程,构建build, 运行和下载容器镜像。这个进程可以和docker client运行在同一个操作系统上,可以运行在远端。
Docker核心元素
images:
镜像是一个只读模版,包含了一个实时运行环境所需的所有的库和应用程序本身。镜像可以用来创建容器。镜像可以创建,更新和下载用于实时的使用。
registries
仓库存储共有和私由的images. 比较知名的公开的registries是docker hub.它存储了许多由社区开发的镜像。但是私有的registries可以被创建,提供给内部镜像的开发。
containers
containers是在共有host OS上应用程序之间相互隔离的用户环境。
container 和Linux kernel
container是Docker创建的,从docker image中,隔离于其他linux内核的一些标准功能。
这些标准功能包括:
命令空间
内核可以将对特定进程可见的特定系统资源分配到一个命名空间。在这个命令空间,只有在这个命令空间的进程可以看到这些资源。可被分配到命名空间的资源由网络接口,进程ID列表,挂载点,IPC资源和这个系统自己的hostname信息。例如,在不同命名空间的2个进程拥有不同的根文件系统。每个容器都被加到一个特定组的命名空间,这个命名空间为container独有。
cgroups
control groups将进程和他们的子进程进行分组,以便于去管理和限制其所消耗的资源。
cgroup对属于特定容器用的系统和资源进行限制。这就使容器不会耗费container host的资源。
SELinux
SELinux是一个强制访问控制系统,用于将container与其他container, container和container hosts进行保护。 Container以一个限制的SELinux type来运行,其对系统资源只有非常有限的访问权限。每个container的进程被放在一个唯一的种类将彼此隔离。
Docker Container Images
每一个docker image包含了许多层,这些层叠加起来,让容器化的程序看起来就是一个独立的虚拟的文件系统。docker images是不可改变的。只有层之间的叠加而不存在下一层之间改变上一层。
创建image的两种方式
1. 用一个正在运行的container.
一个不变的image启动一个container instance, 任何的简化和更新都会产生一个新的层。Docker 命令‘docker commit’可以存储这个新的层生成新的image。这是生成image最方便的方法。但是我们并不推荐这么做,因为这样生成的image会因为存在临时文件或日志文件等不需要的文件是变的很大。
2. Dockerfile
Container images 可以从一个base image经过Dockerfile中的一些步骤进行编译。每一步都创建了一个新的层直到最后的container image. 这是我们推荐的build image的方法。因为它非常清楚了记录了那些层有那些文件。