Docker是一种容器技术。
容器
容器可以理解为应用程序的运行环境的沙箱。它是一种虚拟化技术,通过对物理机资源如CPU、内存、硬盘、网络等增加一层逻辑抽象,创建一个能够提供运行目标应用所需资源的对外隔离的虚拟环境,就像是将应用程序放进瓶子里一样。
使用容器技术可以带来以下好处:
- 与物理机操作系统解耦。容器通过虚拟化的方式使用物理机的资源,使得不与某个具体的操作系统绑定,在不同的云或OS环境中部署更加容易。
- 安全。容器通过提供与外部环境隔离的沙箱环境,使得即使运行在内的应用受到外部外部攻击,也能将影响限制在容器中,从而保护物理机的其他资源和进程不受影响。
- 标准化。通过将目标应用及其依赖环境一起打包到容器镜像中,使得无论将镜像放到任何操作系统中运行应用都能得到相同的行为。
Docker的架构
Docker使用client-server架构。Docker Client通过REST API 或者 Socket 与 Docker daemon 通讯,Docker daemon 接收 Docker Client的请求实现相应的操作如构建镜像、运行容器等。
Docker daemon
Docker daemon(dockerd)接收 Docker API 请求以及管理Docker 对象如images,containers,networks,volumes等。一个Daemon 也可以与另一个Daemon通讯组成Docker service。
Docker client
Docker client(docker)即docker客户端,是用户向Docker发送操作请求的工具。当我们发送docker run命令时,Docker client会调用相应的Docker API向Docker daemon发送请求,Docker daemon收到请求后执行相应的run命令。
Docker registries
Docker registries就是Docker的镜像库。默认的镜像库是Docker Hub,可以使用自定义的镜像库覆盖默认镜像库。
Docker镜像
Docker镜像就是用来创建Docker容器的只读模板,模板记录着一连串关于如何创建目标容器的指令。通常情况下,一个镜像会基于另一个基本镜像构建,并在此基础上增加一些自定义的指令。例如,你可能会基于ubuntu镜像构建一个新的应用程序镜像,加入一些应用相关的设置指令。
默认情况下,当使用docker build构建镜像时,Docker会在目标构建路径下寻找名为Dockerfile的文件,文件里定义了如何创建容器的步骤。
Docker容器
容器就是镜像派生出来的一个运行时实例。通过linux的 namespaces 和 cgroup 技术保证容器为运行于其中的应用提供一个隔离和资源受控的运行时环境。