搭建 registry 本地私有仓库

Docker   2025-04-19 08:44   459   0  

一、安装 Docker

Centos 7 安装 Docker | 菠萝焖鸭的日常分享 (wxhnyfy.site)

二、拉取私有仓库镜像

拉取私有仓库镜像

docker pull registry

image.png

三、修改配置

修改 daemon.json 文件

vim /etc/docker/daemon.json

添加以下内容,用于让 Docker 信任私有仓库地址,保存退出。

{
    "insecure-registries": ["192.168.102.131:5000"]
}

重新加载配置信息及重启 Docker 服务。

# 重新加载某个服务的配置文件
sudo systemctl daemon-reload
# 重新启动 docker
sudo systemctl restart docker

三、创建私有仓库容器

创建私有仓库容器

mkdir /mydata
mkdir /mydata/docker_registry
docker run -di --name registry -p 5000:5000 -v /mydata/docker_registry:/var/lib/registry registry

-d:后台运行容器;  --name:为创建的容器命名;  -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个 -p 做多个端口映射;  -v:将容器内 /var/lib/registry 目录下的数据挂载至宿主机 /mydata/docker_registry 目录下;

image.png
打开浏览器输入:http://192.168.102.131:5000/v2/_catalog 看到 {"repositories":[]} 表示私有仓库搭建成功并且内容为空。
image.png

四、推送镜像至私有仓库

docker pull mysql:5.7.39
docker tag mysql:5.7.39 192.168.102.131:5000/mysql:5.7.39
docker images
docker push 192.168.102.131:5000/mysql:5.7.39

image.png
image.png
由于我们做了目录挂载,因此可以在宿主机 /mydata/docker_registry/docker/registry/v2/repositories 目录下查看。
image.png

五、配置私有仓库认证

私有仓库已经搭建好了,要确保私有仓库的安全性,还需要一个安全认证证书,防止发生意想不到的事情。所以需要在搭建私有仓库的 Docker 主机上先生成自签名证书。

1、创建证书存储目录

mkdir -p /usr/local/registry/certs

2、生成自签名证书

openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/registry/certs/domain.key -x509 -days 365 -out /usr/local/registry/certs/domain.crt

openssl req:创建证书签名请求等功能;  -newkey:创建 CSR 证书签名文件和 RSA 私钥文件;  rsa:2048:指定创建的 RSA 私钥长度为 2048;  -nodes:对私钥不进行加密;  -sha256:使用 SHA256 算法;  -keyout:创建的私钥文件名称及位置;  -x509:自签发证书格式;  -days:证书有效期;  -out:指定 CSR 输出文件名称及位置;

生成自签名证书
通过 openssl 先生成自签名证书,运行命令以后需要填写一些证书信息,里面最关键的部分是:Common Name (eg, your name or your server's hostname) []:192.168.102.131,这里填写的是私有仓库的地址。
image.png

3、生成鉴权密码文件

# 创建存储鉴权密码文件目录
mkdir -p /usr/local/registry/auth
# 如果没有 htpasswd 功能需要安装 httpd
yum install -y httpd
# 创建用户和密码
htpasswd -Bbn root 123456 > /usr/local/registry/auth/htpasswd

htpasswd 是 apache http 的基本认证文件,使用 htpasswd 命令可以生成用户及密码文件

image.png

4、创建私有仓库容器

docker run -di --name registry -p 5000:5000 \
   -v /mydata/docker_registry:/var/lib/registry \
   -v /usr/local/registry/certs:/certs \
   -v /usr/local/registry/auth:/auth \
   -e "REGISTRY_AUTH=htpasswd" \
   -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
   -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
   -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/*.crt \
   -e REGISTRY_HTTP_TLS_KEY=/certs/*.key \
   registry

image.png

5、推送镜像至私有仓库失败

先给镜像设置标签 docker tag local-image:tagname new-repo:tagname;
再将镜像推送至私有仓库 docker push new-repo:tagname。

docker pull nginx
docker tag nginx:latest 192.168.102.131:5000/nginx:latest
docker images
docker push 192.168.102.131:5000/nginx:latest

如果直接 push 镜像肯定会失败,并且出现 no basic auth credentials 的错误,这是因为我们没有进行登录认证。
image.png

6、登录账号

通过 docker login 命令输入账号密码登录私有仓库

docker login 192.168.102.131:5000

image.png

7、推送镜像至私有仓库成功

再次 push 镜像,发现已经可以推送成功了
image.png

8、退出账号

通过 docker logout 命令退出账号。

docker logout 192.168.102.131

image.png

六、域名映射

本地需要域名访问,需要修改hosts文件

1、添加hosts解析

cat >> /etc/hosts << EOF
192.168.102.131 images.wxhntmy.com
EOF

modprobe br_netfilter

image.png

2、修改配置

vim /etc/docker/daemon.json
{
    "insecure-registries": [
      "192.168.102.131:5000",
      "images.wxhntmy.com:5000"
    ]
}
# 重新加载某个服务的配置文件
sudo systemctl daemon-reload
# 重新启动 docker
sudo systemctl restart docker

3、生成新的自签名证书

openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/registry/certs/images.wxhntmy.com.key -x509 -days 365 -out /usr/local/registry/certs/images.wxhntmy.com.crt

image.png

4、创建新的私有仓库容器

docker rm -f registry
docker run -di --name registry -p 5000:5000 \
   -v /mydata/docker_registry:/var/lib/registry \
   -v /usr/local/registry/certs:/certs \
   -v /usr/local/registry/auth:/auth \
   -e "REGISTRY_AUTH=htpasswd" \
   -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
   -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
   -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/images.wxhntmy.com.crt \
   -e REGISTRY_HTTP_TLS_KEY=/certs/images.wxhntmy.com.key \
   registry

image.png

5、推送镜像至私有仓库

docker login images.wxhntmy.com:5000
docker tag nginx:latest images.wxhntmy.com:5000/nginx:latest
docker images
docker push images.wxhntmy.com:5000/nginx:latest

image.png
Windows在hosts文件加解析,就可以直接在浏览器通过域名访问了

打开浏览器输入:https://images.wxhntmy.com:5000/v2/_catalog,会提示输入用户名密码

image.png
image.png


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。