Docker Hub

docker hub作为默认的注册点,不管是官方还是第三方都上传了很多人们可以直接拿来使用的镜像。

https://hub.docker.com/

通过搜索功能可以直接搜索到相关的镜像:

这里以 Nginx 为例:

通过在 registry 上面搜索可以发现:

  1. 仓库前面没有用户名,一般都是官方镜像仓库。后面会有 DOCKER OFFICIAL IMAGE 的标识。这意味着我们大概率可以放心大胆的直接拿来使用。
  2. 仓库前面有用户名,一般都第三方的镜像仓库。后面会有 VERIFIED PUBLISHER 的标识(已经验证的开发者)或 OPEN SOURCE PROGRAM 标识(开源项目)。这两者的安全优先级相对于较低,使用需要谨慎。
  3. 右边 Downloads 标识该仓库被下载了多少次,下载次数越多表示用户越多,有问题被发现的概率越大。可以作为镜像是否靠谱的参考依据。
  4. 右边 Stars 也和 Downloads 有着类似的功能。
  5. 通过左边的筛选栏可以对仓库进行筛选。

点击进入一个仓库可以看到相关详细信息:

常见的功能包括:

  1. 怎么下载镜像。
  2. 关于这个仓库的说明介绍与配置使用方法。
  3. 关于这个仓库的用户评价。
  4. 该仓库中的镜像支持的版本,我们可以通过标版编号,下载指定版本。

除了在页面上查询镜像以外,docker 本身命令行也提供了查询方法:

1
docker search nginx

如图所示:

镜像操作

docker 所有支持的命令都可以使用 docker --help 看到。同时通过该命令,我们也可以发现,docker 的命令分为两大类:Management CommandsCommands

在 docker 设置之初是没有分类这一概念,到后面因为命令多了加入了分类。所以在学习 docker 命令的时候,建议养成使用 Management Commands 的习惯。虽然命令可能更复杂一点,但是说不定单纯的 Commands 说不定哪天就被删除了。

对于镜像支持的操作,我们可以使用命令查看:

1
docker image --help

如图所示:

拉取镜像(pull)

docker 安装之后本身是没有镜像的,需要从 registry 中下载镜像才能使用:

1
2
3
4
5
6
7
8
9
# Management Commands(推荐)
docker image pull nginx

# Commands
docker pull nginx

# 下载指定版本
docker image pull nginx:1.22.0

如图所示:

从整个镜像的下载信息可以看出:

  1. 如果没有跟版本号,默认下载 latest 版本。
  2. 镜像是分层结构,一个完整的镜像一般都是一层一层分开 pull 的。

查看本地镜像(ls)

镜像下载完成之后就可以使用相关命令查看它在服务器上面的保存信息:

1
2
3
4
5
6
# Management Commands(推荐)
docker image ls

# Commands
docker images

如图所示:

通过该命令可以了解镜像的相关信息:

  1. 想要唯一标识一个镜像可以有两种方法:: 或者 IMAGE ID
  2. 通过该命令看到的 IAMGE ID 并非是完整的,但是显示部分一般已经足够区分不同镜像。
  3. 可以看到镜像的大小。

查看镜像详情(inspect)

ls 查看到的镜像信息只是很少的一部分,如果想了解更详细的镜像信息,需要使用其他命令:

1
2
3
4
5
6
# Management Commands(推荐)
docker image inspect nginx

# Commands
docker inspect nginx

需要关注以下输出的信息中的以下项目:

  • Id:完整的 IMAGE ID,ls 展示的只是这个 ID 的开始部分。
  • ExposedPorts:镜像中的服务运行端口。
  • Env:镜像中定义的环境变量。
  • Cmd:启动镜像中服务所使用的命令。
  • Volumes:镜像挂载的持久化数据卷。

删除指定镜像(rm)

如果下载错了镜像或者需要为了清理磁盘空间而删除不需要的镜像,可以执行以下命令进行删除:

1
2
3
4
5
6
7
8
# Management Commands(推荐)
docker image rm nginx:1.22.0

# Commands
docker rmi nginx

# 也可以通过 ID 镜像删除
docker image rm 605c77e624dd

删除和拉取镜像类似,也是一层一层的删除。

注意,如果有通过该镜像创建的容器正在运行,则无法直接删除镜像。需要先删除容器或者加入 -f 参数强制删除,容器也会跟着删除。

镜像导出(save)

在没有私有 registry 或者没有外网环境的机器之间想要运行别的机器上面的镜像,就需要将镜像导出。

1
2
3
4
5
# Mamagement Commands(推荐)
docker image save nginx:1.22.0 nginx:latest -o /tmp/nginx-image.tar

# Commands
docker save nginx:1.22.0 nginx:latest -o /tmp/nginx-image-2.tar

镜像导入(load)

为了测试导入,需要先删除所有镜像。

1
2
3
4
5
6
# Management Commands(推荐)
docker image load -i /tmp/nginx-image.tar

# Commands
docker load -i /tmp/nginx-image.tar

镜像打标签(tag)

镜像在下载的时候有自己的 TAG,某些时候可能需要对其进行修改。

1
2
3
4
5
6
# Management Commands(推荐)
docker image tag nginx:1.20.0 nginx:history

# Commands
docker tag nginx:1.20.0 nginx:history

结果如图所示:

可以发现,打 TAG 其实就是在原来的镜像基础上重新增加一个 TAG 指向该镜像 ID。

当删除某个 TAG 的时候,镜像并不会跟着全部删除。当然直接删除镜像 ID 除外。

删除未使用镜像(prune)

某些镜像在服务器中保存是没用的,如果有很多的话,可以直接使用以下命令全部清理:

1
2
# Management Commands(推荐)
docker image prune -a

关于更多镜像相关操作需要等后面容器相关知识整理了之后结合着使用。