问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
1
来源
1.
https://www.maxada.cn/?post=465

Docker镜像仓库是存储和分发Docker镜像的重要基础设施。本文将详细介绍如何构建一个轻量级的本地Docker镜像仓库,包括基本概念、搭建步骤和安全认证配置,帮助读者快速掌握这一实用技能。

简介

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 服务和认证。

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就可以正常的拉取推送镜像了。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号