阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用Docker Registry快速搭建私有镜像仓库

193次阅读
没有评论

共计 4766 个字符,预计需要花费 12 分钟才能阅读完成。

1、背景

在 Docker 中,当我们执行 docker pull xxx 的时候,可能会比较好奇,Docker 会去哪儿查找并下载镜像呢?

它实际上是从 registry.hub.docker.com 这个地址去查找,这就是 Docker 公司为我们提供的公共仓库,上面的镜像,大家都可以看到,也可以使用。所以,我们也可以带上仓库地址去拉取镜像,如:docker pull registry.hub.docker.com/library/alpine,不过要注意,这种方式下载的镜像的默认名称就会长一些。

如果要在公司中使用 Docker,我们基本不可能把商业项目上传到公共仓库中,那如果要多个机器共享,又能怎么办呢?

正因为这种需要,所以私有仓库也就有用武之地了。

所谓 私有仓库,也就是在本地(局域网)搭建的一个类似公共仓库的东西,搭建好之后,我们可以将镜像提交到私有仓库中。这样我们既能使用 Docker 来运行我们的项目镜像,也避免了商业项目暴露出去的风险。

下面我们用官方提供的 registry 镜像来搭建私有镜像仓库,当然还有其它很多方法。

2、环境

准备两台安装好 docker 的服务器:
服务端机器(主机名为 registry):docker 私有仓库服务器,运行 registry 容器;
测试端机器(主机名为 node):普通的 docker 服务器,在这台服务器上下载一个测试镜像 busybox,然后上传到 registry 服务器进行测试;

3、部署(服务端操作)

3.1 下载镜像 registry

[root@registry ~]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
81033e7c1d6a: Pull complete
b235084c2315: Pull complete
c692f3a6894b: Pull complete
ba2177f3a70e: Pull complete
a8d793620947: Pull complete
Digest: sha256:672d519d7fd7bbc7a448d17956ebeefe225d5eb27509d8dc5ce67ecb4a0bce54
Status: Downloaded newer image for registry:latest

3.2 查看镜下是否 pull 下来了
使用 Docker Registry 快速搭建私有镜像仓库

3.3 运行 registry 容器

[root@registry ~]# docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 –restart=always –name registry registry:latest
06a972de6218b1f1c3bf9b53eb9068dc66d147d14e18a89ab51db13e339d3dc9

参数说明
-itd:在容器中打开一个伪终端进行交互操作,并在后台运行;
-v:把宿主机的 /data/registry 目录绑定 到 容器 /var/lib/registry 目录(这个目录是 registry 容器中存放镜像文件的目录),来实现数据的持久化;
-p:映射端口;访问宿主机的 5000 端口就访问到 registry 容器的服务了;
–restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;
–name registry:创建容器命名为 registry,你可以随便命名;
registry:latest:这个是刚才 pull 下来的镜像;

3.4 测试镜像仓库中所有的镜像

[root@registry ~]# curl http://127.0.0.1:5000/v2/_catalog
{“repositories”:[]}

现在是空的,因为才刚运行,里面没有任何镜像内容。

4、测试镜像仓库(测试端操作)

4.1 修改下镜像源并重启 docker 服务

[root@node ~]# vim /etc/docker/daemon.json
{
  “registry-mirrors”: [“https://registry.docker-cn.com”]
}

[root@node ~]# systemctl restart docker

4.1 下载 busybox 镜像

[root@node ~]# docker pull busybox
[root@node ~]# docker images
REPOSITORY          TAG                IMAGE ID            CREATED            SIZE
busybox            latest              f6e427c148a7        36 hours ago        1.15MB

4.2 为镜像打标签

[root@node ~]# docker tag busybox:latest  172.18.18.90:5000/busybox:v1

格式说明:Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] 

busybox:lastest 这是源镜像,也是刚才 pull 下来的镜像文件;
172.18.18.90:500/busybox:v1:这是目标镜像,也是 registry 私有镜像服务器的 IP 地址和端口;

查看一下打好的 tag:
使用 Docker Registry 快速搭建私有镜像仓库

4.3 上传到镜像服务器

