docker 私有仓库搭建

我们都知道maven私服,就是在服务器上有一块jar包共享区域,大家可以在共享仓库里面进行pull或者push。docker的私服差不多也是这个概念,只不过这块共享区域放的不是jar, 而是镜像文件,这样就能实现不同服务器都可以从这块共享区域上传或者拉取镜像,十分方便。我们知道的docker仓库有DockerHub, 还有aliyun提供的镜像服务,docker私服是用docker-registry技术实现的,所以先要下载docker-registry镜像并启动registry容器。

  • 下载 registry 镜像,从官网获取registry 最新镜像
1
docker pull registry:latest

      1.  简单启动registry,不需要TSL安全认证以及用户认证

  • ‐d:表示在后台运行该容器
  • ‐p 5000:5000:私有镜像仓库容器内部默认暴露的5000端口映射到宿主机的5000端口
  • ‐‐restart=always:表示容器启动后自动启动本地私有镜像仓库
  • ‐‐name registry:表示为生成的容器命名为registry
  • ‐v /usr/docker/registry:/var/lib/registry:表示将容器内的默认存储置/var/lib/registry中的数据挂载到宿主机的/usr/docker/registry目录下,这样当容器销毁后,在容器中/var/lib/registry目录下的数据会自动备份到宿主机指定目录
docker run ‐d ‐p 5000:5000 ‐‐restart=always ‐‐name registry  ‐v /usr/docker/registry:/var/lib/registry registry:latest

# 检测registry 是否启动
docker ps 

 

  •  配置 /etc/docker/daemon.json 文件, 由于registry默认是安全的,http 需要配置docker仓库地址
{
    "insecure-registries":[ "192.168.1.1"],
    "registry-mirrors": [
        "https://docker.mirrors.ustc.edu.cn/"
    ],
}
  • 操作docker
systemctl restart docker      # 配置文件生效需要重启docker服务

docker tag registry:latest 192.168.1.1:5000/registry:latest   # 镜像重命名。由于推送到本地私有镜像仓库的镜像名必须符合“仓库IP:端口号/repository”的形式

docker push 192.168.1.1:5000/registry:latest  # 通过push命令推送镜像到仓库 

      2.  推荐方式启动registry

  • 生成 CA 根证书以及根证书私钥.

       ‐x509:x509是一个自签发证书的格式,‐days 3650:表示证书有效期,docker.xxx.com:表示具体部署Docker Registry本地镜像仓库的域名(可以使用本地ip:端口),domain.key和domain.crt:就是生成的证书文件,rsa:2048:是证书算法长度


# 生成一个CA私钥
openssl genrsa -out /home/certs/ca.key 4096

# 创建一个自签名证书,有效期为10年
openssl req -x509 -new -nodes -key ca.key -subj "/CN=docker.xxx.com" -days 3650 -reqexts v3_req -extensions v3_ca -out /home/certs/ca.crt

或者

openssl req ‐x509 ‐days 3650 ‐subj '/CN=docker.xxx.com' ‐nodes ‐newkey rsa:2048 ‐keyout /home/certs/ca.key ‐out /home/certs/ca.crt
  •  生成用户密码
1
2
mkdir -p /opt/auth/   # 路径随意
htpasswd  -Bbn admin admin.123 > /opt/auth/htpasswd # admin 是用户名,admin.123是密码
  • 启动registry
1
2
3
4
5
6
7
8
9
docker run -p 5000:5000 --restart=always --name registry
-v /usr/docker/registry:/var/lib/registry
-v /opt/auth:/auth
-e "REGISTRY_AUTH=htpasswd"
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
-v /home/certs:/certs
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/ca.crt
-e REGISTRY_HTTP_TLS_KEY=/certs/ca.key -d 708bc6af7e5ed
  • 将证书复制到客户端的宿主机上
1
将刚才生成的证书 /home/certs/ca.crt 复制到客户端宿主机的/etc/docker/certs.d/192.168.1.1:5000/ca.crt
  • 登录docker 仓库
docker login -u admin -p admin.123 192.168.1.1:5000
  • 使用域名的方式访问docker 仓库

          如果想要使用域名的方式访问docker 仓库,那么修改/etc/hosts 文件,在文件末尾加上域名解析  docker.xxxx.com 192.168.1.1  。docker 推送镜像 docker  push 192.168.1.1:5000/registry:latest  或者 docker push docker.xxxx.com:5000/registry:latest 。如果不想要ip或者域名后面带上端口,那么将registry 启在80 或者443端口。

KPI 自签发证书说明: https://hex-py.github.io/2020/07/08/devops-2020-07-08-PKI-%E8%87%AA%E7%AD%BE%E5%8F%91%E8%AF%81%E4%B9%A6%E8%AF%B4%E6%98%8E/

posted @   味清欢  阅读(179)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示