• home > tools > Virtual > Docker >

    Docker背后的原理概述及镜像操作

    Author:zhoulujun Date:

    docker 是基于 Linux 内核的 cgroup,namespace。cgroup(control groups)限制每个进程的资源使用如 cpu,内存等。所谓镜像就是构建容器的源代码,是一个只读的模板,由一层一层的文件系统组成的,类似于虚拟机的镜像

    上篇《虚化技术新冠Docker的优势与传统虚拟机VMware的异同》,提过,docker 中有三个主要概念,镜像(Image),容器(Container)和仓库(repository)。

    概念说明

    Docker 镜像(Images)

    Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。

    Docker 容器(Container)

    容器是独立运行的一个或一组应用,是镜像运行时的实体。

    Docker 客户端(Client)

    Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。

    Docker 主机(Host)

    一个物理或者虚拟的机器用于执行 Docker  守护进程和容器。

    Docker Registry

    Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。

    一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

    通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

    Docker Machine

    Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

    我们安装的 Docker 分为两个部分 Docker Client 和 Docker Server。我们通过 Client 发送命令到 Server,由 Server 来创建镜像,运行容器等工作。

    docker部署原理

    docker 是基于 Linux 内核的 cgroup,namespace。

    • Linux Namespace 是 Linux提供的一种内核级别环境隔离的方法,它用来隔离一个进程或一组进程的资源,如 硬盘,网络等。

    • cgroup(control groups)限制每个进程的资源使用如 cpu,内存等。

    由于 windows 和 mac 上面没有上述的技术,所以 windows 和 mac 上的 docker 其实是运行在一个 linux 虚拟机中的。

    镜像

    当我们要在本机运行一个容器时,比如使用 nginx 镜像启一个容器,我们可以执行docker run nginx 命令,docker 会首先查看本地镜像缓存中是否存在该镜像,如果没有就从远程仓库下载 nginx:latest 镜像下来,保存到本地的镜像缓存中,然后通过该镜像启动运行一个容器。

    docker镜像结构分析docker镜像分析

    镜像就像是一个特殊文件系统,它想一个文件系统快照,当启动运行一个容器时,docker 首先会在宿主机的硬盘上划分一片区域,它只能被该容器访问,然后镜像上的文件快照放入这一片区域中。然后运行镜像的启动命令。

    列出镜像列表

    我们可以使用 docker images 来列出存在于宿主机上的镜像。

    docker images -a

    即可列出

    分层存储

    所谓镜像就是构建容器的源代码,是一个只读的模板,由一层一层的文件系统组成的,类似于虚拟机的镜像

    因为镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此在 Docker 设计时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。一个镜像其实是由多层文件系统联合组成。

    docker容器原理与结构分析

    镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。

    删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。

    仓库(Repository)

    其中Registry是Docker用于存放镜像文件的仓库,Docker 仓库的概念跟Git 类似

    Docker Hub是Docker公司提供的一个注册服务器(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。


    参考文章:

    Centos7下安装Docker(详细安装教程) https://blog.csdn.net/u014069688/article/details/100532774

    虚拟机与Docker有何不同 https://www.cnblogs.com/kex1n/p/6933039.html

    Docker 教程 https://www.runoob.com/docker/docker-tutorial.html




    转载本站文章《Docker背后的原理概述及镜像操作》,
    请注明出处:https://www.zhoulujun.cn/html/tools/Virtual/docker/8352.html