Docker 简介
Docker 是一个开源的应用容器引擎,可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker组成
- DockerClient客户端
- Docker Daemon守护进程
- Docker内部
- Docker Image镜像
- DockerContainer容器
- DockerRepository 仓库
Docker守护进程
如上图所示,Docker守护进程运行在一台主机上。用户并不直接和守护进程进行交互,而是通过 Docker 客户端间接和其通信。
Docker 客户端
Docker 客户端,实际上是 docker 的二进制程序,是主要的用户与 Docker 交互方式。它接收用户指令并且与背后的 Docker 守护进程通信,如此来回往复。
Docker 内部
要理解Docker内部构建,需要理解以下三种部件:
Docker 镜像 – Docker Images
Docker 仓库 – Docker Registry
Docker 容器 – Docker Containers
Docker镜像是Docker容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker 使用UnionFS 来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个 Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新 的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker 镜像变得简单和快速。
Docker仓库用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker 仓库也有公有和私有的概念。公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。Docker 仓库是 Docker 的分发部分。
Docker容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分。
Docker 架构
- Docker 使用客户端-服务器 (C/S) 架构模式
- 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信
- Docker daemon 一般在宿主主机后台运行
- Docker 容器通过 Docker 镜像来创建
应用场景
- 使应用的打包与部署自动化
- 创建轻量、私密的PAAS环境
- 实现自动化测试和持续的集成/部署
- 部署与扩展webapp、数据库和后台服务
Docker劣势
- Docker是基于Linux 64bit的
- 隔离性有些欠缺,所有container公用一部分的运行库
- 网络管理相对简单,主要是基于namespace隔离
- cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量
- container随着用户进程的停止而销毁,container中的log等用户数据不便收集
核心原理
UnionFS:联合文件系统
DockerFile:自动化Docker容器的创建过程
镜像:可执行的完整项目环境
参考:
https://www.cnblogs.com/kevingrace/p/5252929.html
原文链接:https://www.cnblogs.com/yyyyzwd/p/15953838.html