docker私有仓库搭建harbor
一、安装docker
安装了docker和docker-compose
## 安装基础依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
## 阿里源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
命令查看版本号
sudo yum list docker-ce --showduplicates | sort -r
sudo yum install docker-ce
sudo yum install docker-ce-19.03.4
#启动
systemctl start docker.service
#开机自启
systemctl enable docker.service
2、安装compose
先到github(https://github.com/docker/compose/releases)查看docker-compose的最新版本号。
然后把下面命令中的1.27.4替换为你找到的最新版本号,然后运行该命令。
curl -L "https://github.com/docker/compose/releases/download/v2.3.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose
查看版本
docker-compose --version
**离线安装docker-**compose
https://github.com/docker/compose/releases/
下载
二、下载Harbor
在harbor下载页(https://github.com/goharbor/harbor/releases)选择需要的版本,下载后解压
选择离线包
三、安装
解压文件
tar -zxvf harbor-offline-installer-v2.4.1.tgz
修改配置文件harbor.yml
修改hostname和port
安装包
./intstall.sh
安装成功
登录
http://10.9.70.145:8072/
用户名:admin
密码:在yml配置文件中设置
开机自启
vim /usr/lib/systemd/system/harbor.service
[Unit]
Description=Harbor
After=docker.service
Requires=docker.service
Documentation=http://github.com/vmware/harbors
[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/local/bin/docker-compose -f /home/InstallPackage/harbor/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /home/InstallPackage/harbor/docker-compose.yml down
[Install]
WantedBy=multi-user.target
配置开机自启动
systemctl enable harbor
启动命令
sudo systemctl start harbor
四、上传镜像
在本机配置harbor仓库http可信
新建文件
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries":["10.9.70.145:8072"]
}
将harbor加入
重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
新建项目
登录harbor仓库
docker login 10.9.70.145:8072
上传镜像
docker tag openjdk:8 10.9.70.145:8072/dev/openjdk:8
docker push 10.9.70.145:8072/dev/openjdk:8
登陆系统查看
四、批量拉去镜像入库
新建sh执行文件
mageNewTag=`date +%Y%m%d-%H%M%S`
#镜像仓库地址
registryAddr="192.168.8.162:8072/dev/"
#循环读取images.txt,并存入list中
n=0
for line in $(cat images.txt | grep ^[^#])
do
list[$n]=$line
((n+=1))
done
echo "需推送的镜像地址如下:"
for variable in ${list[@]}
do
echo ${variable}
done
for variable in ${list[@]}
do
#下载镜像
echo "准备拉取镜像: $variable"
docker pull $variable
# #获取拉取的镜像ID
imageId=`docker images -q $variable`
echo "[$variable]拉取完成后的镜像ID: $imageId"
#获取完整的镜像名
imageFormatName=`docker images --format "{{.Repository}}:{{.Tag}}:{{.ID}}" |grep $variable`
echo "imageFormatName:$imageFormatName"
#删掉最后一个/及其左边的字符串
#如:192.168.35.126:5000/lyzhxg/bks/ly-sm-yxxt-ui:20200324-153539:0beed7b2fa8c -> ly-sm-yxxt-ui:20200324-153539:0beed7b2fa8c
repository=${imageFormatName##*/}
echo "repository :$repository"
#删掉第一个:及其右边的字符串
#如:ly-sm-yxxt-ui:20200324-153539:0beed7b2fa8c -> ly-sm-yxxt-ui
repository=${repository%%:*}
echo "新镜像地址: $registryAddr$repository:$imageNewTag"
#重新打镜像标签
docker tag $imageId $registryAddr$repository:$imageNewTag
# #推送镜像
docker push $registryAddr$repository:$imageNewTag
done
安装skopeo
yum install skopeo
安装jq
yum install epel-release
yum list jq
yum install jq
新建文件
get-manifests.sh
#!/bin/bash
set -eo pipefail
DOCKER_HUB_URL="https://hub.docker.com/v2/repositories/library"
IMAGES_LIST="images.list"
get_images_list(){
ALL_IMAGES=""
URL="${DOCKER_HUB_URL}/?page_size=100"
while true ; do
ALL_IMAGES="$(curl -ssl ${URL}| jq -r '.results[].name' | tr '\n' ' ')${ALL_IMAGES}"
echo ALL_IMAGES
URL="$(curl -ssl ${URL} | jq -r '.next')"
if ["${URL}"="nul1"]; then break; fi
done
: > ${IMAGES_LIST}
for image in ${ALL_IMAGES};do
if skopeo list-tags docker://${image} &> /dev/null; then
skopeo list-tags docker://${image} | jq -c ".Tags"| tr -d '[]\"' \ | tr ',' '\n' | sed "s|^|${image}:|g" >> ${IMAGES_LIST}
fi
done
}
get_manifests(){
mkdir -p manifests
IFS=$'\n'
for image in $(cat ${IMAGES_LIST});do
if skopeo inspect --raw docker://${image} | jq -r '.manifests[].digest' &> /dev/null ; then
skopeo inspect --raw docker://${image} | jq -r '.manifests[].digest' \ | xargs -L1 -P8 -I % sh -c "skopeo inspect --raw docker://${image/:*/}@% > manifests/${image}@%.json"
else
skopeo inspect --raw docker://${image} > manifests/${image}.json
fi
done
}
get_images_list
get_manifests
文件赋予可执行权限
chmod 777 auto-pull-and-push-images.sh
或者
chmod u+x auto-pull-and-push-images.sh
【参考】
Docker部署Harbor-v2.4.1_harbor 2.4的部署-CSDN博客
docker hub 镜像列表获取
如何构建私有 Docker Hub 镜像站 - ludongguoa - 博客园