# 3 Docker使用Harbor镜像仓库

下面介绍一下 Docker 使用 Harbor 作为镜像仓库。

# 3.1 配置Docker镜像仓库

配置 Docker 使用的镜像仓库。在 Docker 所在的主机上进行配置:

如果之前配置了 Docker 镜像加速,那么应该已经有 /etc/docker/daemon.json 文件了。

如果之前没有任何操作,那么先创建目录:

sudo mkdir -p /etc/docker
1

编辑 /etc/docker/daemon.json 文件,添加 insecure-registries 配置:

{
  "registry-mirrors": ["https://****.mirror.aliyuncs.com"],
  "insecure-registries":["harbor.local"]
}
1
2
3
4

registry-mirrors 是我配置的阿里云镜像加速地址,如果不知道怎么获取的,可以查看 Docker 基础教程中的 Docker 安装 (opens new window)

insecure-registries 配置的是 Harbor 的地址,这里的 https://harbor.local 是 Harbor 所在主机地址。

我在 /etc/hosts 中配置了:

192.168.0.104   harbor.local
1

harbor.local 指向了 Harbor 所在的主机。


配置完成,重启一下 Docker :

sudo systemctl restart docker
1

# 3.2 新建远程仓库

首先需要在 Harbor 上新建一个远程仓库:

新建项目,填写名称,这里不是仓库名称,更像是命名空间,在这个项目下可以有多个镜像仓库,我这里起名叫 my-lib

选择 公开 的话,不用登录 Harbor 就可以拉取镜像。

项目配额限制-1 表示不限制存储容量。

# 3.3 准备镜像

这里我下载一个 Ubuntu 镜像,在镜像中安装 net-tools 工具。

这样容器就具有了 ifconfig 命令功能,将这个容器导出为镜像,上传到 Harbor。其他的主机可以就可以从 Harbor 下载具有自带 ifconfig 命令的 ubuntu 了。

# 拉取镜像
docker pull ubuntu

# 创建容器
docker run -it --name my-ubuntu ubuntu

# 容器内安装net-tools
apt update
apt install net-tools

# 退出容器,将容器保存为镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID 镜像名:[版本标签]
# 例如
docker commit -m="我的Ubuntu" -a="逗比笔记" 97be95385779 my-ubuntu:1.0.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14

现在镜像有了:

当然使用 Dockerfile 编写一个镜像也是可以的,我这里是为了方便,不过重点不在如何生成镜像。

# 3.4 给镜像打上标签

首先给镜像打上标签

命令:

# 命令
docker tag 本地镜像ID Host:Port/远程仓库名称:[版本tag]

# 例如
docker tag 461fd46a3fb9 harbor.local/my-lib/my-ubuntu:1.0.0
1
2
3
4
5

当给一个已有的镜像打上新的标签时,Docker 会复制该镜像并创建一个新的镜像,带有新的标签。待会推送到远程仓库的是新生成的镜像。这两个镜像是一样的,ID都一样。

# 3.5 推送镜像到远程仓库

# 1 登录Harbor

首先需要先登录到 Harbor:

docker login harbor.local
1

根据提示输入用户名和密码:

# 2 将镜像推送到远程仓库

命令:

# 命令
docker push 镜像名称:[版本tag]

# 例如
docker push harbor.local/my-lib/my-ubuntu:1.0.0
1
2
3
4
5

推送成功:

# 3.6 查看镜像

在 Harbor 上可以查看到上传的镜像。

# 3.7 给镜像添加latest标签

我们还可以在 Harbor 页面给上传的镜像的版本添加标签,例如我下面给添加了一个latest标签。

这样在拉取镜像的时候,不指定标签就可以拉取这个 latest 标签的镜像。

当然了如果不添加,通过 1.0.0tag 拉取也是可以的。

# 3.8 拉取镜像

如果在其他的机器上拉取,首先需要登录,因为仓库是非公共的。

docker login harbor.local
1

登录后就可以拉取镜像了。


因为在上面已经添加了 latest 标签,所以可以不指定标签直接拉取镜像。

# 从Harbor拉取刚才上传的镜像
docker pull harbor.local/my-lib/my-ubuntu
1
2

my-lib 是 Harbor 中的项目,my-ubuntu 是对应的镜像。