如何在Linux上搭建本地Docker Registry并实现远程连接
在Linux上搭建本地Docker Registry并实现远程连接步骤如下:
安装Docker
更新软件库索引:sudo apt-get update - 此命令用于同步Ubuntu软件源服务器上的软件包列表,确保系统能够获取到最新的软件版本信息,为后续安装Docker做好准备。
安装必要包:sudo apt-get install apt-transport-https ca-certificates curl software-properties-common - 这些依赖包分别提供HTTPS传输支持(apt-transport-https)、证书认证(ca-certificates)、网络请求工具(curl)和软件源管理工具(software-properties-common),是安装Docker的基础环境组件。
加入Docker官方GPG密钥:curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - - 通过curl工具下载Docker官方的GPG公钥并添加到系统信任列表,用于验证Docker软件包的完整性和安全性,防止恶意软件注入。
加入Docker软件库:sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $

le" - 将Docker官方软件源添加到系统的软件仓库列表中,确保后续能够直接从官方源安装经过验证的Docker版本,而非Ubuntu默认源中的旧版本。
再次更新软件库索引:sudo apt-get update - 添加Docker软件源后需要重新更新索引,使系统识别到新添加的软件仓库中的可用软件包,确保Docker安装包能够被正确检索。
安装Docker CE:sudo apt-get install docker-ce - 安装Docker社区版(Community Edition),这是Docker官方提供的免费版本,包含了容器运行时、Docker引擎等核心组件,安装完成后Docker服务会自动启动。
搭建Docker Registry
拉取Docker Registry镜像:docker pull registry:2 - 从Docker Hub拉取官方的Registry镜像(版本2),这是搭建本地私有仓库的基础镜像,默认会下载最新的稳定版本2.x系列。
创建本地目录存储Registry数据(可选但推荐):sudo mkdir -p /opt/registry/data - 使用-p参数确保递归创建目录,将Registry的镜像数据存储在宿主机的/opt/registry/data路径下,避免容器重启或删除时数据丢失,实现数据持久化管理。
运行Registry容器:sudo docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry/data:/var/lib/registry registry:2 - -d参数表示后台运行容器,-p指定端口映射,--restart=always确保容器随系统自动启动,--name设置容器名称,-v实现宿主机目录与容器内数据目录的挂载。
此命令启动名为“registry”的容器,将宿主机5000端口映射到容器5000端口,默认不加密,仅本地访问。
配置远程连接
若需远程连接且Registry使用自签名证书,需对每台远程连接Registry的机器的Docker Daemon进行配置以信任自签名证书:
创建证书存放目录:sudo mkdir -p /etc/docker/certs.d/myregistry.com:5000(将“myregistry.com:5000”替换为Registry实际域名和端口) - Docker守护进程会自动在该目录下查找CA证书,目录命名格式必须为“域名:端口”,确保与Registry的访问地址严格对应。
复制自签名证书到上述目录:sudo cp certs/domain.crt /etc/docker/certs.d/myregistry.com:5000/ca.crt - 需将自签名证书文件重命名为ca.crt并放置到指定目录,Docker会将该证书视为可信根证书,用于验证Registry的TLS连接合法性。
重启Docker服务:sudo service docker restart - 使Docker守护进程重新加载配置并应用证书信任设置,对于systemd系统,也可使用sudo systemctl restart docker命令。
若Registry部署在内网环境中,可使用内网穿透工具(如cpolar)实现公网访问:
安装cpolar:按照cpolar官方文档进行安装 - cpolar是一款支持HTTP/HTTPS协议的内网穿透工具,提供免费版和付费版,可通过其官网获取对应Linux系统的安装脚本或二进制文件。
创建隧道:在cpolar的Web UI管理界面中创建隧道,将本地5000端口映射到公网地址 - 隧道类型选择“HTTP”,本地地址填写127.0.0.1:5000,端口类型可选择临时端口(免费版)或固定端口(付费版),设置完成后保存配置。
获取公网地址:隧道创建成功后,在cpolar的在线隧道列表中查看生成的公网访问地址
使用公网地址访问Registry:
标记镜像:docker tag your-image myregistry.cpolar.io:5000/your-image(将“myregistry.cpolar.io”替换为实际的cpolar域名) - 镜像标记需遵循“Registry地址/镜像名称:标签”格式,其中Registry地址必须与cpolar生成的公网域名一致,否则推送时会提示无法连接到仓库。
推送镜像:docker push myregistry.cpolar.io:5000/your-image
拉取镜像:docker pull myregistry.cpolar.io:5000/your-image
注意事项:
使用自签名证书时,需确保Docker守护进程信任该证书,否则会遇到TLS握手错误 - 常见错误提示为“x509: certificate signed by unknown authority”,解决方法包括正确配置证书目录或在Docker配置文件中添加insecure-registries(不推荐生产环境使用)。
确保防火墙规则允许外部访问5000端口 - 对于UFW防火墙,可使用sudo ufw allow 5000/tcp命令开放端口;对于iptables,可使用sudo iptables -A INPUT -p tcp --dport 5000 -j ACCEPT命令,同时需检查云服务器安全组规则(如有)。
若希望避免每次配置新机器都需要复制证书,可考虑使用权威CA签发的证书 - 如Let's Encrypt提供免费SSL证书,通过Certbot工具可自动申请和续期,配置后所有客户端无需手动添加信任,适用于生产环境或多客户端场景。
更多推荐



所有评论(0)