应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

docker搭建私有仓库。上传本地镜像到私有仓库。搭建管理的ui界面

10812人阅读 2022/8/22 11:54 总访问:5182326 评论:2 收藏:0 手机
分类: docker

docker搭建私有仓库registry

registry介绍:


官方私有仓库,优点:简单;缺点:简单,无法进行复杂的管理操作

一 下载 registry镜像

  1. docker pull registry

默认是下载latest版本,也可以指定某个版本,比如2.8.1版本

docker pull registry:2.8.1

二 创建daemon.json文件,添加一点配置

使用vi命令创建文件

  1. vi /etc/docker/daemon.json

添加内容

  1. {
  2. "insecure-registries": ["192.168.6.226:5000"],
  3. "registry-mirrors": ["https://4abdkxlk.mirror.aliyuncs.com"]
  4. }

查看文件

  1. cat /etc/docker/daemon.json

效果如图

“insecure-registries”: [“192.168.6.226:5000”]是指定私有仓库地址的意思。


如果etc下面没有docker这个文件夹,创建是不会成功的,先在etc目录下使用 mkdir docker创建一下docker文件夹就行

三 重启docker

  1. systemctl daemon-reload
  2. systemctl restart docker.service

可能执行会报错


unable to configure the Docker daemon with file /etc/docker/daemon.json:…

是因为创建/etc/docker/daemon.json文件导致的。检查内容一定要对。可能出现错误的点,比如注释,空格之类的,如果有问题可以尝试把注释去掉,第一行加一个空格试试,一般都是一些不正确格式的注释引起的。比如修改成这样就可以解决上面报的那个错了:

也可以使用journalctl?-xe命令查看报错详情

我们可以看到确实是因为/etc/docker/daemon.json文件的内容问题,修改正确重新执行重启命令。

四 创建registry容器并开放端口

  1. docker create -it registry /bin/bash
  2. docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
  3. //-v表示挂载,前者是宿主机,后者是容器'

上传本地镜像到私有仓库

一 随便拉取一个镜像,比如nginx

二 给本地镜像打个tag标签。标记本地镜像,将其归入某一仓库。

这里的标记就是私有仓库的ip地址和端口号。

  1. docker tag nginx 192.168.6.226:5000/nginx:v1

三 使用docker命令上传本地镜像到私有镜像仓库

  1. docker push 192.168.6.226:5000/nginx:v1

可以看到上传的进度

上传完毕的效果如下

四 获取私有仓库列表查看是否上传成功

  1. curl -XGET http://192.168.6.226:5000/v2/_catalog

如图:

五 验证镜像,从私有仓库下载镜像

删除原有镜像

  1. docker tag nginx aojiancc/nginx:v1

删除后在查看一下镜像,确认下是否真的被删除掉。如图3.x所示刚刚标记的镜像已经被删除掉了

从本地仓库下载镜像

  1. docker pull 192.168.6.226:5000/nginx:v1

要注意拉取的时候要指定v1版本,不然拉取的就是latest版本,由于我们没有latest版本所以会报错,如图所示:

加上v1版本就可以被正确的拉取了

然后在使用docker images查看一下镜像即可。

搭建管理的ui界面

一: 拉取docker-registry-ui镜像

  1. docker pull joxit/docker-registry-ui:latest

二: 给registry创建一个配置文件,主要是配置允许跨域

这里我们重新启动前面创建的registry容器,前面启动的容器可以先干掉都行。后面在介绍以下,不重新启动registry容器直接使用以前容器的方式。

  1. mkdir -p /etc/docker/registry
  2. cat > /etc/docker/registry/config.yml <<EOF
  3. version: 0.1
  4. log:
  5. accesslog:
  6. disabled: true
  7. level: debug
  8. formatter: text
  9. fields:
  10. service: registry
  11. environment: staging
  12. storage:
  13. delete:
  14. enabled: true
  15. cache:
  16. blobdescriptor: inmemory
  17. filesystem:
  18. rootdirectory: /var/lib/registry
  19. http:
  20. addr: :5000
  21. headers:
  22. X-Content-Type-Options: [nosniff]
  23. Access-Control-Allow-Origin: ['http://192.168.6.226']
  24. Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']
  25. Access-Control-Allow-Headers: ['Authorization', 'Accept']
  26. Access-Control-Max-Age: [1728000]
  27. Access-Control-Allow-Credentials: [true]
  28. Access-Control-Expose-Headers: ['Docker-Content-Digest']
  29. http2:
  30. disabled: false
  31. health:
  32. storagedriver:
  33. enabled: true
  34. interval: 10s
  35. threshold: 3
  36. EOF

