docker私仓

傻男人 1年前 ⋅ 1986 阅读

docker 仓库

registry仓库

一、下载镜像

docker pull registry:2.7.0

二、创建两个文件保存数据

mkdir -p /home/docker/registry/
mkdir -p /home/auth/

三、创建用户的认证

命令中:username password 替换为自己的用户名与密码

docker run --entrypoint htpasswd registry:2.7.0 -Bbn username password > /home/auth/htpasswd

四、启动registry镜像

docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
-v /home/docker/registry:/var/lib/registry \
-v /home/auth:/auth \
-v `pwd`/config.yml:/etc/docker/registry/config.yml
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e REGISTRY_STORAGE_DELETE_ENABLED=true \ --私有仓库,允许删除
registry:2.7.0

五、访问镜像仓库

浏览器直接访问: http://ip:port/v2/

  • 查询registry中所有的镜像名称
http://ip:port/v2/_catalog
  • 依据镜像名称查询镜像版本(imagename需替换成真实的镜像名字)
http://ip:port/v2/imagename/tags/list

六、使用web界面管理Registry

1)、安装docker-registry-frontend的镜像

$ docker pull  konradkleine/docker-registry-frontend:v2

2)、运行docker-registry-frontend镜像

docker run --name registry-ui -d -e ENV_DOCKER_REGISTRY_HOST=192.168.1.121 -e ENV_DOCKER_REGISTRY_PORT=5000 -p 8090:80 konradkleine/docker-registry-frontend:v2

3)、访问管理页面

浏览器直接访问:http://ip:8090

七、安装过程中遇到的问题

  • 创建用户认证时,出现以下的错误的信息:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"htpasswd\": executable file not found in $PATH": unknown.
ERRO[0000] error waiting for container: context canceled 

解决的办法: registry镜像的版本号的问题,latest 与 2的版本都会出现这个问题,换成2.7.0则没有这个问题

  • 向私仓中推送镜像时,出现以下错误,报非https的客户端
The push refers to repository [imagename]
Get https://xxx.xx.xx.xx:5000/v2/: http: server gave HTTP response to HTTPS client

解决办法:

  • 将镜像私仓地址写入到/etc/docker/daemon.json中的insecure-registries的value中,重启docker即可

八丶使用过程中可能会遇到的问题

忘记repository密码

  • 登录过私有仓库的docker服务器获取auth的值
  • 通过base64解析密码获得用户名与密码
sh cat /root/.docker/config.json
{
	"auths": {
		"localhost:5000": {
			"auth": "YWRtaW46YWRtaW4xMjM="
		}
	}
}
sh echo YWRtaW46YWRtaW4xMjM= | base64 -d

常用的镜像访问的api

获取指定镜像的tag列表

GET http://repository_ip:5000/v2/image_name/tags/list

获取镜像的Digest, GET /v2/registry/manifests/2.3.0

GET http://repository_ip:5000/v2/image_name/manifests/tag

删除指定镜像的版本

DELETE http://repository_ip:5000/v2/image_name/manifests/Digest的值sha256:48

  • 清除镜像后并没有释放镜像占用的空间,需要清理占用的空间 registry garbage-collect /etc/docker/registry/config.yml

harbor仓库

必须先安装Docker并启动Docker才能选择安装harbor

Harbor(港口,港湾)是一个用于存储和分发Docker镜像的企业级Registry服务器。

除了Harbor这个私有镜像仓库之外,还有Docker官方提供的Registry。相对Registry,Harbor具有很多优势:

  • 提供分层传输机制,优化网络传输 Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
  • 提供WEB界面,优化用户体验 只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
  • 支持水平扩展集群 当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
  • 良好的安全机制 企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。

Harbor安装

准备工作

mkdir -p /home/harbor/repository /home/harbor/logs  #创建镜像的保存地址+harbor的日志文件 

安装docker-compose

参考docker-compose安装

下载Harbor的压缩包(使用版本为:v1.9.2)

https://github.com/goharbor/harbor/releases

百度网盘地址v1.9.2 提取码:fan3

直接下载到服务器

wget /https://github.com/goharbor/harbor/releases/download/v2.11.0/harbor-offline-installer-v2.11.0.tgz

上传压缩包到linux,并解压

tar -xzf harbor-offline-installer-v1.9.2.tgz;
mkdir /opt/harbor;
mv harbor/* /opt/harbor;
cd /opt/harbor;

修改Harbor的配置

配置的修改需要在install.sh的步骤之前,不然部分的配置不会生效ls

修改harbor.yml配置文件

2.0后的版本与之前版本区别较大,如果不需要https,在installs.sh步骤前请注释掉

修改harbor.yml文件的配置需要重新安装才会生效

#修改hostname和port
hostname: 192.168.66.102  #自己机器的ip(最好配置外网的IP)
port: 5000 # 端口

#配置admin的初始密码(随便定义,能通过web页面定义)
harbor_admin_password: Harbor12345

#配置镜像的存放地址
data_volume: /home/harbor/repository

#配置日志文件的规则
log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /home/harbor/logs

安装Harbor

./prepare;
./install.sh;

启动Harbor

# 启动
docker-compose up -d 
# 停止
docker-compose stop 
# 重新启动
docker-compose restart 

访问Harbor

http://192.168.66.102:5000

默认账户密码:admin/Harbor12345

附registry仓库启动镜像时的配置文件:

cat 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


全部评论: 0

    我有话说: