002Docker学习__对docker架构的理解

Posted lizhi199322

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了002Docker学习__对docker架构的理解相关的知识,希望对你有一定的参考价值。

本文内容概述

  • 对docker架构图的理解
  • 配置远端客户机请求本地Docker主机
  • 对镜像(Image),容器(Container),仓库(Registry)的理解

Docker架构图

技术图片

Docker的架构组成

  • Docker 客户端 - Client端
  • Docker 服务器端 - DOCKER_HOST
  • Docker Registry - Docker的镜像仓库
  • Docker 采用的是 Client/Server(C/S) 架构。客户端向服务器发送请求,服务器负责构建、运行和分发容器。
  • 不论是C端还是S端都是由docker这一个程序来提供,这个程序包含很多的子程序
    • 其中有一个子程序docker daemon,表示:运行为守护进程
    • 运行docker daemon,就是将这台主机变成docker的守护进程服务器
    • 它支持三种类型套接字:ipv4:端口;ipv6:端口;Unix sockfile Unix sockfile是监听在一个本地的文件上
    • 它可以监听在某个套接字之上,为了安全起见,默认只提供本机的Unix sockfile套接字,这样就只允许客户端是本地的

Docker 客户端

  • 最常用的 Docker 客户端是 docker 命令。通过 docker 可以方便地在 Host 上构建和运行容器。docker 支持很多操作(子命令),后面会逐步用到。

           [root@node01~]#docker 通过这条命令我们可以查看到很多docker使用的命令

  • 客户端和服务器可以运行在同一个 Host 上,客户端也可以通过 socket 或 REST API 与远程的服务端通信。

Docker 服务器端

它是一个真正运行容器的主机
         docker images 和 docker containers 是docker主机上非常重要的组成部分,基础镜像大多来自于docker registry

Docker daemon 是服务器组件,以 Linux 后台服务的方式运行。

技术图片

Docker daemon 运行在 Docker host 上,负责创建、运行、监控容器,构建、存储镜像。
默认配置下,Docker daemon 只能响应来自本地 Host 的客户端请求。如果要允许远程客户端请求,需要在配置文件中打开 TCP 监听,步骤如下:
       编辑配置文件vim /usr/lib/systemd/system/docker.service 在环境变量 ExecStart 后面添加 -H tcp://0.0.0.0,允许来自任意 IP 的客户端连接。

技术图片

配置完成后重启docker daemon

[root@node01~]#systemctl daemon-reload

[root@node01~]#systemctl restart docker

docker主机的IP地址为172.16.117.12,现在用另外的一台主机访问docker 主机

[root@docker]# docker -H 172.16.117.12 version

Client: Docker Engine - Community

Version: 19.03.6

API version: 1.40

Go version: go1.12.16

Git commit: 369ce74a3c

Built: Thu Feb 13 01:29:29 2020

OS/Arch: linux/amd64

Experimental: false

.................

 

Image镜像--概述

技术图片

  • 镜像是 Docker 容器的基石,容器是镜像的运行实例,有了镜像才能启动容器。
  • docker镜像含有启动容器所需要的文件系统及其内容,因此,其用于创建并启动docker容器
  • docker镜像是分层构建的,所以可以共享,可以使用同一个镜像启动N多个容器
  • docker镜像也需要在docker主机的本地存储
    • 采用分层构建机制,最底层为bootfs,其上层为rootfs
      • bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完成后会被卸载以节约内存资源。
      • rootfs:位于bootfs之上,表现为docker容器的根文件系统
        • 传统模式下,系统启动之时,内核挂载rootfs时首先将其挂载为”只读“模式,完整性自检完成后将其重新挂载为读写模式
        • docker中,rootfs由内核挂载为”只读“模式,而后通过”联合挂载“技术额外挂载一个”可写“层。
        • 位于下层的镜像称为父镜像(paient images),最底层的称为基础镜像(base image)
        • 最上层为”可读写层“,其下的均为只读层。

Container容器--概述

      docker利用容器来运行应用,容器是从镜像创建的运行实例
     以一个镜像运行一个容器,是在镜像这一层的上一层增加了一个可写层。
     它可以被启动,开始、停止、删除、每个容器都是互相隔离的,保证安全的平台,可以把容器看做是一个简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行再其中的应用程序。

Registry仓库--概述

    • Registry 是存放 Docker 镜像的仓库,Registry 分私有和公有两种。
      • Docker Hub(https://hub.docker.com/) 是默认的 Registry,由 Docker 公司维护,上面有数以万计的镜像,用户可以自由下载和使用。
      • 出于对速度或安全的考虑,用户也可以创建自己的私有 Registry。
    • 开发人员可以在笔记本上构建镜像并上传到 Registry,然后 QA 人员将镜像下载到物理或虚拟机做测试,最终容器会部署到生产环境。
    • 启动容器时docker daemon会试图从本地获取相关镜像;本地镜像不存在时,其将从Registry中下载该镜像保存到本地。
    • 一个registry的组成部分有两个:
      • Repository
        • 由特定的docker镜像的所有迭代版本组成的镜像仓库
        • 一个registry中可以存在多个Repository
          • repository可分为”顶层仓库“和”用户仓库“
          • 用户仓库名称格式为”用户名、仓库名“
        • 每个仓库可以包含多个Tag(标签),每个标签对应一个镜像
      • Index
        • 维护用户账户、镜像的校验以及公共命名空间的信息
        • 相当于registry提供了一个完成用户认证等功能的检索接口

以上是关于002Docker学习__对docker架构的理解的主要内容,如果未能解决你的问题,请参考以下文章

002_docker构建zookeeper环境

Docker学习__基本概念

Docker _容器,架构原理,常用命令

docker-learning_01

Docker学习__docker命令[docker version 和 docker info]

003Docker学习__commit命令构建docker镜像