Docker基础:镜像、容器、仓库、镜像的分层、容器数据卷

目录

1、Docker概念

2.Docker的组成

2.1、镜像(image)

2.2、容器(container)

(1)从面向对象角度

(2)从镜像容器角度

2.3、仓库(repository)

3、Dokcer镜像

3.1、Docker镜像的分层

3.2、分层的原因:UnionFS(联合文件系统)

3.3、Docker镜像加载原理

3.4、Docker Commit

4、容器数据卷


1、Docker概念

​ Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

​ 通俗的来讲,Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。

Docker基础:镜像、容器、仓库、镜像的分层、容器数据卷_第1张图片

2.Docker的组成

2.1、镜像(image)

​ 镜像就像是java中的类模板。

JAVA
Book b1 = new Book();
Book b2 = new Book();
Docker image
Redis r1 = docker run image
Redis r2 = docker run image

​ Docker镜像(lmage)就是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。

​ 它也相当于是一个root文件系统。比如官方镜像centos:7就包含了完整的一套centos:7最小系统的 root文件系统。相当于容器的“源代码”,docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。

2.2、容器(container)

(1)从面向对象角度

​ Docker利用容器〈Container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。就像是Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

(2)从镜像容器角度

​ 可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

2.3、仓库(repository)

​ 仓库是集中存放镜像文件的场所。类似于Maven仓库,存放各种jar包的地方。

Docker本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。

image文件可以看作是容器的模板。Docker根据 image文件生成容器的实例。同一个 image文件,可以生成多个同时运行的容器实例。

3、Dokcer镜像

3.1、Docker镜像的分层

​ 在我们运行命令docker pull XXX的时候,我们可以很明显的发现镜像在下载的时候是一层层的下载的。其实这是因为镜像是分层的!

​ Docker镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用。

Docker基础:镜像、容器、仓库、镜像的分层、容器数据卷_第2张图片

3.2、分层的原因:UnionFS(联合文件系统)

​ Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像)),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系疏,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

3.3、Docker镜像加载原理

​ docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。

boofs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是引导文件系统bootfs。这一层与我们典型的LinuxUnix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

​ rootfs (root file system),在bootfs之上。包含的就是典型Linux系统中的/dev, /proc, /bin, letc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

Docker镜像层都是只读的,镜像层都是可写的。

Docker基础:镜像、容器、仓库、镜像的分层、容器数据卷_第3张图片

3.4、Docker Commit

​ 由于docker下载的镜像是最小的,内容只有基础的执行命令,有时我们需要的命令可能它并不包含,所有我们可以自己修改docker下载的镜像运行容器,并且上传到本地镜像。

​ 类似与JAVA继承于一个Base基础类,自己按需扩展。

 

 Docker基础:镜像、容器、仓库、镜像的分层、容器数据卷_第4张图片

4、容器数据卷

​ 卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷

​ 数据都储存在容器中,如果我们将容器删除,那么数据就会丢失。容器中有一个数据共享的技术!将我们容器内的目录挂载到Linux上!

Docker基础:镜像、容器、仓库、镜像的分层、容器数据卷_第5张图片

 

-v :添加自定性的容器卷

①:宿主机的路径

②:容器内的路径

③:放开权限

​ 实现了宿主机的文件和容器内文件的共享互联。

特点

  1. 数据卷可在容器之间共享或重用数据

  2. 卷中的更改可以直接实时生效

  3. 数据卷中的更改不会包含在镜像的更新中

  4. 数据卷的生命周期一直持续倒没有容器使用它为止

你可能感兴趣的:(微服务,分布式,容器,docker,java)