【云原生·Docker】Docker简介及基本组件
1.Docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
- Docker Client客户端
- Docker Daemon守护进程
- Docker Image镜像
- Docker Container容器
Docker引擎Docker Engine是C/S架构,主要有以下部件组成:
服务器(Docker daemon):后台运行的Docker daemon进程。Daemon进程用于管理Docker对象,包括镜像(images)、容器(containers)、网络(networks)、数据卷(data volumes)。
REST接口: 同daemon交互的REST API接口。
客户端(Docker client): 命令行(CLI)交互客户端。客户端使用REST API接口同Docker daemon进行访问。Docker服务的架构图如图1.1所示。
图1.1 Docker服务的架构图
2.Docker平台组成
图1.2 Docker服务组成图
运行一个Docker服务,组成包括Docker daemon服务器、Docker Client客户端、Docker Image镜像、Docker Registry库、Docker Contrainer容器,如图1.2所示。
(1)Docker镜像:
是一个只读模板,用于创建Docker容器,由Dockerfile文本描述镜像的内容。镜像定义类似“面对对象的类”,从一个基础镜像(Base Image)开始。构建一个镜像实际就是安装、配置和运行的过程,Docker镜像基于UnionFS把以上过程进行分层(Layer)存储,这样更新镜像可以只更新变化的层。Docker的描述文件为Dockerfile,Dockerfile是一个文本文件,基本指令包括:
FROM: 定义基础镜像。
MAINTAINER : 作者或维护者。
RUN: 运行linux 命令。
ADD: 增加文件或目录。
EVN: 定义环境变量。
CMD: 运行进程。
(2)Docker容器:
是一个镜像的运行实例。容器有镜像创建,运行过程例如:
运行ubuntu操作系统镜像,-I 前台交互模型,运行命令为/bin/bash
$ docker run -i -t ubuntu /bin/bash
运行过程如下:
拉取(pull)镜像,Docker Engine 检查ubuntu 镜像是否存在,如果本地已经存在,使用该镜像创建容器,如果不存在,Docker Engine从镜像库拉镜像。
使用该镜像创建新容器。
分配文件系统,挂载一个读写层,在读写层加载镜像。
分配网络/网桥接口,创建一个网络接口,让容器和主机通信。
从可用的IP池选择IP地址,分配给容器。
执行命令/bin/bash。
捕获和提供执行结果。
(3)Docker 仓库:
Docker仓库是Docker镜像库。Docker Registry也是一个容器。Docker Hub是Docker公司提供的互联网公共镜像仓库。可以构建自己本地的镜像仓库,国内有些公司也构建了镜像仓库。包括阿里云、新浪等。Docker 集群服务:Docker集群服务运行承租的Docker节点一起工作。目前支持swarm模式。
一个 Docker Registry 节点中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
一般而言,一个仓库包含的是同一个软件的不同版本的镜像,而标签则用于对应于软件的的不同版本。可以通过 <仓库名>:<标签> 的格式来指定具体是哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
以 Ubuntu 镜像 为例,ubuntu 是仓库的名字,其内包含有不同的版本标签,如,14.04, 16.04。可以通过 ubuntu:14.04,或者 ubuntu:16.04 来具体指定所需哪个版本的镜像。如果忽略了标签,比如ubuntu,那将视为 ubuntu:latest。