快速创建Docker私有仓库

目录

Docker仓库

Docker仓库分为公有仓库和私有仓库

公有仓库是由Docker官方或其他第三方提供的开放性镜像仓库,其中最著名的就是Docker Hub。在Docker Hub上,用户可以浏览、搜索、下载和上传各种类型的Docker镜像,包括官方镜像、社区镜像和个人镜像等。Docker Hub还提供了一些高级功能,如自动化构建、组织管理、Webhooks等。公有仓库是Docker生态系统中非常重要的组成部分,它使得用户可以快速找到和共享Docker镜像,并与其他用户进行协作和交流。

私有仓库是由企业或个人自己搭建和管理的镜像仓库,通常用于存储和分享私有的Docker镜像。私有仓库可以帮助用户更好地控制镜像的访问和安全性,同时也提供了更高的灵活性和自定义性。在私有仓库中,用户可以创建自己的命名空间、团队和镜像仓库,并设置访问权限、认证方式、镜像复制等功能。当用户需要在企业内部或特定的云环境中使用Docker镜像时,私有仓库是一个非常有用的选择。

Docker Registry

Docker Registry是一个用于存储和分发Docker镜像的开源项目。它提供了集中式的镜像管理、版本控制、安全性控制、访问控制等功能,使得Docker镜像的存储和共享更加便捷和可靠。在Docker生态系统中,Docker Registry是一个非常重要的组件,它可以帮助企业或个人构建自己的私有镜像仓库,并与Docker Hub等公共Registry进行交互和协作。

我们可使用docker-registry项目或者Docker Registry 2.0来搭建私有仓库,但docker-registry已被官方标记为过时,所以一般使用Docker Registry 2.0

创建私有仓库

使用以下命令就直接启动registry容器:

powershell 复制代码
docker run -d -p 5000:5000 --restart=always --name registry2 registry:2

Registry默认的存储位置为/var/lib/registry,可以通过-v参数来映射本地的路径到容器内。

powershell 复制代码
docker run -d -p 5000:5000 --restart=always --name registry2 -v /opt/data/registry:/var/lib/registry registry:2

Registry默认的配置文件地址为/etc/docker/registry/config.yml,如果我们想使用主机上的配置文件,也可以将本地目录挂载到该目录,在启动命令添加以下命令即可,path为主机配置文件的路径

powershell 复制代码
-v /path/config.yml:/etc/docker/registry/config.yml 

私有仓库配置

私有仓库需要启用TLS认证,否则会报错。我们可以通过两种方法来解决

1、添加DOCKER_OPTS变量

Linux位置:/etc/default/docker 或 /etc/sysconfig/docker

修改Registry server上的Docker daemon的配置,为DOCKER_OPTS增加--insecure-registry:

powershell 复制代码
DOCKER_OPTS="--insecure-registry ip:port ...."

ip:port为Registry server的ip和端口

如果采用insecure registry的模式,那么所有与Registry交互的主机上的Docker Daemon都要配置:--insecure-registry选项,所以使用Registry 的客户端也需要配置--insecure-registry

2、生成TLS证书

前提:先创建域名

修改一下/etc/hosts文件:

powershell 复制代码
ip mydockerhub.com
  1. 使用openssl工具生成私人证书文件:
powershell 复制代码
 #创建文件夹
 mkdir -p certs
 #生成证书
 openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/myrepo.key -x509 -days 365 -out certs/myrepo.crt

注:CN要填入跟访问的地址相同的域名,例如这里应该为myrepo.com

生成结果为秘钥文件myrepo.key,以及证书文件myrepo.crt。 其中证书文件需要发送给用户,并且配置到用户Docker Host上,注意路径需要跟域名一致,例如:

将生成的证书文件复制到客户端的ca文件

powershell 复制代码
/etc/docker/certs.d/myrepo.com:5000/ca.crt
  1. 启动带证书的Registry
powershell 复制代码
docker run -d -p 5000:5000 --restart=always --name registry2 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/myrepo.crt  \
-e REGISTRY_HTTP_TLS_KEY=/certs/myrepo.key  \
registry:2

REGISTRY_HTTP_TLS_CERTIFICATE为证书文件,REGISTRY_HTTP_TLS_KEY为密钥文件

推送拉取镜像

首先使用标签指定仓库:

语法:

powershell 复制代码
docker tag <镜像名称>:<标签> <仓库名称>/<镜像名称>:<标签>

示例:

powershell 复制代码
#registry.example.com:5000为docker reistry的域名和端口
docker tag myimage:latest registry.example.com:5000/myimage:latest

推送镜像

powershell 复制代码
docker push registry.example.com:5000/myimage:latest

这个命令将本地的myimage:latest镜像推送到名为registry.example.com:5000的远程Docker仓库中。

拉取镜像

powershell 复制代码
docker pull registry.example.com:5000/myimage:latest
相关推荐
2501_9240641110 分钟前
2025年优测平台:微服务全链路性能瓶颈分析与最佳实践
微服务·云原生·架构·性能瓶颈·全链路性能
石小千1 小时前
Ubuntu24.04 安装Docker
运维·docker·容器
scriptsboy1 小时前
Halo Docker 迁移方法
运维·docker·容器
隐语SecretFlow1 小时前
【隐语Secretflow】一文速通基于可信执行环境 (TEE) 的零信任计算系统
云原生·kubernetes·开源
R.lin2 小时前
Docker核心原理详解
运维·docker·容器
MarkHD2 小时前
车辆TBOX科普 第70次 AUTOSAR Adaptive、容器化与云原生的融合革命
云原生·wpf
颜淡慕潇2 小时前
容器生态双核心:Podman与Docker深度对比及实战指南
docker·eureka·podman
头发多的码农2 小时前
jenkins docker ssh发布效率提升
运维·docker·jenkins
起个名字总是说已存在2 小时前
Kylin Linux麒麟环境docker启动容器报错permission denied解决
linux·docker·kylin
测试人社区-小明2 小时前
测试领域的“云原生”进化:Serverless Testing
人工智能·科技·云原生·面试·金融·serverless·github