Docker 入门私人笔记(十二)构建 Docker 私有仓库之 Docker 官方的仓库

滥竽充数
• 阅读 1156

两种常用的镜像仓库:

  • Docker 官方的仓库 registry
  • VMware 的开源仓库 harbor(内置了 registry

Docker 官方的镜像仓库是部署在容器中的基于 http 协议的应用。
部署和使用方式如下:

Docker 官方的镜像仓库部署在 registry 容器中,查找并下载容器镜像:

[root@k8s-master /data]# docker search registry
NAME                                 DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
registry                             The Docker Registry 2.0 implementation for s…   2725                [OK]                
distribution/registry                WARNING: NOT the registry official image!!! …   58                                      [OK]
stefanscherer/registry-windows       Containerized docker registry for Windows Se…   27                                      
budry/registry-arm                   Docker registry build for Raspberry PI 2 and…   18                                      

第一个标记 OFFICIAL 的镜像即是,下载下来:

[root@k8s-master /data]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
c87736221ed0: Pull complete 
1cc8e0bb44df: Pull complete 
54d33bcb37f5: Pull complete 
e8afc091c171: Pull complete 
b4541f6d3db6: Pull complete 
Digest: sha256:8004747f1e8cd820a148fb7499d71a76d45ff66bac6a29129bfdbfdc0154d146
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest
[root@k8s-master /data]# 
[root@k8s-master /data]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
registry            latest              f32a97de94e1        7 months ago        25.8MB

使用这个镜像启动一个容器:

[root@k8s-master /data]# docker run -d --name docker-registry -p 5000:5000 registry
c9ab1fae9c2a3dc8da48cbce5ec3cd0e9e8f227af6aa1395448db88a17cbc7bb
[root@k8s-master /data]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                          NAMES
c9ab1fae9c2a        registry            "/entrypoint.sh /etc…"   8 seconds ago       Up 5 seconds        0.0.0.0:5000->5000/tcp                         docker-registry

创建配置文件 daemon.json(该文件默认不存在),添加私有仓库地址:

vim /etc/docker/daemon.json

配置如下:

{
"registry-mirrors":["https://tdimi5ql.mirror.aliyuncs.com"],
"insecure-registries":["http://192.168.100.151:5000"]
}

重启 docker 服务:

systemctl daemon-reload
systemctl restart docker

查看发现重启服务后仓库(容器 registry)并没有自动启动,需要手动启动:

docker start docker-registry

给想要提交到仓库的镜像打个标签:

[root@k8s-master /data]# docker tag app/jenkins 192.168.100.151:5000/app/jenkins
[root@k8s-master /data]# docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
192.168.100.151:5000/app/jenkins   latest              83644f08fe7a        6 hours ago         660MB
app/jenkins                        latest              83644f08fe7a        6 hours ago         660MB

实操发现,打标签的效果就是在镜像列表中多了一个存储库 REPOSITORY 或者说镜像名称不相同的的镜像,两个镜像的 id 完全一样,说明是同一个镜像

接下来提交镜像到远程镜像仓库:

[root@k8s-master /data]# docker push 192.168.100.151:5000/app/jenkins
The push refers to repository [192.168.100.151:5000/app/jenkins]
559f4ae0e0c6: Pushed 
fd685e9a5043: Pushed 
cfdb476660b4: Pushed 
318ee23a3d4a: Pushed 
8cb2f467d731: Pushed 
2cfb7a3b4cb2: Pushed 
8fd6d61d388e: Pushed 
aeb2f97d8c7a: Pushed 
fcbb61c1c668: Pushed 
b55cd0cf7e45: Pushed 
917d7f6fc72d: Pushed 
b4a4159a6c4a: Pushed 
8bf46d2e80f6: Pushed 
877b494a9f30: Pushed 
latest: digest: sha256:fc58c06b0ff6ab1cbe895aa48ab8921e7fac1629aabba442fc9e3f4a7d818561 size: 3247

接下来验证是否能够从远程仓库下载镜像。

先将已经提交到仓库的本地镜像删除。注意此时删除应该使用镜像名。如果使用 id 进行删除会报错,因为同一个 id 对应了两个镜像名(或者存在两个不同标签的镜像指向了同一个 id):

[root@k8s-master /data]# docker rmi 83644f08fe7a
Error response from daemon: conflict: unable to delete 83644f08fe7a (must be forced) - image is referenced in multiple repositories

正确操作:
第一次删除应该使用镜像名(REPOSITORY),此时可以看到该返回的提示是取消了标签,并未真正的删除该镜像。原因上面刚刚说过,是因为还有另一个标签指向了该镜像 id:

[root@k8s-master /etc/docker]# docker rmi app/jenkins
Untagged: app/jenkins:latest

第二次删除就可以使用 id 了,当然使用镜像名也是可以的,此时就真正的删除了镜像:

[root@k8s-master /data]# docker rmi 192.168.100.151:5000/app/jenkins
Untagged: 192.168.100.151:5000/app/jenkins:latest
Untagged: 192.168.100.151:5000/app/jenkins@sha256:fc58c06b0ff6ab1cbe895aa48ab8921e7fac1629aabba442fc9e3f4a7d818561
Deleted: sha256:83644f08fe7a5b137269dcde4132bd1ddd3cebb785cdc63ca018d8b88c33847d
Deleted: sha256:50f47b580b31fb1ec8b2e36ed19230d7cc5518ea26559e2364630b3e3b202864
Deleted: sha256:50eea350fc0f273c8f900deb83141d965ce8289eba7c3840795261e47d3d4323
Deleted: sha256:89602543224d192f0d224755a8b5c63ff9c3928ab3495d680c218cd76cddf48a
Deleted: sha256:cbdbf0f481551f918ad0a235f0ecf6897022493b759fc9ff564c2b33db7dfede

尝试从仓库拉取刚刚删除掉的镜像并查看:

[root@k8s-master /data]# docker pull 192.168.100.151:5000/app/jenkins
Using default tag: latest
latest: Pulling from app/jenkins
d8d02d457314: Already exists 
5ae2c4acbc0f: Already exists 
9d30c820b1f2: Already exists 
5c50e57b98c7: Already exists 
eebefd700a88: Already exists 
c0a6323f718e: Already exists 
07fd7191c06d: Already exists 
146c19a74bc8: Already exists 
c015e8b53603: Already exists 
cf7384c89894: Already exists 
da96a327dec8: Already exists 
b79fb209b1a1: Already exists 
9dac0f3f7b2b: Already exists 
8478f3dea98b: Pull complete 
Digest: sha256:fc58c06b0ff6ab1cbe895aa48ab8921e7fac1629aabba442fc9e3f4a7d818561
Status: Downloaded newer image for 192.168.100.151:5000/app/jenkins:latest
[root@k8s-master /data]# 
[root@k8s-master /data]# 
[root@k8s-master /data]# docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
192.168.100.151:5000/app/jenkins   latest              83644f08fe7a        7 hours ago         660MB
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Stella981 Stella981
3年前
Docker 国内仓库和镜像
Docker国内仓库和镜像由于网络原因,我们在pullImage的时候,从DockerHub上下载会很慢。。。所以,国内的Docker爱好者们就添加了一些国内的镜像(mirror),方便大家使用。1\.国内Docker仓库阿里云(https://www.osch
Stella981 Stella981
3年前
Docker Hub 上的官方 Jenkins 镜像
目前,在DockerHub上有三个不同的仓库正(或曾经)被当作“官方”Jenkins镜像。本文是为了申明哪个是当前的官方镜像(截至2018年12月).官方的dockerpulljenkins/jenkinshttps://hub.docker.com/r/jenkins/jenkins/是正确的仓库
Stella981 Stella981
3年前
Linux Docker镜像使用
docker拉取镜像命令dockerpull选项DockerRegistry地址:端口号/仓库名:标签中框号内内容都为可选内容若不输入镜像仓库地址则拉取官方默认仓库,即DockerHub   https://hub.docker.com/(https://www.oschina.net/action
Stella981 Stella981
3年前
Docker部署Mysql
简介  MySQL是开源的关系数据库实现。Docker官方仓库提供了MySQL各个版本的镜像 https://hub.docker.com/\_/mysql(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fhub.docker.com%2F_%2Fmysql) 。使
Stella981 Stella981
3年前
Docker搭建私有镜像仓库
docker仓库的工作原理和maven的类似,他们都提供了提供了一个中央仓库,允许用户科技直接从中央仓库下载,同时我们也可以搭建自己的本地私有仓库。docker本地私有镜像仓库的优点:1.从私有仓库中下载节省网络带宽;2.从私有仓库中下载速度快,一般都是局域网络内部署;3.托管不对外的内部镜像;下面我们将完整的说明使用docker
Stella981 Stella981
3年前
Docker harbor 安装和基础操作
目录简介离线安装配置文件安装查看访问测试及简单操作创建一个用户创建一个测试仓库创建测试仓库测试上传和下载镜像上传下载镜像测试简介Docker容器应用的开
Stella981 Stella981
3年前
Docker 镜像 容器 仓库
Docker包括三个基本概念镜像(Image)容器(Container)仓库(Repository)Docker镜像Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其
Stella981 Stella981
3年前
Docker 最常用的镜像命令和容器命令
  本文列出了Docker使用过程中最常用的镜像命令和容器命令,以及教大家如何操作容器数据卷,实现容器数据的备份。熟练练习这些命令以后,再来一些简单的应用部署练习,大家就可以学习Docker的镜像构建、备份恢复迁移、镜像仓库、网络、集群等等更多的内容。镜像相关命令  官方文档:https://docs.docker.com/r
Stella981 Stella981
3年前
Docker初学
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。这次首先说一下docker的三个重要内容:仓库:注册服务器是一个存放仓库的地方,在里面可以存放多个仓库。每个仓库集中存放同
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(