TNBLOG
首页
博客
视频
资源
问答
猿趣
手机
关于
搜索
收藏
便签
笔记
消息
创作
登录
剑轩
人生没有办法假设,我们不能站在后来的角度去责备当时无望、甚至是怯懦、犹豫的自己
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
CSS
15篇
微服务
41篇
Git
14篇
.NET
102篇
移动开发
33篇
软件架构
23篇
.NET Core
118篇
.NET MVC
11篇
英语
3篇
随笔
82篇
Bootstrap
3篇
Redis
21篇
编辑器
10篇
Js相关
15篇
虚拟化
8篇
更多
Oracle
7篇
Python
14篇
数据库
26篇
EF
17篇
微信
3篇
前端
149篇
消息队列
6篇
docker
41篇
多线程
1篇
Java
4篇
软件基础
2篇
C++
2篇
WCF
7篇
Linux
7篇
nginx
5篇
K8S
9篇
ABP
2篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2023
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术
原
docker搭建私有仓库。上传本地镜像到私有仓库。搭建管理的ui界面
7387
人阅读
2022/8/22 11:54
总访问:
3514268
评论:
2
收藏:
0
手机
分类:
docker
[TOC] ## docker搭建私有仓库registry registry介绍: tn2>官方私有仓库,优点:简单;缺点:简单,无法进行复杂的管理操作 ### 一 下载 registry镜像 ``` docker pull registry ``` 默认是下载latest版本,也可以指定某个版本,比如2.8.1版本 docker pull registry:2.8.1  ### 二 创建daemon.json文件,添加一点配置 使用vi命令创建文件 ``` vi /etc/docker/daemon.json ``` 添加内容 ``` { "insecure-registries": ["192.168.6.226:5000"], "registry-mirrors": ["https://4abdkxlk.mirror.aliyuncs.com"] } ``` 查看文件 ``` cat /etc/docker/daemon.json ``` 效果如图  "insecure-registries": ["192.168.6.226:5000"]是指定私有仓库地址的意思。 tn2>如果etc下面没有docker这个文件夹,创建是不会成功的,先在etc目录下使用 mkdir docker创建一下docker文件夹就行 ### 三 重启docker ``` systemctl daemon-reload systemctl restart docker.service ``` 可能执行会报错 tn6>unable to configure the Docker daemon with file /etc/docker/daemon.json:... 是因为创建/etc/docker/daemon.json文件导致的。检查内容一定要对。可能出现错误的点,比如注释,空格之类的,如果有问题可以尝试把注释去掉,第一行加一个空格试试,一般都是一些不正确格式的注释引起的。比如修改成这样就可以解决上面报的那个错了:  也可以使用journalctl?-xe命令查看报错详情  我们可以看到确实是因为/etc/docker/daemon.json文件的内容问题,修改正确重新执行重启命令。 ### 四 创建registry容器并开放端口 ``` docker create -it registry /bin/bash docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry //-v表示挂载,前者是宿主机,后者是容器' ``` ## 上传本地镜像到私有仓库 ### 一 随便拉取一个镜像,比如nginx  ### 二 给本地镜像打个tag标签。标记本地镜像,将其归入某一仓库。 这里的标记就是私有仓库的ip地址和端口号。 ``` docker tag nginx 192.168.6.226:5000/nginx:v1 ```  ### 三 使用docker命令上传本地镜像到私有镜像仓库 ``` docker push 192.168.6.226:5000/nginx:v1 ``` 可以看到上传的进度  上传完毕的效果如下  ### 四 获取私有仓库列表查看是否上传成功 ``` curl -XGET http://192.168.6.226:5000/v2/_catalog ``` 如图:  ### 五 验证镜像,从私有仓库下载镜像 删除原有镜像 ``` docker tag nginx aojiancc/nginx:v1 ``` 删除后在查看一下镜像,确认下是否真的被删除掉。如图3.x所示刚刚标记的镜像已经被删除掉了  从本地仓库下载镜像 ``` docker pull 192.168.6.226:5000/nginx:v1 ``` 要注意拉取的时候要指定v1版本,不然拉取的就是latest版本,由于我们没有latest版本所以会报错,如图所示:  加上v1版本就可以被正确的拉取了  然后在使用docker images查看一下镜像即可。  ## 搭建管理的ui界面 ### 一: 拉取docker-registry-ui镜像 ``` docker pull joxit/docker-registry-ui:latest ``` ### 二: 给registry创建一个配置文件,主要是配置允许跨域 这里我们重新启动前面创建的registry容器,前面启动的容器可以先干掉都行。后面在介绍以下,不重新启动registry容器直接使用以前容器的方式。 ``` mkdir -p /etc/docker/registry cat > /etc/docker/registry/config.yml <<EOF version: 0.1 log: accesslog: disabled: true level: debug formatter: text fields: service: registry environment: staging storage: delete: enabled: true cache: blobdescriptor: inmemory filesystem: rootdirectory: /var/lib/registry http: addr: :5000 headers: X-Content-Type-Options: [nosniff] Access-Control-Allow-Origin: ['http://192.168.6.226'] Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE'] Access-Control-Allow-Headers: ['Authorization', 'Accept'] Access-Control-Max-Age: [1728000] Access-Control-Allow-Credentials: [true] Access-Control-Expose-Headers: ['Docker-Content-Digest'] http2: disabled: false health: storagedriver: enabled: true interval: 10s threshold: 3 EOF ``` ### 三: 使用docker-compose同时启动这两个容器即可 ``` cat > docker-compose.yaml <<EOF version: '2.0' services: registry: image: registry:2.8.1 ports: - 5000:5000 volumes: - /opt/registry:/var/lib/registry - /etc/docker/registry/config.yml:/etc/docker/registry/config.yml ui: image: joxit/docker-registry-ui:latest ports: - 80:80 environment: - REGISTRY_TITLE=My Private Docker Registry - REGISTRY_URL= http://192.168.6.226:5000 - SINGLE_REGISTRY=true depends_on: - registry EOF docker-compose up -d ``` 启动成功后,访问http://192.168.6.226即可查看私有镜像仓库的ui。 tn2>下面说一下不重新启动容器的方式,其实ui只是去调用registry里边的接口而已,所以我们也完全可以一个一个来。我们可以就使用我们前面创建得registry容器 ### 一: 使用docker-compose只启动docker-registry-ui ``` cat > docker-compose.yaml <<EOF version: '2.0' services: ui: image: joxit/docker-registry-ui:latest ports: - 80:80 environment: - REGISTRY_TITLE=My Private Docker Registry - REGISTRY_URL=http://192.168.6.226:5000 - SINGLE_REGISTRY=true EOF docker-compose up -d ``` ### 二: 然后访问私有镜像仓库的ui会出现跨域的错误。  所以我们要进行跨域配置。 如果是新启动的registry可以和使用docker-compose一样,创建一个配置文件然后在启动的时候映射一下配置文件即可。需要注意配置文件读写权限问题。 ``` docker run -p 5000:5000 -v /data/registry:/tmp/registry -v /etc/docker/registry/config.yml:/etc/docker/registry/config.yml registry ``` 如果前面已经使用手动命令启动过registry,比如我们这里的情况,现在要修改配置,就需要进入容器内部在修改配置文件了。 以下操作涉及到了进入容器、查看目录、进入配置文件目录、查看默认配置文件内容等,如下图所示。  编辑文件添加如下可以跨域的内容:  在贴一下这块代码: ``` headers: X-Content-Type-Options: [nosniff] Access-Control-Allow-Origin: ['http://192.168.80.200'] Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE'] Access-Control-Allow-Headers: ['Authorization', 'Accept'] Access-Control-Max-Age: [1728000] Access-Control-Allow-Credentials: [true] Access-Control-Expose-Headers: ['Docker-Content-Digest'] ``` ### 三: 然后访问就可以了。可以看到我们前面上传的一个nginx镜像  ### 四: 重新打tag在上传一个镜像 打tag ``` docker tag registry 192.168.6.226:5000/registry:latest ```  上传镜像到私有仓库 ``` docker push 192.168.6.226:5000/registry:latest ```  然后就可以看到刚刚上传的镜像了  点击进去可以查看详情 注意这个时间,不是镜像的上传,而是镜像的创建时间  镜像的创建时间在你上传镜像的地方可以看到的,它拉取的是这个时间  ### 五: Registry中相关的接口可以参考 <https://docs.docker.com/registry/spec/api/#detail> 部分接口如下,也就是说你使用这些接口完全可以自己针对registry写一套ui出来。 ``` # API Version Check $ curl 192.168.80.200:5000/v2/ {} # Listing Repositories $ curl 192.168.80.200:5000/v2/_catalog {"repositories":["nginx"]} # Listing Image Tags $ curl 192.168.80.200:5000/v2/nginx/tags/list {"name":"nginx","tags":["latest"]} # Fetch the manifest by tag $ curl 192.168.80.200:5000/v2/nginx/manifests/latest # 获取镜像的digest $ curl -I 192.168.80.200:5000/v2/nginx/manifests/latest -H 'Accept: application/vnd.docker.distribution.manifest.v2+json' ... Docker-Content-Digest: sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3 # Deleting an Image by digest, not supported by tag (只是删除了相关的tag,但文件实体并未删除) $ curl -X DELETE 192.168.80.200:5000/v2/nginx/manifests/sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3 # 清理磁盘,是否已被删除的 blob 数据 $ docker exec -it docker-registry bin/registry garbage-collect /etc/docker/registry/config.yml ```
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}