[root@node ~]# docker push 172.18.18.90:5000/busybox:v1
The push refers to repository [172.18.18.90:5000/busybox]
Get https://172.18.18.90:5000/v2/: http: server gave HTTP response to HTTPS client

注意了,这是报错了,需要 https 的方法才能上传,我们可以修改下 daemon.json 来解决:

[root@node ~]# vim /etc/docker/daemon.json
{
  “registry-mirrors”: [“https://registry.docker-cn.com”],
  “insecure-registries”: [“172.18.18.90:5000”]
}

添加私有镜像服务器的地址,注意书写格式为 json,有严格的书写要求,然后重启 docker 服务:

[root@node ~]# systemctl  restart docker

在次上传可以看到没问题 了:

[root@node ~]# docker push 172.18.18.90:5000/busybox:v1
The push refers to repository [172.18.18.90:5000/busybox]
c5183829c43c: Pushed
v1: digest: sha256:c7b0a24019b0e6eda714ec0fa137ad42bc44a754d9cea17d14fba3a80ccc1ee4 size: 527

4.4 测试下载镜像
上传测试没问题了,我们接下来测试一下从 registry 服务器上下载刚才上传的 busybox 镜像,先删除 node 主机上的镜像:

[root@node ~]# docker rmi -f $(docker images -aq)
Untagged: 172.18.18.90:5000/busybox:v1
Untagged: 172.18.18.90:5000/busybox@sha256:c7b0a24019b0e6eda714ec0fa137ad42bc44a754d9cea17d14fba3a80ccc1ee4
Untagged: busybox:latest
Untagged: busybox@sha256:2107a35b58593c58ec5f4e8f2c4a70d195321078aebfadfbfb223a2ff4a4ed21
Deleted: sha256:f6e427c148a766d2d6c117d67359a0aa7d133b5bc05830a7ff6e8b64ff6b1d1d
Deleted: sha256:c5183829c43c4698634093dc38f9bee26d1b931dedeba71dbee984f42fe1270d

查看一下 node 主机上的镜像全部删除了:

[root@node ~]# docker images
REPOSITORY          TAG                IMAGE ID            CREATED            SIZE

然后,从 registry 服务器上下载 busybox 镜像:

[root@node ~]# docker pull 172.18.18.90:5000/busybox:v1
v1: Pulling from busybox
d070b8ef96fc: Pull complete
Digest: sha256:c7b0a24019b0e6eda714ec0fa137ad42bc44a754d9cea17d14fba3a80ccc1ee4
Status: Downloaded newer image for 172.18.18.90:5000/busybox:v1
[root@node ~]# docker images
REPOSITORY                  TAG                IMAGE ID            CREATED            SIZE
172.18.18.90:5000/busybox  v1                  f6e427c148a7        36 hours ago        1.15MB

列出所有镜像:

[root@node ~]# curl  http://172.18.18.90:5000/v2/_catalog
{“repositories”:[“busybox”]}

列出 busybox 镜像有哪些 tag:

[root@node ~]# curl  http://172.18.18.90:5000/v2/busybox/tags/list
{“name”:”busybox”,”tags”:[“v1”]}

更多 Docker 相关教程见以下内容

Docker 安装应用 (CentOS 6.5_x64) https://www.linuxidc.com/Linux/2014-07/104595.htm
Ubuntu 16.04 服务器上配置使用 Docker  https://www.linuxidc.com/Linux/2017-06/145176.htm
Ubuntu 15.04 下安装 Docker  https://www.linuxidc.com/Linux/2015-07/120444.htm
Docker 安装实例 https://www.linuxidc.com/Linux/2017-04/142666.htm
Docker 创建基础镜像  https://www.linuxidc.com/Linux/2017-05/144112.htm
在 Ubuntu 15.04 上如何安装 Docker 及基本用法 https://www.linuxidc.com/Linux/2015-09/122885.htm
Ubuntu 16.04 上 Docker 使用手记 https://www.linuxidc.com/Linux/2016-12/138490.htm
使用 Docker 分分钟启动常用应用  https://www.linuxidc.com/Linux/2017-04/142649.htm
Ubuntu 16.04 下 Docker 修改配置文件不生效解决办法  https://www.linuxidc.com/Linux/2017-05/143862.htm

Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4766字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中