镜像
镜像是什么?
镜像就是一个Linux 文件系统,包含运行应用程序所包含的一切,比如应用程序本身和容器所依赖的环境。
通过镜像创建一个容器时,就是将镜像定义好的用户空间作为独立隔离的进程运行在宿主机的Linux内核上。(一般来说,Linux操作系统包括用户空间和Linux内核)
容器
容器是一个视图隔离、资源可限制的进程。
容器的隔离机制和资源限制由 Linux 的NameSpace和CGroup提供。
NameSpace 使每个进程只能看到它自己的系统视图(如文件、进程id、网络接口等),可以看作该进程的“视线”被操作系统做了限制,只能“看到”某些指定的内容。
| NameSpace | 隔离的资源 |
|---|---|
| IPC | 信号量、消息队列和共享内存 |
| NetWork | 网络、端口 |
| User | 用户和用户组 |
Linux 通过 CGourp 来限制进程能使用的资源量(CPU、内存、网络带宽等)
Docker
Docker 引擎
Docker的隔离和安全特性允许用户在一个主机同时运行多个容器,而且它并不像虚拟机那样重量级,容器都是基于宿主机的内核运行的,它是轻量的,不管你运行的是ubuntu, debian还是其他Linux系统,用的内核都是宿主机内核。
Docker Engine 也就是常说的 docker,本身并不是容器,是创建容器的工具,是一个提供了许多功能组件的 C/S 架构的应用,负责管理镜像、容器、网络以及数据卷等。Docker Engine包含下面几部分:
- Docker Daemon — Docker 的守护进程,属于C/S中的 server
- Docker REST API — Docker daemon 向外暴露的 REST 接口
- Docker CLI — Docker daemon 向外暴露的命令行接口(Command Line API)
因此,客户端访问服务端的方式有两种:使用命令行,或直接调用Rest API。
Docker架构(了解即可)
- Docker Daemon:Docker后台进程,用于管理镜像,容器以及数据卷。
- Docker Client:用于与Docker Daemon交互。
- Docker Registry:用于存储Docker镜像,类似github,公共的Registry有Docker Hub和Docker Cloud。
- Images:镜像是容器运行时所需要的所有的文件集合,也可以看作是容器的模版。镜像(image)包含运行应用程序所包含的所有东西——代码或二进制文件,运行时、依赖项等等。
- Containers:容器是镜像的一个可运行示例,我们可通过Docker client(run命令)或者API来创建,启停或者删除容器。默认情况下,容器与宿主机以及其他容器已经隔离,当然你可以控制隔离容器的网络或者存储的方式。
- Repository: Docker仓库,用于存放镜像的仓库。
- Services:服务是docker swarm引入的概念,可以用于在多宿主机之间伸缩容器数目,支持负载均衡已经服务路由功能。