Docker Image(镜像)

概念

Docker image 本质上是一个 read-only 只读文件, 这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必须的文件。我们可以把 Docker image 理解成一个模板, 可以通过这个模板实例化出来很多容器。

image 里面是一层层文件系统 Union FS 。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统。每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三
种权限,只读( readonly )、读写( readwrite )和写出( whiteout-able ),但是 docker 镜像中每一层文件系统都是只读的。
构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样。当你使用的时候,你只会看到一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。
我们以日常的地板为例,开发商的房子提供给用户的时候一般是做好了地暖,而这些地暖其实是一层一层添加的,最底层的钢筋水泥层,然后添加保温层,采暖管,再铺设水泥层,到最后交付的时候家家户户都是水泥面,这一层一般是不可修改的,最上层用户一般会再铺设商木地板或者地板砖每家每户的选择不一样,相当于我们镜像的容器层。

为什么需要镜像

在部署应用时,通过手工或写一些脚本的方式进行部署。这样部署面临问题就是云端和本地环境一致问题。用户为每个应用打包过程比较繁琐,需要配置和给中修改等操作,非常费劲。
然而, Docker 镜像就是为了解决这个小小的 打包 功能,突然一夜之间成名。 它是如何解决 Paas 时代所面临的云端和本地一致性问题?很简单,它是把一个镜像制作成一个完整的操作系统所有文件和对应的目录结构,这样的压缩包是跟你本地和测试环境用的操作系统一摸一样。
docker 最大的贡献就是定义了容器镜像的分层的存储格式 , docker 镜像技术的基础是联合文件系统(UnionFS) ,其文件系统是分层的。这样既可以充分利用共享层,又可以减少存储空间占用。
docker 镜像提供了一种打包应用程序和预配置服务器环境的便捷方式,可以很方便的将其用于个人用途或与其他 Docker 用户公开 共享 。

作用 说明
标准化应用打包 将应用代码、运行时环境、依赖库、系统工具等完整打包成一个不可变的镜像文件。
环境一致性 解决"在我机器上能跑,线上却失败"的问题,确保开发、测试、生产环境完全一致
快速部署与扩展 秒级启动容器,支持横向扩展(如 Kubernetes 基于镜像快速部署多个实例)。
版本控制与回滚 通过镜像标签(如 v1.0latest)管理版本,随时回滚到历史版本。
依赖隔离 每个容器基于镜像独立运行,避免依赖冲突(如 Python 2/3 共存)。

查看镜像仓库在本地的存储信息

先查看配置文件 /etc/docker/daemon.json 设置的数据储存目录在哪里,默认为 /var/lib/docker。

bash 复制代码
cat /etc/docker/daemon.json

这里我是更改到 /data/var/lib/docker 目录下,然后就可以进入该目录下,可以看到 /overlay2 文件夹,该文件夹中记录已拉取镜像文件的信息。

镜像命令详解

|----------------------|--------------------------------------|---------------------------|
| 命令 | 别名 | 功能 |
| 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

功能:列出本地镜像。

语法:

bash 复制代码
docker images [OPTIONS] [REPOSITORY[:TAG]]

别名:

bash 复制代码
docker image ls, docker image list

关键参数:

  • **-a :**列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
  • **--digests :**显示镜像的摘要信息;
  • **-f :**显示满足条件的镜像;
  • **--format :**指定返回值的模板文件;
  • **--no-trunc :**显示完整的镜像信息;
  • **-q :**只显示镜像 ID。

样例:列出本地全部镜像

bash 复制代码
docker images

docker tag

功能:标记本地镜像,将其归入某一仓库。

语法:

bash 复制代码
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

别名:

bash 复制代码
​​​​​​​docker image tag

样例:

bash 复制代码
docker tag nginx:1.27.0-perl crpi-u3d7h19iifo9g57h.cn-shenzhen.personal.cr.aliyuncs.com/lbk_repository/mytest:mynginx_1.27.0

docker rmi

功能:可以根据 id 和名字删除镜像,对于使用的镜像需要先清理容器再删除镜像。
语法:

bash 复制代码
docker rmi [OPTIONS] IMAGE [IMAGE...]

别名:

bash 复制代码
docker image rm, docker image remove

关键参数:

  • **-f :**强制删除;
  • **--no-prune :**不移除该镜像的过程镜像,默认移除;

样例:

docker save

功能:将指定镜像保存成 tar 归档文件。
语法:

bash 复制代码
docker save [OPTIONS] IMAGE [IMAGE...]

别名:

bash 复制代码
docker image save

关键参数:

  • **-o :**输出到的文件。

样例:

bash 复制代码
docker save -o mynginx_1.27.5.tar nginx:1.27.5

​​​​​​​

docker load

功能:导入使用 docker save 命令导出的镜像,docker save 和 docker load 命令通常配合 scp 命令使用来进行镜像的拷贝,该命令是 Linux 系统中基于 SSH 的安全文件传输命令,用于在本地主机和远程主机之间加密传输文件或目录 。
语法:

bash 复制代码
docker load [OPTIONS]

别名:

bash 复制代码
docker image load

关键参数:

  • **--input , -i :**指定导入的文件,代替 STDIN。
  • **--quiet , -q :**精简输出信息。

样例:

docker image inspect

功能:查看镜像详细信息

语法:

bash 复制代码
docker image inspect [OPTIONS] IMAGE [IMAGE...]

样例:查看镜像详细信息

bash 复制代码
docker image inspect nginx:1.27.5

docker history

功能:显示镜像历史。
语法:

bash 复制代码
docker history [OPTIONS] IMAGE

别名:

bash 复制代码
​​​​​​​docker image history

关键参数:

  • **-H , --human :**大小和日期采用人容易读的格式展现
  • **--no-trunc :**显示全部信息,不要隔断;
  • **-q, --quiet:**只显示镜像 id 信息;

样例:

bash 复制代码
docker history nginx:1.27.5

docker import

功能:从归档文件中创建镜像,其功能与 docker load 类似。
语法:

bash 复制代码
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

别名:

bash 复制代码
docker image import

关键参数:

  • **-c :**应用 docker 指令创建镜像;
  • **-m :**提交时的说明文字;

样例:

bash 复制代码
docker import mynginx_1.27.5.tar mynginx

docker image prune

功能:删除不使用的镜像。
语法:

bash 复制代码
docker image prune [OPTIONS]

关键参数:

  • **-a , --all :**删除全部不使用的镜像;
  • **--filter filter:**指定过滤条件;
  • **-f, --force :**不提示是否删除;

样例:

bash 复制代码
docker image prune

docker build

功能: docker build 命令用于使用 Dockerfile 创建镜像。
语法:

bash 复制代码
docker build [OPTIONS] PATH | URL | -

关键参数:

  • **--build-arg=[ ] :**设置镜像创建时的变量;
  • **-f :**指定要使用的 Dockerfile 路径;
  • **--label=[ ] :**设置镜像使用的元数据;
  • **--no-cache :**创建镜像的过程不使用缓存;
  • **--pull :**尝试去更新镜像的新版本;
  • **--quiet, -q :**安静模式,成功后只输出镜像 ID;
  • **--rm :**设置镜像成功后删除中间容器;
  • **--tag, -t:**镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
  • **--network:**默认 default。在构建期间设置 RUN 指令的网络模式;

样例:

bash 复制代码
docker build -t mynginx:v1 .
相关推荐
哈哈幸运17 分钟前
MySQL运维三部曲初级篇:从零开始打造稳定高效的数据库环境
linux·运维·数据库·mysql·性能优化
黑心老人33 分钟前
Mac OS系统下kernel_task占用大量CPU资源导致系统卡顿
linux·运维·服务器·macos
光算科技1 小时前
服务器在国外国内用户访问慢会影响谷歌排名吗?
运维·服务器·c++
口嗨农民工1 小时前
ubuntu18.04启动不了修复
linux·运维·ubuntu
塔能物联运维1 小时前
双轮驱动能源革命:能源互联网与分布式能源赋能工厂能效跃迁
大数据·运维
Java后端何哥2 小时前
Docker Compose 和 Kubernetes(k8s)区别
docker·容器·kubernetes
GalaxyPokemon3 小时前
Muduo网络库实现 [十六] - HttpServer模块
linux·运维·服务器·网络
461K.3 小时前
spark与hadoop的区别
大数据·运维·hadoop·分布式·spark·intellij-idea
Zfox_3 小时前
Git 进阶之路:高效协作之分支管理
大数据·linux·运维·c++·git·elasticsearch
夏天里的肥宅水3 小时前
解决方案:远程shell连不上Ubuntu服务器
linux·运维·服务器·ubuntu