目录
1 场景解释
2 配置推送docker
3 推送
3.1 准备
3.2 标记镜像
3.3 登录docker(可省)
3.4 推送镜像
3.5 查看
4 参考
5 你们可能遇到的问题
5.1 server gave HTTP response to HTTPS client
5.1.1 可能原因1
5.1.2 可能原因2
5.1.3 解决方案
上一篇已经分享了,如何部署一个harbor服务,以及harbor平台的介绍。
这一篇介绍如何给harbor仓库推送镜像。
1 场景解释
推送往往场景是:Harbor搭建在A机器(centos系统),docker安装在B机器(centos系统),现在在B机器打包然后推送到A机器。
但是呢,本次案例里头,我是在harbor机器上演示了docker推送给harbor,跟上面场景没区别,只是上面场景是不同机器推送,我这边是同一台机器推送,但是操作流程都是一样的。
2 配置推送docker
假如b机器上要将镜像推送到a机器上,那么b机器上的docker需要配置镜像源,该镜像源指向a机器。
将配置文件:/etc/docker/daemon.json
配置成:
{
"registry-mirrors": ["https://k1ktap5m.mirror.aliyuncs.com"],
"insecure-registries": ["http://192.168.211.5:80"]
}
- registry-mirrors配置的是加速镜像源,
- insecure-registries配置就是a机器的镜像源地址,注意,不可省略http和80端口(这个端口就是harbor.yml上配置的http端口),不然就会推送失败
3 推送
3.1 准备
先拉取一个镜像下来做试验用:
docker pull nginx
3.2 标记镜像
给待推送的镜像打标记,打标记命令格式如下:
docker tag SOURCE_IMAGE[:TAG] 192.168.211.5:80/library/REPOSITORY[:TAG]
稍微解释下:
- SOURCE_IMAGE[:TAG]表示当前docker已存在的某个版本的镜像
- library表示的是harbor里头的某个项目名称,表示镜像推送给这个项目
- 注意,其中ip和端口都不要省(尤其在http协议里头)
比如我要推送nginx到harbor仓库,打的标记如下:
docker tag nginx:latest 192.168.211.5:80/library/nginx:latest
3.3 登录docker(可省)
执行以下命令
docker login 192.168.211.5:80
登出docker的命令:
docker logout
登录日志如下:
[root@localhost harbor]# docker login 192.168.211.5:80
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
3.4 推送镜像
给我的harbor推送镜像的命令格式如下:
docker push 192.168.211.5:80/library/REPOSITORY[:TAG]
看命令就知道,docker push后面的其实就是打标记的时候标记。
比如我要推送上面已经打好标记的镜像,命令如下:
docker push 192.168.211.5:80/library/nginx:latest
日志如下:
[root@localhost harbor]# docker tag nginx:latest 192.168.211.5:80/library/nginx:latest
[root@localhost harbor]# docker push 192.168.211.5:80/library/nginx:latest
The push refers to repository [192.168.211.5:80/library/nginx]
fac15b2caa0c: Pushed
f8bf5746ac5a: Pushed
d11eedadbd34: Pushed
797e583d8c50: Pushed
bf9ce92e8516: Pushed
d000633a5681: Pushed
latest: digest: sha256:6fe11397c34b973f3c957f0da22b09b7f11a4802e1db47aef54c29e2813cc125 size: 1570
3.5 查看
镜像推送成功之后,在harbor上对应的项目里头就可以查看到推送上来的镜像如下:
点击镜像,进入到镜像详情页面
4 参考
我安装过程参考了一些材料,同时如果你们想要部署https的推送通道的话,也可以从下面的几篇文章做点参考
5 你们可能遇到的问题
5.1 server gave HTTP response to HTTPS client
问题如题。
该问题出现的可能原因有多个,我这边试过两种情况会出现这个问题,这两种情况都是在daemon.json的配置项insecure-registries上
5.1.1 可能原因1
/etc/docker/daemon.json中的insecure-registries配置如下:
"insecure-registries": ["192.168.211.5:80"]
上面这样配置出错原因是,默认如果不加协议,docker默认通过https的方式请求harbor
5.1.2 可能原因2
镜像打tag的时候格式不对
错误示范:
docker tag nginx:latest 192.168.211.5/library/nginx:latest
错误原因:如果只指定了ip,那么默认会通过https去访问harbor的443端口
正确写法:
docker tag nginx:latest 192.168.211.5:80/library/nginx:latest
上面这种写法,告诉docker访问80端口,80是http的默认端口