快速创建Docker私有仓库

2024-01-02 11:29:40

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容器:

docker run -d -p 5000:5000 --restart=always --name registry2 registry:2

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

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为主机配置文件的路径

-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:

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文件:

ip mydockerhub.com
  1. 使用openssl工具生成私人证书文件:
 #创建文件夹
 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文件

/etc/docker/certs.d/myrepo.com:5000/ca.crt
  1. 启动带证书的Registry
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为密钥文件

推送拉取镜像

首先使用标签指定仓库:

语法:

docker tag <镜像名称>:<标签> <仓库名称>/<镜像名称>:<标签>

示例:

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

推送镜像

docker push registry.example.com:5000/myimage:latest

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

拉取镜像

docker pull registry.example.com:5000/myimage:latest

文章来源:https://blog.csdn.net/qq_36551991/article/details/135334576
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。