本地搭建docker仓库

现在dockerhub访问经常出现timeout的问题,导致每在一台新的机器上拉取镜像要么timeout要么需要自己架梯子,非常麻烦,而且下载次数太多了还会受限制。所以希望自己在一台服务上搭建一个私有仓库,其余的机器能够通过私有仓库来进行镜像的拉取推送。

生成拉取docker registry镜像

docker提供了一个镜像registry用来搭建本地镜像。首先先本地拉取此镜像:

docker pull registry

 生成自签名证书

在当前路径创建一个目录用来存放证书文件

mkdir -p certs
cat << EOF > ssl.conf
[ req ]
prompt             = no
distinguished_name = req_subj
x509_extensions    = x509_ext

[ req_subj ]
CN = Localhost

[ x509_ext ]
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid,issuer
basicConstraints       = CA:true
subjectAltName         = @alternate_names

[ alternate_names ]
DNS.1 = localhost
IP.1  = 10.0.x.x
EOF

注意:上文中DNS.1可以换为其他的域名,IP地址换为自己本机的IP

接下来生成证书

openssl req -config ssl.conf -new -x509 -nodes -sha256 -days 365 -newkey rsa:4096 -keyout ./certs/server-key.pem -out ./certs/server-crt.pem

配置用户认证

为了用户的安全可以给私有仓库配置用来登录的账号密码。

mkdir auth
htpasswd -Bbn testuser testpassword > ./auth/htpasswd
#生成后可以用cat查看
cat ./auth/htpasswd

启动registry镜像

包含签名证书的本地目录./certs

挂载包含持久存储的本地目录./registry

挂载用户密码登录的本地目录./auth

注意:需要保证这些目录都存在,若不存在则自行创建

docker run -d \
    -p 5001:5000 \
    --name registry \
    --restart=always \
    -v ./registry:/var/lib/registry \
    -v ./auth:/auth \
    -v ./certs:/certs \
    -e REGISTRY_COMPATIBILITY_SCHEMA1_ENABLED=true \
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server-crt.pem \
    -e REGISTRY_HTTP_TLS_KEY=/certs/server-key.pem \
    -e REGISTRY_AUTH=htpasswd \
    -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
    -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
    registry

 登录测试

此时使用

docker login -u testuser -p testpassword localhost:5001

是可以登录的,但是如果将localhost换为自己的ip则无法登录成功,因为还没有把自签名的证书加入本机信任。

签名证书加入本机信任

Ubuntu系统:

手动添加证书方式

sudo cp ./certs/server-crt.pem /usr/local/share/ca-certificates/
sudo cat /usr/local/share/ca-certificates/server-crt.pem >> /etc/ssl/certs/ca-certificates.crt

检查是否将证书server-crt.pem 添加到信任列表中

ls /etc/ssl/certs/

若不存在还可以手动创建软连接

sudo ln -s /usr/local/share/ca-certificates/server-crt.pem /etc/ssl/certs/

使用本机ip登录测试

docker login -u testuser -p testpassword 10.x.x.x:5000

Centos系统:

sudo cp ./certs/server-crt.pem /etc/pki/ca-trust/source/anchors/

sudo cat /etc/pki/ca-trust/source/anchors/server-crt.pem >> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt


sudo update-ca-trust

sudo systemctl restart docker

完成后登录测试。

推送镜像测试:

给先有的镜像打标签:

 docker tag  registry:latest 10.20.x.x:5001/registry:latest

推送打好的镜像

 docker push 10.20.x.x:5001/registry

其他机器使用该私有仓库

其他机器如果想使用该私有仓库,首先需要确保该机器能够访问私有仓库所在的ip,然后将私有仓库的证书加入本机信任之后就可以使用了。加入本机信任的方式参考上述步骤。

注意:docker中添加代理的时候可能会出现net/http: TLS handshake timeout问题,主要问题是在访问私有仓库的时候会转到代理的服务并不会访问到5000端口,因此需要在代理配置的no-proxy中设置好私有仓库的端口

解决办法:

sudo vi /etc/docker/daemon.json

 
{
  "experimental": true,
    "proxies": {
      "http-proxy": "http://127.0.0.1:7890",
      "https-proxy": "http://127.0.0.1:7890",
      "no-proxy": "127.0.0.0/8,10.10.101.xx:5001"
    }
}
sudo systemctl daemon-reload
sudo systemctl restart docker

### 如何搭建配置Docker本地私有Registry镜像仓库 #### 下载并运行官方Registry镜像 为了建立一个基本的私有Docker Registry,可以从Docker Hub获取官方提供的`registry`镜像。这一步骤通过命令行完成: ```bash docker pull registry:latest ``` 此操作会下载最新版本的`registry`镜像至本地环境[^3]。 #### 启动Registry服务实例 接着,利用之前拉取下来的镜像来启动一个新的容器作为私有的Registry服务器,并指定必要的参数以确保其能够长期稳定运行以及支持删除功能: ```bash docker run -d \ -p 5000:5000 \ --restart always \ --name registry \ -v /opt/registry:/var/lib/registry \ -e REGISTRY_STORAGE_DELETE_ENABLED="true" \ registry:latest ``` 上述指令设置了端口映射(`-p`)使得外部网络可以访问该服务;启用了自动重启策略(`--restart`)保障稳定性;挂载了一个卷用于存储实际的数据文件(-v),并且开启了允许删除的功能[-e](REGISTRY_STORAGE_DELETE_ENABLED)。 #### 测试与验证 一旦成功部署了私有Registry之后,就可以尝试推送一些自定义构建好的镜像上去做初步测试。在此之前可能还需要调整客户端机器上的Docker守护进程配置以便能顺利连接到新设立的服务地址。具体做法涉及编辑daemon.json文件加入insecure-registries字段指明非HTTPS协议下的目标主机名或IP加上对应的监听端口号组合而成的位置信息[^4]。 #### 增强安全性(可选) 考虑到安全因素,在生产环境中通常建议为私有Registry配备认证机制及SSL/TLS加密传输通道。对于前者来说,可以通过集成HTPasswd或其他形式的身份验证插件实现;而后者则需准备好数字证书材料后按照指引进行相应设置[^5]。 #### 图形化管理界面(推荐) 尽管原生的Docker Registry并不自带GUI组件,不过借助于Portainer、Harbor这类第三方解决方案同样可以获得直观易用的操作面板来进行日常维护工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值