上一篇笔记 面向初学者的Docker学习教程:基础篇 咱们从三个方面大体的介绍了一下Dockerjava
相信看过这篇文章的小伙伴已经对Docker有了一个初步的认识,只有咱们充分认识了Docker的奇妙之处,后面才能更好的使用它,接下来呢,咱们将说一下Docker最重要的三个基本概念,镜像,容器和仓库mysql
在了解镜像这个概念以前,咱们须要先大体了解一下联合文件系统-UnionFS,它是Docker镜像的基础,联合文件系统是一种分层,轻量级而且高性能的文件系统,它支持对文件系统的修改做为一次提交来一层一层的叠加,同时能够将不一样目录挂载到同一个虚拟文件系统下,镜像能够经过分层来进行集成,咱们能够基于一个基础的镜像,而后制做出各类各样知足咱们需求的应用镜像。linux
同时,对于一个精简的OS,rootfs能够很小,有常见的命令就行,同时,底层又是直接使用的操做系统的内核,因此每每Docker中一个镜像的体积相对来讲能够很小,好比一个完整版的centos可能要几个G,可是Docker中的centos大概只有300M.git
对于docker镜像,官方的定义以下:github
An image is a read-only template with instructions for creating a Docker container. Often, an image is based on another image, with some additional customization. For example, you may build an image which is based on the ubuntu image, but installs the Apache web server and your application, as well as the configuration details needed to make your application run.‘web
映像是一个只读模板,带有建立Docker容器的指令。一般,一个映像是基于另外一个映像的,还须要进行一些额外的定制。例如,您能够构建一个基于ubuntu映像的映像,可是安装Apache web服务器和您的应用程序,以及使您的应用程序运行所需的配置细节。sql
PS:一个镜像能够建立多个容器。docker
容器是用镜像建立的运行实例。ubuntu
每一个容器均可以被启动,开始,中止,删除,同时容器之间相互隔离,保证应用运行期间的安全。centos
咱们能够把容器理解为一个精简版的linux操做系统,包括root用户权限,进程空间,用户空间和网络空间等等这些,而后加上再它之上运行的应用程序。
好比咱们如今基于mysql镜像建立了一个容器,那么,这个容器其实并非只有一个mysql程序,而是mysql一样也是安装运行在咱们容器内的linux环境中的。
再说这个问题以前,咱们不妨先来看一下下面这段java代码:
Person p = new Person();
Person p1 = new Person();
Person p2 = new Person();
复制代码
镜像在这里就是咱们的Person,容器就是一个个Person类的实例。一个Person能够建立多个实例,一个镜像也能够建立多个容器。
仓库相对来讲就比较容易理解了,仓库(Repository)是集中存放镜像文件的场所。
仓库分为公开仓库和私有仓库,目前的话,全世界最大的仓库是Docker官方的 Docker Hub
因为一些不可抗拒的因素,致使咱们若是从Docker Hub上下载公开的镜像是很是蛋疼的,这点你们能够参考你用百度网盘官方下载时的感受。因此,国内咱们通常使用阿里云或者网易云的镜像仓库。
镜像 容器 仓库 他们三者之间的关系图以下:
今天呢,咱们简单的描述了一下Docker三要素,镜像,容器和仓库,在以后的学习中咱们会常常看到镜像和容器这两个概念,同时也会编写咱们本身的DockerFile构建咱们自定义的镜像文件。
最后,相关笔记已经同步开源至Github(欢迎star):: github.com/hanshuaikan…