快速创建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
相关推荐
€☞扫地僧☜€41 分钟前
docker 拉取MySQL8.0镜像以及安装
运维·数据库·docker·容器
茶馆大橘41 分钟前
微服务系列六:分布式事务与seata
分布式·docker·微服务·nacos·seata·springcloud
全能全知者2 小时前
docker快速安装与配置mongoDB
mongodb·docker·容器
为什么这亚子3 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
阿尔帕兹4 小时前
构建 HTTP 服务端与 Docker 镜像:从开发到测试
网络协议·http·docker
ZHOU西口5 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
牛角上的男孩6 小时前
Istio Gateway发布服务
云原生·gateway·istio
JuiceFS7 小时前
好未来:多云环境下基于 JuiceFS 建设低运维模型仓库
运维·云原生
景天科技苑8 小时前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统
wclass-zhengge9 小时前
K8S篇(基本介绍)
云原生·容器·kubernetes