三: 使用docker-compose同时启动这两个容器即可

  1. cat > docker-compose.yaml <<EOF
  2. version: '2.0'
  3. services:
  4. registry:
  5. image: registry:2.8.1
  6. ports:
  7. - 5000:5000
  8. volumes:
  9. - /opt/registry:/var/lib/registry
  10. - /etc/docker/registry/config.yml:/etc/docker/registry/config.yml
  11. ui:
  12. image: joxit/docker-registry-ui:latest
  13. ports:
  14. - 80:80
  15. environment:
  16. - REGISTRY_TITLE=My Private Docker Registry
  17. - REGISTRY_URL= http://192.168.6.226:5000
  18. - SINGLE_REGISTRY=true
  19. depends_on:
  20. - registry
  21. EOF
  22. docker-compose up -d

启动成功后,访问http://192.168.6.226即可查看私有镜像仓库的ui。


下面说一下不重新启动容器的方式,其实ui只是去调用registry里边的接口而已,所以我们也完全可以一个一个来。我们可以就使用我们前面创建得registry容器

一: 使用docker-compose只启动docker-registry-ui

  1. cat > docker-compose.yaml <<EOF
  2. version: '2.0'
  3. services:
  4. ui:
  5. image: joxit/docker-registry-ui:latest
  6. ports:
  7. - 80:80
  8. environment:
  9. - REGISTRY_TITLE=My Private Docker Registry
  10. - REGISTRY_URL=http://192.168.6.226:5000
  11. - SINGLE_REGISTRY=true
  12. EOF
  13. docker-compose up -d

二: 然后访问私有镜像仓库的ui会出现跨域的错误。

所以我们要进行跨域配置。

如果是新启动的registry可以和使用docker-compose一样,创建一个配置文件然后在启动的时候映射一下配置文件即可。需要注意配置文件读写权限问题。

  1. docker run -p 5000:5000 -v /data/registry:/tmp/registry -v /etc/docker/registry/config.yml:/etc/docker/registry/config.yml registry

如果前面已经使用手动命令启动过registry,比如我们这里的情况,现在要修改配置,就需要进入容器内部在修改配置文件了。

以下操作涉及到了进入容器、查看目录、进入配置文件目录、查看默认配置文件内容等,如下图所示。

编辑文件添加如下可以跨域的内容:

在贴一下这块代码:

  1. headers:
  2. X-Content-Type-Options: [nosniff]
  3. Access-Control-Allow-Origin: ['http://192.168.80.200']
  4. Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']
  5. Access-Control-Allow-Headers: ['Authorization', 'Accept']
  6. Access-Control-Max-Age: [1728000]
  7. Access-Control-Allow-Credentials: [true]
  8. Access-Control-Expose-Headers: ['Docker-Content-Digest']

三: 然后访问就可以了。可以看到我们前面上传的一个nginx镜像

四: 重新打tag在上传一个镜像

打tag

  1. docker tag registry 192.168.6.226:5000/registry:latest

上传镜像到私有仓库

  1. docker push 192.168.6.226:5000/registry:latest

然后就可以看到刚刚上传的镜像了

点击进去可以查看详情

注意这个时间,不是镜像的上传,而是镜像的创建时间

镜像的创建时间在你上传镜像的地方可以看到的,它拉取的是这个时间

五: Registry中相关的接口可以参考

https://docs.docker.com/registry/spec/api/#detail

