目录
一、基本概念
1、镜像介绍
通俗理解,Docker镜像是用于创建和运行容器的轻量级、可执行的独立软件包。它是一个包含了应用程序的文件系统,其中包括了运行该应用程序所需的所有内容:代码、运行时环境、系统工具、系统库以及依赖的软件。镜像是用于创建容器的模板,并且可以被共享和重复使用。
2、镜像与容器
Docker镜像就像停止运行的容器;我们可以将镜像理解为类(Class)。镜像需要从镜像仓库服务中拉取镜像。常见的镜像仓库服务是DockerHub,但是也存在其他镜像仓库服务。拉取操作会将镜像下载到本地 Docker主机。
我们可以停止某个容器的运行,并从中创建新的镜像(会保存当前执行的环境状况)。在该前提下,镜像可以理解为一种构建时(build-time)结构,而容器可以理解为一种运行时(run-time)结构,如图:
3、为什么要用镜像
在部署应用时,通过手工或写一些脚本的方式进行部署。这样部署面临问题就是云端和本地环境一致问题。用户为每个应用打包过程比较繁琐,需要配置和给中修改等操作,非常费劲。然而, Docker 镜像就是为了解决这个小小的打包功能,突然一夜之间成名。那么,你可能说 Docker 镜像就是个压缩包,是的,你猜对了,它就像一个压缩包文件。它是如何解决 Paas 时代所面临的云端和本地一致性问题?很简单,它是把一个镜像制作成一个完整的操作系统所有文件和对应的目录结构,这样的压缩包是跟你本地和测试环境用的操作系统一摸一样。 docker 镜像提供了一种打包应用程序和预配置服务器环境的便捷方式,可以很方便的将其用于个人用途或与其他 Docker 用户公开共享。
4、镜像文件分层
docker 最大的贡献就是定义了容器镜像的分层的存储格式, docker 镜像技术的基础是联合文件系统(UnionFS),其文件系统是分层的。这样既可以充分利用共享层,又可以减少存储空间占用。
镜像由多个层组成,每层叠加之后,从外部看来就如一个独立的对象。镜像内部是一个精简的操作系统(OS),同时还包含应用运行所必须的文件和依赖包。因为容器的设计初衷就是快速和小巧,所以镜像通常都比较小。
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
bootfs(boot file system):主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
rootfs (root file system):在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。
UnionFS(联合文件系统): Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
通常在虚拟机中的 OS 基本上都是以G为单位的,为什么在 Docker 镜像中才100M左右?
其实是因为,对于一个精简版的操作系统,rootfs可以非常小,只需要包含基本的命令、工具和程序库即可,因为底层直接使用宿主机的 kernel,自己只需要提供 rootfs 便可。此外,即使存在不同的 Linux 发行版本,但是 bootfs 基本都是一致的,可以公用 bootfs。
二、常用命令
1、搜索镜像
语法:docker search 关键字
例子:docker search mysql
其它:也可以从 Docker Hub 网站搜索镜像,网址为:Docker Hub Container Image Library | App Containerization
2、拉取镜像
语法:docker pull 镜像名[:tag],tag表示镜像版本,可以省略,默认latest
docker pull mysql:8.0.15
3、镜像列表
作用:查看所有本地镜像
docker images
4、删除镜像
语法:docker rmi imageId | 镜像名:tag
docker rmi 7484689f290f
5、镜像迁移
5.1、保存镜像
a、查看
docker images
b、打包
将镜像打包后存储至指定目录
docker save 7bb2586065cd> /opt/mysql-8.0.15.tar
5.2、加载镜像
1、上传
将打包的Docker镜像文件拷贝到另一虚拟PC目录,这里为/opt,(本案例还是以本机为例)
先把原来的镜像删除
docker rmi 7bb2586065cd
2、加载
将上传的Docker镜像文件
docker load < /opt/mysql-8.0.15.tar
3、重命名
新加载的镜像名字和标签均为none,需要通过“docker tag 镜像id 镜像名:标签”命令对名字和标签重新命名
docker images
docker tag 7bb2586065cd mysql:8.0.15
docker images
说明:
平常下载docker镜像会通过配置国内源来加速下载,但是有时候会有另外的需求,比如某个机器不能联网,我们就需要从其他机器下载,打包后,拷贝到这个机器,这就是docker保存镜像到本地并加载本地镜像文件的意义。