Docker镜像的公有仓库,如:dockerhub、阿里云镜像中心等,都提供了公开的和私有的仓库类型。
但在公司内部,我们往往还是希望完全由自己来管理镜像,不托管在其他第三方服务上。
传统上,我们可以使用 registry
docker pull daocloud.io/registry
docker run \
-e SETTINGS_FLAVOR=s3 \
-e AWS_BUCKET=acme-docker \
-e STORAGE_PATH=/registry \
-e AWS_KEY=AKIAHSHB43HS3J92MXZ \
-e AWS_SECRET=xdDowwlK7TJajV1Y7EoOZrmuPEJlHYcNP2k4j49T \
-e SEARCH_BACKEND=sqlalchemy \
-p 5000:5000 \
daocloud.io/registry
docker run -d -p 5000:5000 --name registry 2e2f252f3c88
docker tag server3 localhost:5000/server3
docker push localhost:5000/server3
docker pull localhost:5000/server3
daocloud.io/registry
不够完善,没有界面,生产环境可以使用harbor
harbor下载
我们选择线下安装
解压,修改 harbor.cfg文件
...
hostname = hub.zhangliuning.com:8080
secretkey_path = ./data
...
其他的包括用户名密码、https配置,都在配置文件中
其他系统可以直接指向install命令了,Mac系统不行,因为使用了很多目录挂载,Mac是不允许的
在根目录下,打开docker-compose.yml
,修改挂载目录
把所有的本机挂载目录设置为当前目录下的目录
nginx的对外端口从80改为8080
执行./install
命令
执行过程中产生的问题,根据提示,都应该可以自己解决
http://localhost:8080
登陆的默认用户名密码:admin/Harbor12345
这个可以在harbor.cfg
文件中修改
在推送的时候,默认推送是需要https
协议的,我们目前并没有,
解决方案
1、部署到公网上,申请一个免费的https证书,然后在harbor.cfg文件中做相关修改
2、设置docker,使其支持http协议
对于非mac系统,在docker启动的时候加一个参数
sudo chmod +w /etc/docker/daemon.json
sudo vi /etc/docker/daemon.json
{
"insecure-registries": [
"hub.zhangliuning.com:8080"
]
}
service docker restart
除了最基本的镜像的拉取上传外,Harbor还提供了以下功能
在生产环境中部署多个harbor节点,我们往主节点上推送镜像,但是可以做到主节点和其他harbor节点之间镜像的同步
这么做的目的在于,
第一:保证harbor的高可用性
第二:同一个环境下往往走的是内网,网速是比较快的,如果使用本地环境一个个去推送,不仅麻烦,而且速度慢
记录操作流水
其他功能,我们只要看界面,就能大概知道是什么功能,使用起来还是比较简单的