目录
Docker 镜像是什么
生活案例
为什么需要镜像
镜像命令详解
实验
1.一些操作
1. 遍历查看镜像
2. 查看镜像仓库在本地的存储信息
进入镜像存储目录
查看 repositories.json 文件
3. 镜像过滤
4. 下载镜像时的分层
实战一:离线迁移镜像
实战二:镜像存储的压缩与共享
Docker 镜像是什么
- 定义:Docker image 是一个只读文件,包含文件系统、源码、库文件、依赖、工具等运行应用所需的所有文件。
- 特性:可以理解为一个模板,通过该模板可以实例化出多个容器。镜像内部采用分层文件系统(Union FS),每层文件系统都是只读的。
- 分层:每层文件系统称为一层 layer,上层的修改会覆盖底层的可见性,最终呈现为一个完整的文件系统。
生活案例
- 镜像:类似于 Java 或 C++ 中的类,可以方便地构建出不同的对象。
- 分层:类似房屋装修,最底层是钢筋水泥,依次添加保温层、采暖管、水泥层,最后用户铺设木地板或地砖,每一层都可以独立修改,但最终呈现为一个整体。
为什么需要镜像
- 一致性:解决云端和本地环境的一致性问题,确保应用在不同环境中运行一致。
- 便捷性:提供了一种打包应用程序和预配置服务器环境的便捷方式,便于个人使用或与他人共享。
镜像命令详解
1.docker images
- 功能:列出本地镜像。
- 语法:
docker images [OPTIONS] [REPOSITORY[:TAG]]
- 别名:
docker image ls
,docker image list
- 关键参数:
-
-a
:列出所有镜像(含中间层)--digests
:显示镜像摘要信息-f
:显示满足条件的镜像--format
:指定返回值的模板--no-trunc
:显示完整信息-q
:只显示镜像 ID
样例:
docker images
docker images ubuntu
2.docker tag
- 功能:给镜像打标签。
- 语法:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
- 别名:
docker image tag
- 样例:
docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04
3.docker pull
- 功能:从镜像仓库拉取镜像。
- 参考:镜像仓库命令
4.docker push
- 功能:推送镜像到仓库。
- 参考:镜像仓库命令
5.docker rmi
- 功能:删除镜像。
- 语法:
docker rmi [OPTIONS] IMAGE [IMAGE...]
- 别名:
docker image rm
,docker image remove
- 关键参数:
-
-f
:强制删除--no-prune
:不移除过程镜像
- 样例:
docker rmi maxhou/mybusybox:v0.1
6.docker save
- 功能:将镜像保存为 tar 归档文件。
- 语法:
docker save [OPTIONS] IMAGE [IMAGE...]
- 别名:
docker image save
- 关键参数:
-
-o
:输出文件路径
- 样例:
docker save -o mynginx_1.22.1.tar nginx:1.22.1
7.docker load
- 功能:导入使用
docker save
导出的镜像。 - 语法:
docker load [OPTIONS]
- 别名:
docker image load
- 关键参数:
-
--input
,-i
:指定导入文件--quiet
,-q
:精简输出信息
- 样例:
docker load -i mynginx_1.22.1.tar
8.docker image inspect
- 功能:查看镜像详细信息。
- 语法:
docker image inspect [OPTIONS] IMAGE [IMAGE...]
样例:
docker image inspect nginx:1.23.3
9.docker history
- 功能:显示镜像历史。
- 语法:
docker history [OPTIONS] IMAGE
- 别名:
docker image history
- 关键参数:
-
-H
,--human
:易读格式--no-trunc
:显示全部信息-q
,--quiet
:只显示镜像 ID
样例:
docker history nginx:1.21.1
10.docker import
- 功能:从归档文件中创建镜像。
- 语法:
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
- 别名:
docker image import
- 关键参数:
-
-c
:应用 Docker 指令-m
:提交说明
样例:
docker import my_ubuntu_v3.tar maxhou/ubuntu:v4
在后面的文章中会再详细的讲解
11.docker image prune
- 功能:删除不使用的镜像。
- 语法:
docker image prune [OPTIONS]
- 关键参数:
-
-a
,--all
:删除所有未使用的镜像--filter
:指定过滤条件-f
,--force
:不提示删除
- 样例:
docker image prune
12.docker build
- 功能:使用 Dockerfile 创建镜像。
- 语法:
docker build [OPTIONS] PATH | URL | -
- 关键参数:
-
--build-arg=[]
:设置镜像创建时的变量-f
:指定 Dockerfile 路径--label=[]
:设置镜像元数据--no-cache
:不使用缓存--pull
:尝试更新镜像--quiet
,-q
:安静模式--tag
,-t
:镜像名称及标签--network
:设置网络模式
样例:
docker build -t mynginx:v1 .
实验
1.一些操作
1. 遍历查看镜像
使用 docker images
命令可以列出本地所有镜像。可以通过指定仓库名来过滤特定的镜像。
2. 查看镜像仓库在本地的存储信息
Docker 镜像的存储位置默认在 /var/lib/docker
目录下。可以通过修改配置文件来更改存储位置。
进入镜像存储目录
root@139-159-150-152:/data/var/lib/docker/image/overlay2# cd /data/var/lib/docker/image/
root@139-159-150-152:/data/var/lib/docker/image#
查看 repositories.json
文件
repositories.json
文件记录了已拉取镜像的信息
3. 镜像过滤
- 根据仓库名列出镜像
docker image ls ubuntu
- 列出特定的某个镜像(指定仓库名和标签)
docker image ls ubuntu:18.04
使用过滤器参数 --filter
或 -f
- 查看某个位置之前的镜像
docker image ls -f before=ubuntu:18.04
- 查看某个位置之后的镜像
docker image ls -f since=ubuntu:18.04
4. 下载镜像时的分层
下载镜像时,可以看到镜像是分层下载的。
实战一:离线迁移镜像
# 步骤1:保存镜像为tar文件
docker save -o busybox.tar busybox
# 步骤2:拷贝镜像到第二台服务器
scp busybox.tar root@43.138.218.166:/data/maxhou
# 步骤3:从tar文件中恢复镜像
docker load -i busybox.tar
# 步骤4:检查镜像是否正常运行
docker run -it --rm busybox:1.36.0 sh
测试:
实战二:镜像存储的压缩与共享
# 步骤1:拉取nginx镜像
docker pull nginx:1.22.1
# 步骤2:查看本地镜像
docker images
# 步骤4:为镜像打多个tag并推送
docker tag nginx:1.22.1 maxhou/mybitnginx:1.22.1
docker tag nginx:1.22.1 maxhou/mybitnginx:1.22.2
# 重复上述命令,为更多版本打tag
docker push maxhou/mybitnginx -a
# 步骤5:添加新镜像到仓库
docker tag nginx:1.16.1 maxhou/mybitnginx:1.16.1
docker push maxhou/mybitnginx:1.16.1
测试: