专业的编程技术博客社区

网站首页 > 博客文章 正文

搭建docker本地私有仓库registry(docker创建本地仓库)

baijin 2024-11-06 09:34:45 博客文章 5 ℃ 0 评论

Docker Registry 是 Docker 生态系统中的核心组件,主要负责存储、管理和分发 Docker 镜像。它允许用户构建、存储和分发自己的容器镜像,从而实现应用程序的快速部署和迁移。

用户可以使用 Docker Registry 官方镜像搭建自己的私有镜像存储库,这对于需要将镜像存储在企业内部或对外网隔离的场景非常重要。

Docker Registry属于轻量级的docker仓库。

当前docker公网上的仓库时好时坏,可以通过建立本地的私有仓库Docker Registry,把一些常用的镜像拉取到本地后,存在私有仓库中,以备需要使用这些镜像的时候可以在本地拉取。

本文将在AlpineLinux系统环境下搭建Docker Registry的服务,并且演示如何简单的使用这个私有仓库。其他发行版本的部署方法和步骤类似。也可以参考这篇文章进行部署。

一、Docker搭建本地私有仓库步骤

1、下载 registry 镜像

Docker Registry的部署相对比较简单,拉取镜像,启动容器,配置客户端的配置文件即可。

拉取镜像前,确保已经安装了docker。如果没有安装docker,可以参考前面的部署docker的文章,此处不在赘述。

下面的命令拉取了最新版本的registry

localhost:~# docker pull registry:latest
latest: Pulling from library/registry
1cc3d825d8b2: Pull complete
85ab09421e5a: Pull complete
40960af72c1c: Pull complete
e7bb1dbb377e: Pull complete
a538cc9b1ae3: Pull complete
Digest: sha256:ac0192b549007e22998eb74e8d8488dcfe70f1489520c3b144a6047ac5efbe90
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest

拉取完成后,我们看看镜像,可以看到,registry的镜像仅25.4M

localhost:~# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
registry     latest    75ef5b734af4   12 months ago   25.4MB

2、配置daemon.json文件

这个步骤为需要用到私有仓库的docker都需要修改的配置,编辑 daemon.json 文件,如果没有这个文件,可以创建一个:

localhost:~# vi /etc/docker/daemon.json

在文件中添加私有镜像仓库的地址,registry-mirrors 为docker的加速仓库源,如果用不着,可以不用理会。

{
  "insecure-registries": ["192.168.10.153:5000"],
  "registry-mirrors": ["https://docker.m.daocloud.io"]
}

重启docker服务

localhost:~# rc-service docker restart
 * WARNING: you are stopping a boot service
 * Stopping Docker Daemon ...                                                                              [ ok ]
 * /var/log/docker.log: correcting owner
 * Starting Docker Daemon ...   

创建目录存放镜像

mkdir -p /data/registry

3、运行 registry 容器

下面是不启动https的方式启动 docker registry:

localhost:~# docker run -d -p 5000:5000 --name=registry  -v /data/registry:/var/lib/registry -e REGISTRY_HTTP_ADD
R=0.0.0.0:5000  registry:latest
46bc18c5e035fb5097d2eec71b5c95b87957db6a7f7356d771a81897e6f9c61e
localhost:~# docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS         PORTS                                       NAMES
46bc18c5e035   registry:latest   "/entrypoint.sh /etc…"   8 seconds ago   Up 7 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   registry

运行完成后,使用下面的命令来访问仓库,因为咱们还没有推镜像到仓库,会得到一个空的结果。

localhost:~# curl 192.168.10.153:5000/v2/_catalog
{"repositories":[]}

二、推拉镜像测试私有仓库

咱们拉取一个nginx的镜像,来测试一下这个部署包的私有仓库是否可以正常使用。

1、拉取nginx的镜像

为了简单,就拉取一个基于alpine做的nginx镜像,这样的镜像一般都比较小:

localhost:~# docker pull nginx:alpine
alpine: Pulling from library/nginx
43c4264eed91: Pull complete
d1171b13e412: Pull complete
596d53a7de88: Pull complete
f99ac9ba1313: Pull complete
fd072e74e282: Pull complete
379754eea6a7: Pull complete
45eb579d59b2: Pull complete
472934715761: Pull complete
Digest: sha256:2140dad235c130ac861018a4e13a6bc8aea3a35f3a40e20c1b060d51a7efd250
Status: Downloaded newer image for nginx:alpine
docker.io/library/nginx:alpine
localhost:~# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        alpine    cb8f91112b6b   13 days ago     47MB
registry     latest    75ef5b734af4   12 months ago   25.4MB

可以看到,拉取下来的镜像仅47MB,相较于基于nginx:latest大小192MB的镜像还要小上一些。

2、为镜像打标签

docker tag为nginx镜像打上新的标签,这个标签需要以docker registry仓库的服务器IP加端口开头,

localhost:~# docker tag nginx:alpine 192.168.10.153:5000/nginx:private
localhost:~# docker images
REPOSITORY                  TAG       IMAGE ID       CREATED         SIZE
192.168.10.153:5000/nginx   private   cb8f91112b6b   13 days ago     47MB
nginx                       alpine    cb8f91112b6b   13 days ago     47MB
registry                    latest    75ef5b734af4   12 months ago   25.4MB

打标签后,可以看到过了一个镜像,但是看IMAGE ID,其实还是同一个镜像,只是多了一个别名而已。

3、上传到私有仓库

使用docker push

localhost:~# docker push 192.168.10.153:5000/nginx:private
The push refers to repository [192.168.10.153:5000/nginx]
528b47987bcf: Pushed
a533c9e2e114: Pushed
6033613561cc: Pushed
0de02d5b2d31: Pushed
f80bfdacda57: Pushed
1241fe31c0bf: Pushed
4e9e0d6ba2cc: Pushed
63ca1fbb43ae: Pushed
private: digest: sha256:76684c43f32804f2601310a067fd5039f85bdf76bb23a477c2a7440f12b883fd size: 1989

4、列出私有仓库的所有镜像

再次查看仓库,可以看到,仓库里面多了一个nginx的镜像

localhost:~# curl 192.168.10.153:5000/v2/_catalog
{"repositories":["nginx"]}

利用curl http://192.168.118.16:5000/v2/镜像名/tags/list,可以查看这个镜像的标签信息

localhost:~# curl 192.168.10.153:5000/v2/nginx/tags/list
{"name":"nginx","tags":["private"]}

5、先删除本地的nginx镜像,再从仓库下载进行测试

通过 IMAGE ID 将本地两个标签的同一个nginx镜像删除

localhost:~# docker image ls
REPOSITORY                  TAG       IMAGE ID       CREATED         SIZE
192.168.10.153:5000/nginx   private   cb8f91112b6b   13 days ago     47MB
nginx                       alpine    cb8f91112b6b   13 days ago     47MB
registry                    latest    75ef5b734af4   12 months ago   25.4MB
localhost:~# docker rmi -f cb8f91112b6b
Untagged: 192.168.10.153:5000/nginx:private
Untagged: 192.168.10.153:5000/nginx@sha256:76684c43f32804f2601310a067fd5039f85bdf76bb23a477c2a7440f12b883fd
Untagged: nginx:alpine
Untagged: nginx@sha256:2140dad235c130ac861018a4e13a6bc8aea3a35f3a40e20c1b060d51a7efd250
Deleted: sha256:cb8f91112b6b50ead202f48bbf81cec4b34c254417254efd94c803f7dd718045
Deleted: sha256:09f99be15f4ff5db64a85472139db4395c3c14e00c7a90f37499237625556ed4
Deleted: sha256:a3a02df44147c897aef503f952dfa230308fbb8a9bbb5ca28fac36b7b866d6d6
Deleted: sha256:1f47bf4b72792d8c5ea114da41dba55e908ad3b920e8076bec908c771b81d4b4
Deleted: sha256:415c1787dcb7fd187fa40535785c2b3d14d2920ea736ec2a745e1860e92b312a
Deleted: sha256:d0a43343a6d59e04b17a9cc72934e435f6609689259eb4e4adf5658de3eaf8e0
Deleted: sha256:79d58bb4d8ae0b5b8c8cd790f4a8ae29facd883297f357932d3a5266b4f4e30d
Deleted: sha256:adffcb7a535b6915444890e65729bc15929c8fd060c7b4641c57fff05c7f5999
Deleted: sha256:63ca1fbb43ae5034640e5e6cb3e083e05c290072c5366fcaa9d62435a4cced85

删除完成后

localhost:~# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
registry     latest    75ef5b734af4   12 months ago   25.4MB

从本地仓库把镜像重新拉取下来

localhost:~# docker pull 192.168.10.153:5000/nginx:private
private: Pulling from nginx
43c4264eed91: Pull complete
d1171b13e412: Pull complete
596d53a7de88: Pull complete
f99ac9ba1313: Pull complete
fd072e74e282: Pull complete
379754eea6a7: Pull complete
45eb579d59b2: Pull complete
472934715761: Pull complete
Digest: sha256:76684c43f32804f2601310a067fd5039f85bdf76bb23a477c2a7440f12b883fd
Status: Downloaded newer image for 192.168.10.153:5000/nginx:private
192.168.10.153:5000/nginx:private
localhost:~# docker images
REPOSITORY                  TAG       IMAGE ID       CREATED         SIZE
192.168.10.153:5000/nginx   private   cb8f91112b6b   13 days ago     47MB
registry                    latest    75ef5b734af4   12 months ago   25.4MB

6、查看私有仓库镜像的命令

上面使用到的查看仓库的命令,是在命令行中使用,也可以通过浏览器来查看仓库的内容

1)查看私有仓库执行此命令:

curl http://ip:端口/v2/_catalog

浏览器的输出效果:

2)获取某个镜像的标签列表:

curl http://ip:端口/v2/私有仓库镜像名称/tags/list

总结

Docker Registry 做为轻量级的docker私有仓库,细心的同学可能从上面的演示中察觉到,它是公开的,不能做用户管理和仓库项目的管理,这对于大型公司多个项目组的协助就不是很好了,这种场景下,就应该使用另外一个开源的仓库 Harbor 了。下次再来讲一下关于 Harbor 私有话仓库的部署。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表