docker 核心概念整理

一、镜像(Image) vs Dockerfile

1、docker在镜像(image)中运行你的代码,而不是Dockerfile,镜像文件就是从Dockerfile编译而得到的不透明资产

2、dockerfile是通过docker build命令来编译镜像的配置文件,当你用docker push命令发布自己的镜像的时候,你发布的不是任何你的代码,而是由你的代码编译出来的镜像文件



二、注册表(Registry) vs 索引(Index)

注册表(镜像注册表,registry)和索引(镜像索引,index)这两个概念,以及它们的区别也很特殊。

一个索引用来管理用户账号,权限,搜索,打标签,以及其它可以方便的通过Web界面来完成的工作。

一个注册表则是真正的用来保存、提供镜像文件的概念。它通过索引来完成用户认证步骤。

当你执行docker search命令的时候,Docker会到index里执行查找工作,而不是registry。从实际上来说,Docker会在索引(index)所知道的多个注册表(registry)中进行查找。

而当你执行docker push 或者 docker pull操作的时候,index会判断你是否有权限访问或者修改该镜像文件,如果通过index的认证操作的话,registry则进行实际的镜像存储工作或者将镜像文件发送给请求端。同样,index会知道你想访问的镜像的存储位置(哪个registry上),然后将访问请求转向到相应的registry。



三、镜像仓库(Repository )

Docker 使用类似于Github或者其他SCM工具的仓库概念。当然,它们也不完全等价。

实际上,这是一个问题,因为镜像仓库是所有这些概念的合集,而不是单独的任何一个



四、docker image本机上的本地存储位置

docker images命令显示的内容都是本机上存在的资源,那我这些资源到底会在哪里呢,那我们来看看/var/lib/docker这个文件夹下的内容:

[root@docker docker]# cd /var/lib/docker/
[root@docker docker]# ll repositories*
-rw——- 1 root root 1047 Sep 21 10:22 repositories-aufs
-rw——- 1 root root 1050 Sep 25 01:37 repositories-devicemapper

我们可以看到在该目录下有两个文件

cat repositories-devicemapper | python -mjson.tool
cat repositories-aufs | python -mjson.tool

其实两个文件都保存着镜像的信息。如果仔细辨认,你会发现:

repositories-devicemapper里面保存的是当前存在的本地镜像的信息
你每pull一个镜像下来,里面就会增加一段信息,例如这样:

"192.168.0.216:5000/httpd": {
            "latest": "35972236645ab46a8cc3ff24fc39ed43e259134de5ff1a3216726eab3e2827c2"
        },

repositories-aufs文件中保存的则是镜像仓库的信息。


你会发现/var/lib/docker下面还有一个文件夹graph
那我们来看看/var/lib/docker/graph下面有什么东西!

ls -l /var/lib/docker/graph/

下面有许许多多的文件夹,没错,那就是Images ID,并且是你曾经使用过的Images ID信息,还有layer,也许你在pull images的时候会发现,它在期间download layer。

drwx------   2 root root  4096 Sep 21 11:43 f912d1b83a6c5f0d6409083fed731e5963aeb05ff2832f5e4899929f99ed86a1
drwx------   2 root root  4096 Sep 15 09:03 f94304dc94e325bb13db375898780bec04fc83362381d6b8476ab288287e5d9a
drwx------   2 root root  4096 Sep 15 08:59 f972ade4c9d5f9863b782ee685c8ec80da9bdb8e43834919214dd68d501687f0
drwx------   2 root root  4096 Sep 21 12:04 f9a8cbc8dd13fb5bdbcff050cbeee76cc8c967a9ab2122714d00090c5815d385
drwx------   2 root root  4096 Sep 15 09:47 f9bff7d0d06e65f89dce91e43caefc3fe090818bae24d67c9732bd4a7ada19dc
drwx------   2 root root  4096 Sep 15 09:00 fe0e725486e9d7c95ff25b7ae77801187f60fb29aa15e916d5364485e94b3f18
drwx------   2 root root  4096 Sep 15 09:47 ff0618bc0767411abb6b6f28200a67614fea418483f3faa5d649d92b53627e43

我们进入其中一个Images ID 文件夹里面

cd a68ca3ab3814f42c708499ff9ced589f465239912d3b27eea0bd04a9785dccfa/
ls
json layersize

里面有两个文件,json and layersize。那么这个json呢,就是当前Images的详细信息,而这个layersize呢,是一个整数,表示layer的大小。

时间: 2024-07-31 16:59:54

docker 核心概念整理的相关文章

《Docker技术入门与实战》——2.1 核心概念

