003_详解docker架构

来源:互联网 发布:hbase是关系数据库吗 编辑:程序博客网 时间:2024/06/07 17:44

环境声明
OS: CentOS Linux 7
kernel: 3.10.0-514.2.2.el7.x86_64
docker version: docker-ce-17.03.1.ce

Docker 核心组件(一)
1. Docker 客户端 client
2. Docker 服务器 docker daemon
3. Docker 镜像 image
4. 镜像仓库 Registry
5. Docker容器 container

Docker 架构(二)
客户端/服务器 (C/S)架构模式,客户端向服务器发送请求,服务器负责创建,运行和分发容器;客户端和服务器可以运行在同一个 主机 上,客户端也可以通过 socket 或 REST API 与远程的服务器通信;

Docker 架构图


一、Docker 客户端
常用的 docker 命令 就是 Docker 客户端的一种,通过 docker 可以方便的在 主机上创建和运行容器

docker 有很多子命令,以后会逐步用到( 圈住那一部分,没有圈住的是跟docker这个字符相关的命令)


二、Docker 服务器
Docker daemon 是服务器组件,以服务的方式运行,负责创建、运行、监控容器,并存储镜像;


Docker daemon 默认只能响应本地的客户端请求; 如果需要允许远程客户端请求,需要在配置文件中打开 TCP 监听,步骤如下:

1.编辑 “docker启动配置文件” “/etc/systemd/system/multi-user.target.wants/docker.service” ,在环境变量ExecStart后面添加-H tcp://0.0.0.0 ,允许来自任意 ip 的客户端连接,0.0.0.0之后不添加端口,默认为2375 (需要防火墙开启 2375 端口 )



2.重启 Docker daemon
systemctl daemon-reload

systemctl restart docker.service

3.在另一台装了 docker-ce 的服务器上 执行如下命令,即可与远程服务器通信
docker -H 10.0.0.5 info



三、Docker镜像
可将 Docker 镜像比作只读模板,通过它可以创建 Docker 容器; 镜像是 Docker 容器的基石,容器是镜像的运行实例,有了镜像才能启动容器;

1.镜像生成方式
1) 可以从无到有开始创建镜像
2) 也可以下载并使用别人创建好的现成的镜像
3) 还可以在现有镜像上创建新的镜像

我们可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作 Dockerfile ,通过执行 docker build <docker_file> 命令可以构建出 Docker 镜像;
命令用法:

docker build -t 指定tag标签,即镜像名    PATH

docker build -t hello .



2.镜像的内部构造
要说这个话题,咱们的先知道 Linux 系统是怎么构造的
1)Linux 操作系统由内核空间用户空间 组成 ,如下图

2)详解内核空间用户空间
内核空间是 kernel ,Linux 刚启动时会加载 bootfs 文件系统,之后再将 bootfs 卸载;
用户空间的文件系统是 rootfs,就是咱们经常用到的 /etc /dev /proc /bin 这些目录;

对于镜像来说,底层直接使用宿主机的 kernel,自己只需要提供 rootfs 就行了,而不同的 Linux 发行版主要区别就是 rootfs (centos 使用 systemd 和yum,ubuntu 使用 upstart 和 apt 管理软件包,这些都是用户空间上的区别, Linux kernel 的区别就是ubuntu一般采用的都是比较高版本的内核,而centos则是采用比较稳定的,所以差别不是很大),所以 Docker 可以同时支持多种 Linux镜像,模拟出多种 Linux 操作系统环境; 如下图所示


对于一个精简的 OS ,rootfs 可以很小,只需要包括最基本的命令、工具和程序库即可;(alpine 一个不到10MB的镜像)所以 docker 镜像 那么小就不足为其了


Base镜像
base镜像有两层含义:
1. 不依赖其他镜像,从scratch 构建
2. 其他镜像可以为之进行扩展
能称为 base 镜像的通常都是各种 Linux 发行版的 Docker 镜像, 比如 CentOS 、 Ubuntu 、 Debian 、OpenSuse 等

下载镜像:
docker pull centos

这里声明一下:
1. base 镜像只是在用户空间与发行版本一直,kernel 版本是会随着宿主机的变化而变化的(不明白,再看一下上边的内容)



2. 容器只能使用 宿主机 的 kernel ,并且不能修改
所有容器都共用 宿主机 的 kernel,在容器中没办法对 kernel 升级 ,如果对 kernel 版本有要求,不建议使用容器,采用虚拟机更合适;


四、镜像仓库_Registry
Registry 是存放 Docker 镜像的仓库, Registry 分私有 和 公有 两种
Docker Hub (https://hub.docker.com) 是默认的 Registry , 由 Docker 公司维护, 上面有数以万计的镜像,用户可以自行下载使用( 不过国内的速度。。。); 用户也可以创建自己私有的 Registry


docker pull命令可以从 Registry 下载镜像
Docker run 命令则是先下载镜像( 本地没有的情况 ) ,然后再启动个容器


五、Docker容器
Docker 容器就是 Docker 镜像运行的实例,用户可以通过 CLI ( docker ) 或是 API 启动、停止 、移动或删除容器;