Docker背后的原理概述及镜像操作
Author:zhoulujun Date:
上篇《虚化技术新冠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 是基于 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 images 来列出存在于宿主机上的镜像。
docker images -a
即可列出
分层存储
所谓镜像就是构建容器的源代码,是一个只读的模板,由一层一层的文件系统组成的,类似于虚拟机的镜像
因为镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此在 Docker 设计时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。一个镜像其实是由多层文件系统联合组成。
镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。
删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。
仓库(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