2.1 核心概念 Docker镜像 Docker镜像(Image)类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统. 例如:一个镜像可以只包含一个完整的Ubuntu操作系统环境,可以把它称为一个Ubuntu镜像.镜像也可以安装了Apache应用程序(或用户需要的其他软件),可以把它称为一个Apache镜像. 镜像是创建Docker容器的基础.通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做

Docker技术入门与实战(第2版)2.1 核心概念

核心概念与安装配置 本章首先介绍Docker的三大核心概念. 镜像(Image) 容器(Container) 仓库(Repository) 只有理解了这三个核心概念,才能顺利地理解Docker容器的整个生命周期. 随后,笔者将介绍如何在常见的操作系统平台上安装Docker,包括Ubuntu.CentOS.MacOS和Windows等主流操作系统平台. 2.1 核心概念 Docker的大部分操作都围绕着它的三大核心概念--镜像.容器和仓库而展开.因此,准确把握这三大核心概念对于掌握Docker技术

《Docker技术入门与实战》——第2章 Docker的核心概念和安装

第2章 Docker的核心概念和安装 本章首先介绍Docker的三大核心概念:镜像(Image)容器(Container)仓库(Repository)读者理解了这三个核心概念,就能顺利地理解Docker的整个生命周期.社区讨论很激烈的一个话题,就是Docker和Linux容器技术到底有何区别?相信读者在阅读完本章后,会得到更清晰的答案.随后,笔者将介绍如何在常见的操作系统上安装Docker,包括Ubuntu.CentOS.Windows和MacOS等.

走近VB.Net(五) VB.Net核心概念

概念 走近VB.Net(五) VB.Net核心概念 VB.Net中文教程在行文上有些重复太多甚至有些啰嗦,以至让人读得索然无味,但是,这个VB.Net中文教程确实是很难得甚至可以说是经典的VB.Net文章.说老实一点,除了读得累一些外,实在是比我写的好多少倍.第二个问题就是很多人谈到很惨,说一切要从头学起,其实所要你学的不过是一些简单的语法变化,最重要的是观念的改变,也就是思维方式的转向,也就是说在经过了最初的摸索以后,你在VB6(我是不懂VB6的,我只懂一些D(不是你想的那个D),没有面向对象

java中的四个核心概念

  Java已经成为一个庞大而复杂的技术平台,对于开发人员而言,要想更好的掌握Java技术,深入理解底层的技术处理细节必不可少.现在介绍下java的四个核心概念: 1.Java虚拟机 Java虚拟机的主要任务是装在class文件并且执行其中的字节码.Java虚拟机包含一个类装载器,它可以从程序和 API中装载class文件.Java API中只有程序执行时需要的那些类才会被装载.字节码由执行引擎来执行.不同的Java虚拟机中,执行引擎可能实现得非常不同.在由软件实现的虚拟机中,最简单的执行引擎就

《Spark大数据分析:核心概念、技术及实践》大数据技术一览

本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问"华章计算机"公众号查看. 大数据技术一览 我们正处在大数据时代.数据不仅是任何组织的命脉,而且在指数级增长.今天所产生的数据比过去几年所产生的数据大好几个数量级.挑战在于如何从数据中获取商业价值.这就是大数据相关技术想要解决的问题.因此,大数据已成为过去几年最热门的技术趋势之一.一些非常活跃的开源项目都与大数据

《Spark大数据分析:核心概念、技术及实践》Scala编程

本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第2节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问"华章计算机"公众号查看. Scala编程 Scala是当前热门的现代编程语言之一.它是编程语言界的凯迪拉克.它是一门强大且优美的语言.学会了它,对你的职业生涯大有裨益. 用不同的编程语言都可以编写大数据应用程序,比如Java.Python.C++.Scala等.Hadoop本身就是用Java编写的.尽管大多数的

Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置

两年半前写的关于Maven的介绍,现在看来都还是不错的,自己转下.写博客的一大好处就是方便自己以后查阅,自己总结的总是最靠谱的. 由浅入深,主要介绍maven的用途.核心概念(Pom.Repositories.Artifact.Build Lifecycle.Goal).用法(Archetype意义及创建各种项目).maven常用参数和命令以及简单故障排除.maven扩展(eclipse.cobertura.findbugs.插件开发).maven配置. 较长,可根据个人需要有选择性的查看,比如

《Spark大数据分析:核心概念、技术及实践》Spark Core

本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问"华章计算机"公众号查看. Spark Core Spark是大数据领域最活跃的开源项目,甚至比Hadoop还要热门.如第1章所述,它被认为是Hadoop的继任者.Spark的使用率大幅增长.很多组织正在用Spark取代Hadoop. 从概念上看,Spark类似于Hadoop,它们都用于处理大数据.它们都能用商用硬