Docker 命令 之 镜像(Image)
摘要
-
本文介绍 Docker 命令 中 镜像管理 相关命令
docker search
: 搜索镜像
-
推荐在dockerhub上搜索镜像,以获取更详细的镜像信息。
-
国内也可以通过毫秒镜像,轩辕 Docker 镜像搜索来搜索镜像。
1 | $ docker search --help |
示例
1 | # 搜索名称中包含 nginx 的镜像 |
docker search
命令报错的解决方法
- 目前国内使用
docker search
时会出现Error response from daemon: Get "https://index.docker.io/v1/search?q=nginx&n=25": dial tcp 210.56.51.193:443: i/o timeout
的错误,即便我们配置了国内的镜像源,这个错误还是会存在。 - 即便为宿主机和docker都配置上DNS也依然会报错。
- 不过可以通过第三方镜像仓库进行查询,比如在查询的镜像名称前加上
docker.1ms.run/
,比如查询nginx
镜像,则输入docker search docker.1ms.run/nginx
,这里要注意并不是所有的第三方镜像仓库都支持查询。 - 可以编写一个脚本
docker_search
,查询镜像并输出结果,如下:
1 | cat << 'EOF' > docker_search |
- 基于url搜索,支持分页,但不能支持其它search参数
1 | cat << 'EOF' > docker_search_by_url |
docker image
: 镜像管理
-
docker image --help
命令 | 说明 | 别名(简写) |
---|---|---|
build | 从 Dockerfile 构建一个镜像 | docker build |
history | 显示镜像的历史记录 | docker history |
import | 从 tar 包导入内容以创建文件系统镜像 | docker import |
inspect | 显示一个或多个镜像的详细信息 | 可以使用 docker inspect |
load | 从 tar 归档或标准输入中加载镜像 | docker load |
ls | 列出镜像 | docker images |
prune | 移除未使用的镜像 | |
pull | 从镜像仓库下载镜像 | docker pull |
push | 上传镜像到镜像仓库 | docker push |
rm | 移除一个或多个镜像 | docker rmi |
save | 将一个或多个镜像保存为 tar 归档(默认输出到标准输出) | docker save |
tag | 创建一个标签 TARGET_IMAGE 指向 SOURCE_IMAGE | docker tag |
-
运行
docker image COMMAND --help
可获取某个命令的更多信息。
docker pull
: 拉取镜像
-
docker image pull
==docker pull
1 | # 命令格式,不加tag默认拉取 :latest |
-
在 Linux 安装 Docker 中介绍了如配置国内的镜像加速源来加快镜像的拉取,但是国内镜像源不稳定,随时都有可能不可用,而且每次重新配置镜像源还需要重启Docker,可以编写一个脚本来完成
pull
,这样每次更新镜像源时只需要修改脚本,而不需要重启Docker了。
1 | # 脚本名称:docker_pull |
如何获取镜像tag
- docker 命令中没有提供直接获取镜像tag的命令,如果不想到
dockerhub
上查看,可以通过如下方式获取(需要科学上网):
1 | # 只显示tag名称,官方镜像替换 nginx,非官方镜像替换 libryary/nginx,page_size=5表示每页5条数据,page=1表示第一页(默认为1) |
docker images
: 列出镜像
-
docker image ls
==docker images
1 | # 列出所有镜像,不包括悬空镜像,(dangling images:没有 tag 的镜像,通常是构建中间产物,例如:<none>:<none> 形式。) |
docker inspect
: 查看镜像的详细信息
-
docker image inspect
==docker inspect
-
这里要注意,
docker inspect
如果基于名称查找会优先查找容器
1 | # 命令格式 |
docker image prune
: 删除未使用的镜像
1 | # 删除悬空镜像,(dangling images:没有 tag 的镜像,通常是构建中间产物,例如:<none>:<none> 形式。) |
docker rmi
: 删除镜像
-
docker image rm
==docker rmi
1 | # 命令格式 |
docker history
: 查看镜像的构建历史
-
docker image history
==docker history
1 | # 命令格式 |
-
docker history
显示的是构建历史,会将每一个 Dockerfile 指令都算一层,而不是物理镜像层(layer)数量,若要查看镜像的物理层数,可以通过如下命令查看
1 | $ docker image inspect --format '{{ len .RootFS.Layers }}' nginx |
docker tag
: 创建一个标签
-
docker image tag
==docker tag
1 | # 命令格式 |
docker save
: 将镜像保存为 tar 归档
-
docker image save
==docker save
1 | # 命令格式 |
docker load
: 从 tar 归档中加载镜像
-
docker image load
==docker load
1 | # 命令格式 |
docker import
: 从文件创建镜像
-
docker image import
==docker import
1 | # 命令格式 |
-
docker import
与docker load
的区别
命令 | 用途 | 格式 | 是否保留历史 |
---|---|---|---|
docker import |
导入文件系统,创建镜像(由 docker export 生成) |
纯文件系统 tar 包 | ❌ 不保留历史、标签等元数据 |
docker load |
加载镜像(通常由 docker save 生成) |
Docker 镜像 tar(含元数据) | ✅ 保留 tag、层、历史等 |
-
示例: 从容器导出再导入
1 | # 启动一个容器 |
docker build
: 从指定目录或URL中的 Dockerfile 构建 Docker 镜像
-
docker image build
==docker build
1 | # 命令格式 |
-
docker build
中还有一些重要的参数,以及Dockerfile
文件该怎么编写,请参考Docker 命令 之 Dockerfile
docker push
: 推送本地镜像到远程仓库
-
docker image push
==docker push
-
这里介绍如何将镜像推送到
docker hub
远程仓库 -
需要先在docker hub网站上创建一个账号,比如我的用户名是
hanqunfeng
-
然后就可以使用下面的命令将本地镜像推送到远程仓库了
1 | # 查看本地镜像 |