镜像
字数: 0 字 时长: 0 分钟
1. 镜像概述

Docker 镜像(Image)是用于创建容器的只读模板,其中包含应用程序以及运行所需的依赖、函数库、配置和部分运行环境。
简单来说,可以把镜像理解成一个已经准备好的“应用运行包”。镜像本身不会直接运行,只有基于镜像创建并启动容器后,应用程序才会真正运行起来。
例如:
mysql:8.0
redis:7
nginx:latest这些都是 Docker 镜像。
同一个镜像可以创建多个相互独立的容器,例如:
mysql:8.0 镜像
│
├── MySQL 容器 A
├── MySQL 容器 B
└── MySQL 容器 C可以简单理解为:
镜像是模板,容器是镜像运行后的实例。
镜像本身由多个只读层组成。容器运行过程中产生的数据、日志和文件变化不会直接修改原始镜像,而是写入容器自己的可写层,或者通过数据卷进行持久化。
2. 镜像名称
Docker 镜像名称通常由 Repository 和 Tag 两部分组成:
[repository]:[tag]例如:
mysql:5.7其中:
mysql:Repository,表示镜像名称5.7:Tag,用于区分镜像的不同版本

因此:
mysql:5.7表示 mysql 镜像的 5.7 标签版本。
如果拉取镜像时没有显式指定 Tag,Docker 默认使用 latest:
docker pull nginx等价于:
docker pull nginx:latest
latest只是默认使用的标签名称,并不严格代表镜像的“最新版本”,具体指向哪个镜像由镜像发布者决定。
3. 镜像常用命令
Docker 镜像常见的操作主要包括查看、拉取、删除、推送、导出和导入。
| 命令 | 作用 | 人话理解 | 常见用法 |
|---|---|---|---|
docker images | 查看本地已有的 Docker 镜像 | 看看本机有哪些镜像 | docker images |
docker rmi | 删除本地镜像 | 把本地不用的镜像删掉 | docker rmi nginx:latest |
docker pull | 从镜像仓库拉取镜像到本地 | 从仓库下载镜像 | docker pull nginx:latest |
docker push | 将本地镜像推送到镜像仓库 | 把本地镜像上传到仓库 | docker push username/nginx:1.0 |
docker save | 将一个或多个镜像导出为本地归档文件 | 把镜像打包成 .tar 文件 | docker save -o nginx.tar nginx:latest |
docker load | 从本地归档文件中导入镜像 | 把 .tar 镜像文件重新导入 Docker | docker load -i nginx.tar |
常见的镜像操作关系如下:

如果不清楚某个 Docker 命令的参数,可以通过:
docker 命令 --help查看帮助信息。
例如:
docker save --help4. 拉取与查看镜像
下面以 Nginx 为例,从 Docker Hub 拉取镜像并查看本地镜像。
4.1 拉取镜像
首先可以在 Docker Hub 中搜索需要的镜像:

找到对应镜像后,通过 docker pull 将镜像拉取到本地:
docker pull nginx由于没有显式指定 Tag,因此默认拉取:
nginx:latest执行结果:

4.2 查看本地镜像
镜像拉取完成后,可以通过:
docker images查看本地已有的镜像:

可以看到,Nginx 镜像已经成功拉取到本地。
5. 镜像导出与导入
Docker 支持将本地镜像导出为文件,也可以将镜像文件重新导入 Docker。
整个过程可以简单理解为:
本地 nginx 镜像
↓
docker save
↓
nginx.tar
↓
docker rmi
↓
删除本地 nginx 镜像
↓
docker load
↓
重新导入 nginx 镜像5.1 导出镜像
首先可以查看 docker save 命令的帮助信息:
docker save --help执行结果:

基本语法:
docker save -o [保存的文件名称] [镜像名称]例如,将本地的 nginx:latest 镜像导出为 nginx.tar:
docker save -o nginx.tar nginx:latest执行结果:

执行完成后,当前目录中会生成:
nginx.tar这个文件中保存了对应的 Docker 镜像。
5.2 删除本地镜像
为了验证后续的镜像导入操作,可以先将本地 Nginx 镜像删除:
docker rmi nginx:latest也可以通过镜像 ID 删除:
docker rmi [IMAGE_ID]执行结果:

再次执行:
docker images可以确认本地的 Nginx 镜像已经被删除。
5.3 导入镜像
接下来通过 docker load,将之前导出的 nginx.tar 镜像重新导入 Docker:
docker load -i nginx.tar执行结果:

导入完成后,再次查看本地镜像:
docker images
可以看到,之前删除的 Nginx 镜像已经重新导入到本地。
6. 小结
Docker 镜像可以理解为创建容器的模板,一个镜像可以创建多个独立运行的容器。
镜像名称通常采用:
repository:tag例如:
mysql:8.0
nginx:latest
redis:7镜像的基本操作主要包括:
docker pull 拉取镜像
docker images 查看镜像
docker rmi 删除镜像
docker save 导出镜像
docker load 导入镜像
docker push 推送镜像可以简单记住:
pull是从仓库下载镜像,push是上传镜像;save是把镜像导出成文件,load是把镜像文件重新导入 Docker。