部分接口如下,也就是说你使用这些接口完全可以自己针对registry写一套ui出来。

  1. # API Version Check
  2. $ curl 192.168.80.200:5000/v2/
  3. {}
  4. # Listing Repositories
  5. $ curl 192.168.80.200:5000/v2/_catalog
  6. {"repositories":["nginx"]}
  7. # Listing Image Tags
  8. $ curl 192.168.80.200:5000/v2/nginx/tags/list
  9. {"name":"nginx","tags":["latest"]}
  10. # Fetch the manifest by tag
  11. $ curl 192.168.80.200:5000/v2/nginx/manifests/latest
  12. # 获取镜像的digest
  13. $ curl -I 192.168.80.200:5000/v2/nginx/manifests/latest -H 'Accept: application/vnd.docker.distribution.manifest.v2+json'
  14. ...
  15. Docker-Content-Digest: sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3
  16. # Deleting an Image by digest, not supported by tag (只是删除了相关的tag,但文件实体并未删除)
  17. $ curl -X DELETE 192.168.80.200:5000/v2/nginx/manifests/sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3
  18. # 清理磁盘,是否已被删除的 blob 数据
  19. $ docker exec -it docker-registry bin/registry garbage-collect /etc/docker/registry/config.yml

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

心酸

2022/8/22 16:22:23

这个没有harbor 仓库界面好看

剑轩:@心酸嗯嗯,简版的

2022/8/22 16:49:23 回复

window7 docker启动失败 error: Failed to create the VirtualBox objectVirtualBox com对象失败

docker启动失败 报错 error: Failed to create the VirtualBox object这个错是因为:virtuelbox 无法启动,所以启动之后会...

docker启动报错 No default Boot2docker ISO found locally downloading the latest

这是因为,启动时如果检测到没有 Boot2Docker,就会去下载,这个下载过程出现网络连接上的错误了,导致启动失败。可以去下...

docker常用命令删除镜像命令进入容器、docker重启命令等

1. docker version查看 Docker 版本信息2. docker info显示 Docker 系统信息,包括镜像,容器数等3. 运行容器第一次使用:d...

docker 二次启动失败(本人这里使用的是hyper-v)

fatal: failed to start daemon: Error initializing network controller: Error creating default network: hnsCall faile...

docker中Sware集群与service

swarm 总结:1,docker中使用swarm集群可以达到多任务分配到不同的节点进行处理,如果有空闲的docker机子将会把请求的处理...

.netCore 使用分布式缓存(docker+redis)

1. 通过docker创建 Redis执行命令:dockerrun--nameasp-redis-p6379:6379-dredis查看redis状态:dockerps可以发现alreadywo...

.net Core3.0在Ubuntu 16.04上面的部署(Supervisor+nginx)(扩展docker)

前 言Linux 随着Linux越来越流行,本人一个.net程序员也多次研究linux与.net的相关产品,以及中间件的使用方式。So今天给...

docker 下载 mcr.microsoft.com/dotnet/core/sdk:3.1 老不行

请将其修改为:mcr.azk8s.cn/dotnet/core/sdk:3.1

docker常用命令

Docker简单命令整理清单[TOC] Login 获取账户信息获取账户信息 docker info | sed &#39;/Username:/!d;s/.* //&#39; ...

windows安装docker

win7、win8 等需要利用 docker toolbox 来安装,国内可以使用阿里云的镜像来下载,下载地址:http://mirrors.aliyun.com/do...

Linux 安装Web版Vscode(docker+Local)

Linux 安装Web版Vscode(Docker+Local)[TOC] code-server 介绍 在任何地方的任何机器上运行VS代码,并在浏览器中访问它...

docker运行 Elasticsearch Kibana和Cerebro

Docker运行 Elasticsearch Kibana和Cerebro[TOC] Demo 运行 Docker-compose,本地构建更高效的开发环境,更直观地了解 El...

docker部署简单的mysql

Docker部署简单的mysql[TOC] 首先这玩意我是真不想写,网上写的太多了,但是又没有找到快速的创建方式。so…有疑问都可...

Unable to get the local Boot2docker ISO version: Did not find prefix "-v" in version string

我已经从 github 上下载 v19.03.12 的镜像到 vps 然后拖回本地放在 C:\Users\Administrator.docker\machine\cache 下了。依...

docker容器和镜像的区别

下面这两个比喻说得比较好 镜像就类似操作系统光盘介质,容器相当于通过光盘安装后的系统。通过光盘(镜像),我们能在不同...