«

构建轻量级本地Docker镜像仓库:高效存储与管理

时间:2024-12-22 23:41     作者:Anglei     分类: 虚拟化


简介

Docker Registry 是存储和分发 Docker 镜像的仓库。
它就像一个镜像的存储中心,有公共和私有之分。公共的如 Docker Hub,有大量官方和开发者共享的镜像。私有 Registry 则用于企业内部等场景,保证数据安全和隐私。
其与Harbor相比有很大的不同,Registry 是 Docker 官方提供的镜像仓库服务,提供了基本的镜像存储、分发和管理功能,但缺乏一些企业级特性。Harbor 由 VMware 公司开源的企业级 Docker Registry 项目,它在 Docker Registry 的基础上增加了管理 UI、基于角色的访问控制(RBAC)、AD/LDAP 集成、审计日志等企业级特性。

特点

存储镜像:Docker Registry 可以存储大量的 Docker 镜像,包括官方提供的和用户自定义构建的。
管理镜像:Registry 提供了丰富的管理功能,如镜像的上传、下载、删除和查询等。
分发镜像:支持镜像的分发,用户可以从 Registry 中拉取所需的镜像,以便在本地或远程服务器上运行 Docker 容器。
认证能力:Registry 提供用户注册、登录和登出的能力,确保镜像的安全性和访问控制。

搭建教程

我们可以使用docker命令快速启动 registry 服务:

docker run -d -p 5000:5000 --restart=always --name registry \
-v /opt/registry:/var/lib/registry registry:2

部署完成后,我们就可以将自己的镜像推送到本地的仓库中,例如我的服务器IP为:192.168.31.5,那么可以参考下方的命令进行推送:

# 修改tag
docker tag nginx:latest 192.168.31.5:5000/nginx:latest
# 推送镜像
docker push 192.168.31.5:5000/nginx:latest
# 拉取镜像
docker pull 192.168.31.5:5000/nginx:latest

其也有配套的图形化服务,可以通过下方的docker命令进行部署:

docker run -d -p 5001:8080 --name registry-browser \
-e SECRET_KEY_BASE="123456" \
# 这里的 192.168.31.5 还成自己的内网ip
-e DOCKER_REGISTRY_URL=http://192.168.31.5:5000/v2 \
klausmeyer/docker-registry-browser:latest

然后通过访问5001端口,进入到本地仓库的管理界面:

这里仓库与ui界面的部署还是推荐使用docker compose来进行部署:

services:
  registry:
    image: registry:2
    container_name: registry
    ports:
      - "5000:5000"
    volumes:
      - /opt/registry:/var/lib/registry
    restart: always

  registry-browser:
    image: klausmeyer/docker-registry-browser:latest
    container_name: registry-browser
    environment:
      - SECRET_KEY_BASE=123456
      - DOCKER_REGISTRY_URL=http://registry:5000/v2
    ports:
      - "5001:8080"
    depends_on:
      - registry

添加认证鉴权

上述的部署方式,是不包含权限认证的,即任何人都可以访问和拉取镜像。如若你的服务部署在公网的服务器上,那么添加一个账户鉴权是更加安全的方式,这样用户就需要通过docker login去进行登录才能拉取镜像。

创建htpasswd

使用 htpasswd 命令行工具创建用户凭据。这个工具通常包含在 Apache HTTP 服务器软件中,但可以通过包管理器安装:

# 使用apt
sudo apt-get install apache2-utils
# 或者
sudo yum install apache2-utils
# 创建存放目录
sudo mkdir -p /etc/docker/registry/
# 创建凭据
htpasswd -Bbn username password > /etc/docker/registry/htpasswd

将 username 和 password 替换为你想要创建的用户名和密码。

配置 Registry

现在需要配置 Registry 以使用 token 鉴权。这通常涉及到创建一个配置文件,这个配置文件定义了 Docker Registry 的基本设置,包括日志记录、存储、HTTP 服务和认证。

vim /etc/docker/registry/config.yml

创建一个名为 config.yml的配置文件,内容如下:

version: 0.1
log:
  level: debug
  accesslog:
    disabled: true
  errorlog:
    disabled: true
storage:
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
auth:
  htpasswd:
    realm: registry
    path: /auth/htpasswd

然后我们需要修改之前的 docker-compose.yaml 文件:

services:
  registry:
    image: registry:2
    container_name: registry
    ports:
      - "5000:5000"
    volumes:
      - /opt/registry:/var/lib/registry
      - /etc/docker/registry/htpasswd:/auth/htpasswd
      - /etc/docker/registry/config.yml:/etc/docker/registry/config.yml
    restart: always

  registry-browser:
    image: klausmeyer/docker-registry-browser:latest
    container_name: registry-browser
    environment:
      - SECRET_KEY_BASE=123456
      - DOCKER_REGISTRY_URL=http://registry:5000/v2
    ports:
      - "5001:8080"
    depends_on:
      - registry
    restart: always

再去访问ui界面时,就需要我们输入用户名密码进行鉴权了:

通过本地拉取镜像同样也是需要鉴权:

特别注意

Docker 拉取镜像默认需要给 Registry 配置 SSL/TLS,如果不想配置,我们可以在需要拉取镜像的 Docker主机上配置一下,编辑/etc/docker/daemon.json添加下面的内容:

{
  "insecure-registries" : ["registry服务的IP:5000"]
}

然后重启docker就可以正常的拉取推送镜像了。

本文完结,相关标签: docker 镜像 仓库

版权所有:Anglei
文章标题:构建轻量级本地Docker镜像仓库:高效存储与管理
除非注明,本站文章均为 MAXADA社区知识库 原创,请勿用于任何商业用途。

推荐阅读:

看完后感想如何?

路过(0)

雷人(0)

握手(1)

鲜花(0)

鸡蛋(0)
分享到: