registry搭建及镜像管理
registry 的搭建
docker pull registry:2
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:2
Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了
##浏览器访问测试
http://127.0.0.1:5000/v2
出现 {} 为正常
##上传镜像测试
docker tag nginx:latest localhost:5000/nginx:latest
docker push localhost:5000/nginx:latest
##查看上传的镜像
http://127.0.0.1:5000/v2/_catalog 查看私有仓库目录
{"repositories":["nginx"]}
镜像操作
##推送一个镜像到registry
docker push <registry_ip>:<registry_port>/<image_name>:<image_tag>
docker push 192.168.37.100:5000/busybox:0.0.1
##从registry拉取一个镜像
docker pull <registry_ip>:<registry_port>/<image_name>:<image_tag>
docker pull 192.168.37.100:5000/busybox:0.0.1
##在registry中搜索一个镜像
通过Registry V2的REST API去查询,列出所有的镜像仓库(repositories):
curl -X GET http://<registry_ip>:<registry_port>/v2/_catalog
curl -X GET http://192.168.37.100:5000/v2/_catalog
[xxxx@O2 nginx]$ curl -X GET http://localhost:5000/v2/_catalog
{"repositories":["nginx","registry"]}
##列出指定镜像的所有标签
curl -X GET http://<registry_ip>:<registry_port>/v2/<image_name>/tags/list
[xxxx@O2 nginx]$ curl -X GET http://localhost:5000/v2/nginx/tags/list
{"name":"nginx","tags":null}
[xxxx@O2 nginx]$ curl -X GET http://localhost:5000/v2/registry/tags/list
{"name":"registry","tags":["latest"]}
##删除registry中的镜像
删除registry比较复杂,需要先查到指定标签的镜像的digest (sha256校验和),再根据这个digest来删除.
curl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X GET http://localhost:5000/v2/registry/manifests/latest >&1 | grep Docker-Content-Digest | awk '{print ($3)}'
curl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X GET http://localhost:5000/v2/registry/manifests/latest >&1 | grep Docker-Content-Digest | awk '{print ($3)}'
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 5000 (#0)
> GET /v2/registry/manifests/latest HTTP/1.1
> Host: localhost:5000
> User-Agent: curl/7.58.0
> Accept: application/vnd.docker.distribution.manifest.v2+json
>
< HTTP/1.1 200 OK
< Content-Length: 1363
< Content-Type: application/vnd.docker.distribution.manifest.v2+json
< Docker-Content-Digest: sha256:b1165286043f2745f45ea637873d61939bff6d9a59f76539d6228abf79f87774
< Docker-Distribution-Api-Version: registry/2.0
< Etag: "sha256:b1165286043f2745f45ea637873d61939bff6d9a59f76539d6228abf79f87774"
< X-Content-Type-Options: nosniff
< Date: Sat, 26 Oct 2019 10:33:33 GMT
<
{ [1363 bytes data]
* Connection #0 to host localhost left intact
###执行以下命令,根据digest删除镜像:
curl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X DELETE http://localhost:5000/v2/registry/manifests/sha256:b1165286043f2745f45ea637873d61939bff6d9a59f76539d6228abf79f87774
##这里的删除镜像只是删除了一些元数据,需要执行下面的垃圾回收才能真正地从硬盘上删除镜像数据。因为缺省Docker private registry不允许删除镜像
进入容器,修改容器配置
vi /etc/docker/registry/config.yml
在storage下面添加
delete:
enabled: true
###完整示例
cat /etc/docker/registry/config.yml
version: 0.1
log:
fields:
service: registry
storage:
delete:
enabled: true
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
#### 或使用
#查看默认配置
docker exec -it registry sh -c 'cat /etc/docker/registry/config.yml'
#开启删除(添加 delete: enabled: true)
docker exec -it registry sh -c "sed -i '/storage:/a\ delete:' /etc/docker/registry/config.yml"
docker exec -it registry sh -c "sed -i '/delete:/a\ enabled: true' /etc/docker/registry/config.yml"
#重启
docker restart registry
##重启容器
docker restart 容器id
##进入容器,运行垃圾回收机制
registry garbage-collect /etc/docker/registry/config.yml
查询镜像
curl <仓库地址>/v2/_catalog
查询镜像tag(版本)
curl <仓库地址>/v2/<镜像名>/tags/list
删除镜像API
curl -I -X DELETE "<仓库地址>/v2/<镜像名>/manifests/<镜像digest_hash>"
获取镜像digest_hash
curl <仓库地址>/v2/<镜像名>/manifests/
--header "Accept: application/vnd.docker.distribution.manifest.v2+json"
使用:
复制代码保存为 img_registry.sh
sh img_registry.sh -h #查看帮助
HUB=hub.test.com:5000 改为自己的地址
#!/bin/bash
#cnetos7,docker-ce v17.12.0,registry v2.6.2
#Docker registry 私有仓库镜像查询、删除、上传、下载
#Author Elven <elven89@qq.com>
#Blog http://www.cnblogs.com/elvi/p/8384675.html
#root
[[ $UID -ne 0 ]] && { echo "Run in root user !";exit; }
#need jq ,get json data
[[ -f /usr/bin/jq ]] || { echo 'install jq';yum install -y jq &>/dev/null; }
#参数 variable
#registry容器名称,默认registry
RN=${RN:-registry}
#访问网址,默认localhost:5000
HUB=${HUB:-localhost:5000}
HUB=hub.test.com:5000
#检测 check
function Check_hub() {
[[ `curl -s $HUB/v2/_catalog` == "Failed connect" ]] && { echo -e "\033[31m$HUB 访问失败\033[0m";exit; }
}
#查询images
function Select_img() {
IMG=$(curl -s $HUB/v2/_catalog |jq .repositories |awk -F'"' '{for(i=1;i<=NF;i+=2)$i=""}{print $0}')
[[ $IMG = "" ]] && { echo -e "\033[31m$HUB 没有docker镜像\033[0m";exit; }
#echo "$HUB Docker镜像:"
for n in $IMG;
do
TAG=$(curl -s http://$HUB/v2/$n/tags/list |jq .tags |awk -F'"' '{for(i=1;i<=NF;i+=2)$i=""}{print $0}')
for t in $TAG;
do
echo "$n:$t";
done
done
}
#删除images
function Delete_img() {
for n in $IMGS;
do
IMG=${n%%:*}
TAG=${n##*:}
i=1
[[ "$IMG" == "$TAG" ]] && { TAG=latest; n="$n:latest"; }
Digest=`curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -Is ${HUB}/v2/${IMG}/manifests/${TAG} |awk '/Digest/ {print $NF}'`
[[ -z "$Digest" ]] && { echo -e "\033[31m$IMG:$TAG 镜像不存在\033[0m";} || {
URL="${HUB}/v2/${IMG}/manifests/${Digest}"
Rs=$(curl -Is -X DELETE ${URL%?}|awk '/HTTP/ {print $2}')
[[ $Rs -eq 202 ]] && { let i++;echo "$n 删除成功"; } || { echo -e "\033[31m$n 删除失败\033[0m"; } }
done
#registry垃圾回收 RN=registry
[[ "$i" -gt 1 ]] && { echo "Clean...";docker exec ${RN} /bin/registry garbage-collect /etc/docker/registry/config.yml &>/dev/null;docker restart ${RN} &>/dev/null; }
}
#删除镜像所在目录(清除所有 -dd .* )
#简单高效,删库跑路,必备技能
function Delete_img_a() {
[[ -f /usr/bin/docker ]] || echo 'No docker !'
[[ -z $(docker ps |awk '/'$RN'/ {print $NF}') ]] && { echo "$RN容器不存在!";exit; }
for n in $IMGS;
do
IMG="${n%%:*}"
docker exec $RN rm -rf /var/lib/registry/docker/registry/v2/repositories/$IMG
done
echo '清理 Clean ...'
docker exec $RN bin/registry garbage-collect /etc/docker/registry/config.yml &>/dev/null
docker restart $RN &>/dev/null
}
#上传 push
function Push() {
for IMG in $IMGS;
do
echo -e "\033[33m docker push $IMG to $HUB \033[0m"
docker tag $IMG $HUB/$IMG
docker push $HUB/$IMG
docker rmi $HUB/$IMG &>/dev/null
done
}
#下载 pull
function Pull() {
for IMG in $IMGS;
do
echo -e "\033[33m dokcer pull $IMG from $HUB \033[0m"
docker pull $HUB/$IMG
docker tag $HUB/$IMG $IMG
docker rmi $HUB/$IMG &>/dev/null
done
}
case "$1" in
"-h")
echo
echo "#默认查询images"
echo "sh $0 -h #帮助 -d #删除 -dd #清理空间"
echo " -pull img1 img2 #下载 -push #上传"
echo
echo "#示例:删除 nginx:1.1 nginx:1.2 (镜像名:版本)"
echo "sh $0 -d nginx:1.1 nginx:1.2 "
echo "sh $0 -dd nginx #删除nginx所有版本"
echo
echo "#定义仓库url地址hub.test.com:5000(默认 localhost:5000)"
echo "env HUB=hub.test.com:5000 /bin/sh $0 -d nginx:1.1 "
echo
;;
"-d")
Check_hub
IMGS=${*/-dd/}
IMGS=${IMGS/-d/}
Delete_img
;;
"-dd")
Check_hub
IMGS=${*/-dd/}
IMGS=${IMGS/-d/}
Delete_img_a
;;
"-pull")
IMGS=${*/-pull/}
Pull
;;
"-push")
IMGS=${*/-push/}
Push
;;
*)
Check_hub
Select_img
;;
esac
没配置https,非本机,需要配置安全地址才能使用
docker私有仓库设置(hub.test.com:5000替换为自己的地址)
SetOPTS=" --insecure-registry hub.test.com:5000"
sed -i "s#^ExecStart.*#& $SetOPTS #" /usr/lib/systemd/system/docker.service
grep 'ExecStart' /usr/lib/systemd/system/docker.service
systemctl daemon-reload
systemctl start docker
harbor仓库整理
未测试
###harbor Harbor仓库清理
###########################
#!/bin/bash
set -e
HARBOR_URL=192.168.137.129
HARBOR_PASSWD=Harbor12345
OLD_VERSION_NUM=2
function get_repos_list(){
repos_list=$(curl -s -k -u admin:${HARBOR_PASSWD} https://${HARBOR_URL}/api/projects?page=1&page_size=50)
mkdir -p $PWD/reposList
echo "${repos_list}" | jq '.[]' | jq -r '.project_id' > $PWD/reposList/reposList.txt
}
function get_images_list(){
mkdir -p $PWD/imagesList
for repo in $(cat $PWD/reposList/reposList.txt);do
images_list=$(curl -s -k -u admin:${HARBOR_PASSWD} https://${HARBOR_URL}/api/repositories?project_id=${repo})
echo "${images_list}" | jq '.[]' | jq -r '.name' > $PWD/imagesList/${repo}.txt
done
}
function delete_images(){
#### get html
htmlinfo=$(curl -s -k -u admin:${HARBOR_PASSWD} https://${HARBOR_URL}/api/repositories/$1/tags)
#### images num
num=$(echo "${htmlinfo}" | jq "length - ${OLD_VERSION_NUM}")
if [[ "${num}" -le "0" ]]; then
echo "$1 has no need of cleanup!!!"
return
fi
#### get images_tag
for index in $(seq 0 ${num}); do
tag=$(echo "${htmlinfo}" | jq ".[${index}]" | jq -r '.name')
echo "images=$1 ************************** tag= ${tag}"
curl -s -k -u admin:${HARBOR_PASSWD} -X DELETE https://${HARBOR_URL}/api/repositories/$1/tags/${tag}
done
}
function clean_registry(){
image_name=$(docker ps | grep registry | grep photon | awk -F " " '{print $2}')
docker run -it --name gc --rm --volumes-from registry ${image_name} garbage-collect /etc/registry/config.yml
}
function entrance(){
serverip=`ip addr|grep inet|grep 192.168|grep -v inet6|awk '{print $2}'|cut -d/ -f1`
if [[ "$serverip" != "${HARBOR_URL}" ]]; then
echo "harbor is not running in the machine!!!"
exit 1
fi
get_repos_list
get_images_list
for repo in $(cat $PWD/reposList/reposList.txt);do
for images in $(cat $PWD/imagesList/${repo}.txt); do
delete_images ${images}
done
done
clean_registry
}
entrance
https://blog.csdn.net/qq_14869093/article/details/85644194
https://blog.csdn.net/qq_14869093/article/details/85644194
原文链接:https://blog.csdn.net/u014305062/article/details/92770753
harbor
前言:
harbor 因为docker 缓存位置容量问题更改路径后(先把原来的/var/lib/docker 拷贝到其他位置,然后在docker systemctl 启动文件上添加路径)
操作后docker可以正常启动,但是harbor 无法正常启动
操作:
##必须保存好必须使用的镜像,使其保持运行状态
docker system prune -a ##清理所有不用数据(停止的容器,不使用的volume,不使用的networks,悬挂的镜像) 不运行的容器都会被清除 #docker container prune 清理所有停止的容器
##确保上一步操作使harbor 的容器使用的镜像都被删除,清除掉
##重启机器(确保缓存数据等彻底清除)
##进入harbor 的所在目录 /opt/harbor 执行
./prepare ##等待成功
./install ##等待成功
harbor搭建
https://www.cnblogs.com/operationhome/p/10868498.html harbor
https://blog.51cto.com/slitobo/2323332
更改镜像存储地址
部署前添加软连接至/data 目录
https://github.com/goharbor/harbor/issues/4871
修改 docker-compose.yaml
- /data/registry:/storage:z
/data/registry为其他目录
修改完成后,
./prepare
docker-compose up -d
在整个部署过程中,不要手动修改上述关联挂载路径下的内容。若要修改相关内容,一定要保证在容器完全移除(docker-compose down)的前提下进行
# 暂停 Harbor
docker-compose stop
# 启动 Harbor
docker-compose start
# 更改 harbor.yml,1.8.0之前的版本配置文件是 harbor.cfg
docker-compose down -v
vim harbor.yml # 更改配置
prepare # 生成配置文件,根据 harbor.yml 配置生成docker-compose文件。
docker-compose up -d
# 删除 Harbor 的容器,将镜像数据和 Harbor的数据库文件保存在文件系统上。
docker-compose down -v
# 彻底地删除 Harbor 的数据和镜像
rm -r /data/database
rm -r /data/registry
更改配置文件
更改了配置之后,我们需要重新部署 Harbor.
# 以下命令在 docker-compose.yml 文件所在目录中运行
./prepare
docker-compose up -d
harbor 正式
安装docker-compose
##在线安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
##离线安装
##https://github.com/docker/compose/releases
wget https://github.com/docker/compose/releases/download/1.25.5/docker-compose-Linux-x86_64
##国内光速下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
##验证
chmod +x /usr/local/bin/docker-compose
$ docker-compose version
docker-compose version 1.25.5, build 8a1c60f6
docker-py version: 4.1.0
CPython version: 3.7.5
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
安装harbor
# 获取需要安装的版本
https://github.com/goharbor/harbor/releases
##离线安装包
https://github.com/goharbor/harbor/releases/download/v1.10.2/harbor-offline-installer-v1.10.2.tgz
# 下载
cd /opt/ && wget 下载版本链接
tar -xzf harbor-offline-installer*
cd harbor
# 编辑配置文件 harbor.yml
vim harbor.yml
# 需要更改的参数
hostname: 192.168.15.170 # 绑定ip,不能使用127.0.0.1和localhost 此项必须修改
http: # 监听端口,默认80,也就是我们 管理ui访问的端口
port: 80
harbor_admin_password: Harbor12345 # 设置管理员密码
## 还可以设置启动 https,并指定证书,和指定数据目录
# The default data volume
data_volume: /data ##数据卷目录需要规划好
# 安装
./install.sh
✔ ----Harbor has been installed and started successfully.----
Now you should be able to visit the admin portal at http://192.168.2.114.
For more details, please visit https://github.com/goharbor/harbor .
##若以后harbor.yml 有变动,需要./prepare 后启动
##Harbor服务的stop与start:
cd /opt/harbor/ #harbor解压安装目录
docker-compose stop/start
##访问
http://192.168.2.114
账号:admin
默认密码:Harbor12345
使用
拉取及上传镜像需要设置docker的信任仓库
在需要使用的机器上操作
#修改docker启动文件,设置信任的主机与端口
#vim /etc/systemd/system/docker.service 修改如下一行
ExecStart=/usr/bin/dockerd --insecure-registry=ip:port #ip为harbor部署的机器.端口默认为80
#重新启动docker:
systemctl daemon-reload
systemctl restart docker.service
测试验证:
# docker login ip:port
Username: admin
Password: Harbor12345
Login Succeeded
###上传镜像
#为本地镜像搭标签
docker tag SOURCE_IMAGE[:TAG] 192.168.2.114/library/IMAGE[:TAG]
##推送镜像到仓库
docker push 192.168.2.114/library/IMAGE[:TAG]
##拉取镜像
docker pull 192.168.2.114/library/IMAGE[:TAG]
harbor仓库权限管理
基本介绍:
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
特性
- 基于角色的访问控制** :用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
- 镜像复制 : 镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
- 图形化用户界面 : 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
- AD/LDAP 支持 : Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。
- 审计管理 : 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
- 国际化 : 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
- RESTful API : RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。
- 部署简单 : 提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。
Harbor组件
- Proxy**:Harbor的registry, UI, token等服务,通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务。
- Registry: 负责储存Docker镜像,并处理docker push/pull 命令。由于我们要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token, Registry会通过公钥对token 进行解密验证。
- Core services: 这是Harbor的核心功能,主要提供以下服务:
- UI:提供图形化界面,帮助用户管理registry上的镜像(image), 并对用户进行授权。
- webhook:为了及时获取registry 上image状态变化的情况, 在Registry上配置webhook,把状态变化传递给UI模块。
- token 服务:负责根据用户权限给每个docker push/pull命令签发token. Docker 客户端向Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。
- Database:为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。
- Job Services:提供镜像远程复制功能,可以把本地镜像同步到其他Harbor实例中。
- Log collector:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析
Harbor实现
Harbor的每个组件都是以Docker容器的形式构建的,官方也是使用Docker Compose来对它进行部署。用于部署Harbor的Docker Compose模板位于 harbor/docker-compose.yml,打开这个模板文件,发现Harbor是由7个容器组成
nginx:nginx负责流量转发和安全验证,对外提供的流量都是从nginx中转,所以开放https的443端口,它将流量分发到后端的ui和正在docker镜像存储的docker registry。
harbor-jobservice:harbor-jobservice 是harbor的job管理模块,job在harbor里面主要是为了镜像仓库之前同步使用的;
harbor-ui:harbor-ui是web管理页面,主要是前端的页面和后端CURD的接口;
registry:registry就是docker原生的仓库,负责保存镜像。
harbor-adminserver:harbor-adminserver是harbor系统管理接口,可以修改系统配置以及获取系统信息。
这几个容器通过Docker link的形式连接在一起,在容器之间通过容器名字互相访问。对终端用户而言,只需要暴露proxy (即Nginx)的服务端口。
harbor-db:harbor-db是harbor的数据库,这里保存了系统的job以及项目、人员权限管理。由于本harbor的认证也是通过数据,在生产环节大多对接到企业的ldap中;
harbor-log:harbor-log是harbor的日志服务,统一管理harbor的日志。通过inspect可以看出容器统一将日志输出的syslog。
harbor使用
在企业级软件环境中,会在软件开发的不同阶段存在不同的镜像仓库:
- 在开发环境库,开发人员频繁修改镜像,一旦代码完成,生成稳定的镜像即需要同步到测试环境。
- 在测试环境库,测试人员对镜像是只读操作,测试完成后,将镜像同步到预上线环境库。
- 在预上线环境库,运维人员对镜像也是只读操作,一旦运行正常,即将镜像同步到生产环境库。
- 在这个流程中,各环境的镜像库之间都需要镜像的同步和复制
安全机制
企业中的软件研发团队往往划分为诸多角色,如项目经理、产品经理、测试、运维等。在实际的软件开发和运维过程中,这些角色对于镜像的使用需求是不一样的。从安全的角度,也是需要通过某种机制来进行权限控制的。
举例来说,开发人员显然需要拥有对镜像的读写(PULL/PUSH)权限以更新和改正代码;测试人员中需要读取(PULL)权限;而项目经理需要对上述的角色进行管理.
Harbor为这种需求提供了用户和成员两种管理概念
在Harbor中,用户主要分为两类。一类为管理员,另一类为普通用户。两类用户都可以成为项目的成员。而管理员可以对用户进行管理,
成员是对应于项目的概念,分为三类:管理员、开发者、访客。管理员可以对开发者和访客作权限的配置和管理。测试和运维人员可以访客身份读取项目镜像,或者公共镜像库中的文件
从项目的角度出发,显然项目管理员拥有最大的项目权限,如果要对用户进行禁用或限权等,可以通过修改用户在项目中的成员角色来实现,甚至将用户移除出这个项目
1,用户账户(User Account)
Harbor支持两种身份验证方式,这里我们只使用Database(db_auth),
这种情况下,所有用户被存放在一个本地数据库.可以由用户自己注册,也可以由系统管理员添加用户到Harbor中.
当注册或添加一个新的用户到Harbor中时,Harbor系统中的用户名、email必须是唯一的。密码至少要有8个字符长度,并且至少要包含一个大写字母(uppercase letter)、一个小写字母(lowercase letter)以及一个数字(numeric character)
所有的用户的注册并成功登录后都可以创建自己的工程
(新建的工程下文以项目称呼)
访问级别,若勾选公开,则所有用户在web UI下可浏览,且在命令行下不登录就可以拉取,默认为私有仓库,那么其他人无法查看到,创建项目后,该用户自动赋予项目管理员角色,拥有该项目的所有权限.
除了具有读写权限之外,ProjectAdmin
(项目管理员)还有一些管理特权,例如向该工程添加/移除成员等.
2,
基于角色的访问控制(Role Based Access Control, RBAC):
基于角色的访问控制主要针对的是工程(projects), 本文指项目
角色 | 说明 |
---|---|
ProjectAdmin(项目管理员) | 该项目的所有权限 |
Master(维护人员) | 权限小于项目管理员但大于其他角色 |
Developer(开发人员) | Developer用户具有读写访问权限 |
Guest(访客) | Guest用户只有只读访问权限 |
为一个私有项目添加人员并赋予角色:
点击项目进入项目配置界面,添加成员赋予角色,
选择一个已经存在的用户并赋予角色,该用户对于此私有项目就具有了其角色相应的权限.
总结:
对于一个公共镜像仓库,任何人都可以不登录就能Pull镜像,但是,也就只能拉取镜像而已,不能做其他操作.
对于私有镜像仓库,只有被项目管理员添加为项目成员的用户,才能根据项目管理员为自己分配的角色进行相应的操作. 已经存在的用户才能被添加成为项目成员.
客户端使用未配置https 的harbor
#1,查看客户端docker 的配置文件
systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2020-05-06 22:13:17 EDT; 4h 10min ago
Docs: https://docs.docker.com
#2,修改配置文件
systemctl stop docker #首先停止docker服务
vim /usr/lib/systemd/system/docker.service
#添加启动参数 --insecure-registry= 122.111.1.60 默认端口为80
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=192.168.1.60
#3,重启docker 服务
systemctl daemon-reload #重现加载配置文件
systemctl restart docker
#4,检查是否支持非安全仓库
docker info | grep -A 3 Insecure
Insecure Registries:
192.168.1.60 ##出现镜像仓库的地址为支持
127.0.0.0/8
Live Restore Enabled: false
##退出登录
docker logout
##重新登录 , 默认使用已保存的凭据
docker login
## docker logout 192.168.2.60 操作后,登录凭据将会被清除
## 之后登录还需要输入账号密码
镜像清理
镜像仓库删除镜像只是逻辑删除,还需要执行其他操作在物理上清空镜像文件
镜像删除操作
https://blog.csdn.net/kong2030/article/details/81331142?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1
registry搭建及镜像管理的更多相关文章
- 搭建docker镜像仓库(一):使用registry搭建本地镜像仓库
目录 一.系统环境 二.前言 三.使用registry搭建私有镜像仓库 3.1 环境介绍 3.2 k8smaster节点配置镜像仓库 3.3 k8sworker1节点配置从私有仓库上传和拉取镜像 3. ...
- Docker——Registry搭建私有镜像仓库
前言 在 Docker 中,当我们执行 docker pull xxx 的时候,它实际上是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为我们提供的公共仓库 ...
- Docker私有仓库 Registry中的镜像管理
这里主要介绍Registry v2的版本 查看Registry仓库中现有的镜像: # curl -XGET http://10.0.30.6:5000/v2/_catalog# curl -XGET ...
- 搭建docker镜像仓库(二):使用harbor搭建本地镜像仓库
目录 一.系统环境 二.前言 三.Harbor 四.使用harbor搭建私有镜像仓库 4.1 环境介绍 4.2 k8smaster节点安装配置harbor 4.2.1 安装harbor离线包 4.2. ...
- docker(五) 使用Docker Registry搭建镜像私服
1.创建私服 docker run -d --name registry -v /opt/data/registry:/var/lib/registry -p 5000:5000 registry - ...
- [转]Ubuntu18.04下使用Docker Registry快速搭建私有镜像仓库
本文转自:https://blog.csdn.net/BigData_Mining/article/details/88233015 1.背景 在 Docker 中,当我们执行 docker pull ...
- 基于 registry 搭建 Docker 私有镜像仓库
今天主要介绍使用 registry 来搭建 Docker私有镜像仓库,方便在公司内部项目中使用,registry 也是 Docker 官方提供的一个镜像,操作也很简单. dockerhub: http ...
- 【Docker】(4)搭建私有镜像仓库
[Docker](4)搭建私有镜像仓库 说明 1. 这里是通过阿里云,搭建Docker私有镜像仓库. 2. 这里打包的镜像是从官网拉下来的,并不是自己项目创建的新镜像,主要测试功能 一.搭建过程 首先 ...
- ubuntu-docker入门到放弃(三)images镜像管理
docker虽然有公共的镜像管理hub,但是我们在日常的使用中,由于不同的业务场景,不同的架构,公共的镜像库不能满足需求,并且出于安全考虑,会搭建私有的docker hub镜像库来管理自己的image ...
随机推荐
- 深入理解java:2.4. 线程本地变量 java.lang.ThreadLocal类
ThreadLocal,很多人都叫它做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多. 可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那样每个线程可以访问自己内 ...
- python logger 日志模块
logger 日志 """logging配置""" import osimport logging.config # 定义三种日志输出格式 ...
- linux 更改文件权限命令 chmod
chmod -change file mode bits :更改文件权限 chmod是用来改变文件或者目录权限的命令,但只有文件的属主和超级用户(root)才有这种权限. 更改文件权限的2种方式: 一 ...
- 第五周课程总结&实验报告(三)
实验三 String类的应用 实验目的: (1)掌握类String类的使用: (2)学会使用JDK帮助文档: 实验内容: 1.已知字符串:"this is a test of java&qu ...
- mysql的高可用之rounter
参考: https://segmentfault.com/a/1190000011970688
- CSS3与页面布局学习总结——多种页面布局
一.负边距与浮动布局 1.1.负边距 所谓负边距就是margin取负值的情况,如margin:-40px:margin-left:-100%.当一个元素与另一个元素margin取负值时将拉近距离.常见 ...
- 洛谷 P2398 GCD SUM 题解
题面 挺有意思的. 设f[i]表示gcd(i,j)=i的个数,g[i]表示k|gcd(i,j)的个数; g[i]=(n/i)*(n/i); g[i]=f[i]+f[2i]+f[3i]+...; 所以f ...
- centos7搭建单机redis5.0
目录 1. redis初步安装 2. 配置 3. 设置开机启动(centos6) 3.1 编写启动脚本 3.2 设置权限 3.3 启动测试 3.4 设置开机自启动 4. 设置开机启动(centos7) ...
- Ubantu问题记录
2019.4.21Ubantu问题:常用命令:sudo是一种权限管理机制,依赖于/etc/sudoers,定义了授权给哪个用户可以以管理员的身份执行管理命令格式:sudo -u USERNAME CO ...
- 函数进阶装B操作
三元表达式 条件成立时的返回值 if 条件 else 条件不成立时的返回值 x = 10 y = 20 print(f"x if x > y else y: {x if x > ...