docker是什么以及镜像命令详解
Docker 镜像是什么
Docker image本质上是一个read-only只读文件,这个文件包含文件系统、源码、库文件、依赖、工具等一些运行application所必须的文件
可以将镜像理解成一个模板或者类,通过这个类或者说模板可以实例化出来很多容器
image里面是一层层文件系统Union FS。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统。
每一层文件系统我们称为一层layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是docker镜像中的每一层文件系统都是只读的
构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样。当你使用的时候,你只会看到一个完全的整体,你并不知道里面有几层,也不清楚每一层所做的修改是什么。
镜像生活案例
镜像相当于我们java或者c++中的类,相当于一个模板,可以很方便的构建出来不同的对象。
镜像分层生活案例
我们以日常的地板为例,开发商的房子提供给用户的时候一般是做好了地暖,而这些地暖其实是一层一层添加的,最底层的钢筋水泥层,然后添加保温层,采暖管,再铺设水泥层,到最后交付的时候家家户户都是水泥面,这一层一般是不可修改的,最上层用户一般会再铺设商木地板或者地板砖每家每户的选择不一样,相当于我们镜像的容器层。
为什么需要镜像
在部署应用时,通过手工或者写一些脚本的方式进行部署。这样部署面临问题就是云端和本地环境一致问题。用户为每个应用打包过程比较繁琐,需要配置和各种修改等操作,非常费劲。
然而Docker镜像就是为了解决这个小小的打包功能,而出名的。Docker其实就像一个压缩包文件,它解决云端和本地一致性问题的方法很简单,直接把一个镜像制作成完整的操作系统包含所有的文件和对应的目录结构,这样的压缩包是跟你本地和测试环境使用的操作系统一摸一样的。
docker最大的贡献就是定义了容器镜像的分层存储格式,docker镜像技术的基础就是联合文件系统(UnionFS),其文件系统是分层的。这样即可以充分利用共享层,又可以减少存储空间占用。
docker镜像提供了一种打包应用程序和预配置服务器环境的便捷方式,可以很方便的将其用于个人用途或与其他Docker用户公开共享。
镜像命令详解
镜像命令清单:
标红字段后面详细讲解
命令 | 别名 | 功能 | 备注 |
docker images | docker image ls docker image list | 列出本地镜像 | 必须掌握 |
docker tag | docker image tag | 给镜像打标签,可用于推送镜像仓库 | 必须掌握 |
docker pull | docker image pull | 从镜像仓库拉去镜像 | 和镜像仓库命令相同,也可以归类为镜像操作命令,必须掌握 |
docker push | docker image push | 推送镜像到仓库 | 和镜像仓库命令相同,也可以归类为镜像操作命令,必须掌握 |
docker rmi | docker image rm docker image remove | 删除本地镜像 | 必须掌握 |
docker build | docker image build | 通过dockerfile制作镜像 | 必须掌握 |
docker save | docker image save | 将指定的镜像保存成tar归档文件 | 必须掌握 |
docker load | docker image load | 导入使用docker save命令导出的镜像 | 必须掌握 |
docker image inspect | 查看镜像详细信息 | 必须掌握 | |
docker history | docker image history | 查看镜像历史 | |
docker import | docker image import | 从归档文件docker export中创建镜像 | |
docker image prune | 删除不使用的镜像 |
docker images
功能:列出本地镜像
语法如下
关键参数 | |
-a | 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层) |
--digests | 显示镜像的摘要信息 |
-f | 显示满足条件的镜像 |
--format | 指定返回值的模板文件 |
--no-trunc | 显示完整的镜像信息 |
-q | 只显示镜像ID |
可以直接输入镜像名称进行过滤
docker tag
功能:标记本地镜像,将其归入某一仓库
语法如下
这里可以看看阿里云的案例,后续我的推送和登录会以案例容器镜像服务为基础
docker pull 和 docker push
拉取官网的镜像看上面的截图
拉取阿里云的镜像
将镜像推送到阿里云
ocker rmi
功能:删除镜像
语法如下
关键参数 | |
-f | 强制删除 |
--no-prune | 不移除该镜像的过程镜像,默认删除 |
docker save
功能:将指定镜像保存成tar归档文件
语法如下
关键参数 -o:输出到文件
docker load
功能:导入使用docker save命令导出的镜像
语法如下
| |
--input,-i | 指定导入的文件,代替STDIN |
--quiet,-q | 精简输出信息 |
docker history
功能:查看镜像的详细信息
语法如下
关键参数 | |
-H,--human | 大小和日期采用人容易读懂的格式展现 |
--no-trunc | 显示全部信息,不要阻隔 |
-q,--quiet | 只显示镜像id信息 |
docker import
功能:从归档文件中创建镜像
语法如下
关键参数 | |
-c | 应用docker指令创建镜像 |
-m | 提交时的说明文字 |
docker image prune
功能:删除不使用的镜像
语法如下
关键参数 | |
-a,--all | 删除全部不使用的镜像 |
--filter filter | 指定过滤条件 |
-f,--force | 不提示是否删除; |
docker build
功能:docker build命令用于使用Dockerfile创建镜像
语法如下
关键参数 | |
--build-arg=[] | 设置创建镜像时的变量 |
-f | 指定要使用的Dockerfile路径 |
--label=[] | 设置镜像使用的元数据 |
--no-cache | 创建镜像的过程中不使用缓存 |
--pull | 尝试去更新镜像的新版本 |
--quiet,-q | 安静模式,成功后只输出镜像ID |
--rm | 设置镜像成功后删除中间容器 |
--tag,-t | 镜像的名字及标签,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个标签 |
--network | 默认default。在构建期间设置RUN指令的网络模式 |
docker build 是 Docker 的核心命令之一,用于 根据 Dockerfile 构建自定义镜像。它的作用不仅仅是打包文件,而是通过逐层(Layer)执行指令来创建一个可移植、可复现的容器镜像。