快速创建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
相关推荐
VinciYan3 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
tntlbb4 小时前
Ubuntu20.4 VPN+Docker代理配置
运维·ubuntu·docker·容器
Gabriel_liao4 小时前
Docker安装Neo4j
docker·容器·neo4j
有一个好名字5 小时前
zookeeper分布式锁模拟12306买票
分布式·zookeeper·云原生
Anna_Tong7 小时前
云原生大数据计算服务 MaxCompute 是什么?
大数据·阿里云·云原生·maxcompute·odps
豆豆豆豆变8 小时前
Docker轻量级可视化工具Portainer
docker·容器·自动化运维
花晓木8 小时前
k8s etcd 数据损坏处理方式
容器·kubernetes·etcd
运维&陈同学8 小时前
【模块一】kubernetes容器编排进阶实战之基于velero及minio实现etcd数据备份与恢复
数据库·后端·云原生·容器·kubernetes·etcd·minio·velero
花晓木8 小时前
k8s备份 ETCD , 使用velero工具进行备份
容器·kubernetes·etcd
大熊程序猿8 小时前
xxl-job docker 安装
运维·docker·容器