docker搭建私有仓库、自签发证书、登录认证

news/2024/11/9 14:05:50

docker官方文档对如何搭建私有仓库说的已经很详细了,我在这里主要介绍一下使用自签发证书如何搭建私有仓库并认证成功。

假设registry的域名为:registry.domain.com。

生成自签发证书。

> mkdir -p certs
> openssl req -newkey rsa:2048 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt

执行以上命令,生成证书,Common Name那里要输入我们registry的域名,生成的证书只对该域名有效。其他的可以任意填。生成后可以在certs目录下查看到证书。

clipboard.png

生成鉴权密码文件

注意使用时username替换为你自己的用户名,password替换为你自己的密码。

$ mkdir auth
$ docker run --entrypoint htpasswd registry:2 -Bbn username password  > auth/htpasswd
$ ls auth

启动Registry

docker run -d -p 5000:5000 --restart=always --name registry \
   -v `pwd`/auth:/auth \
   -e "REGISTRY_AUTH=htpasswd" \
   -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
   -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
   -v `pwd`/data:/var/lib/registry \
   -v `pwd`/certs:/certs \
   -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
   -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
   registry:2
199ad0b3591fb9613b21b1c96f017267f3c39661a7025d30df636c6805e7ab50

如果没有registry镜像会自动下载然后启动,可以使用阿里云提供的加速器。
现在完成了registry服务器的搭建,可以尝试pull image到registry:

$ docker pull busybox  // 从官方拉去镜像作为我们的测试镜像
$ docker tag busybox:latest registry.domain.com:5000/busybox:latest // 为busybox打tag,tag的前缀一定要为我们registry服务器的域名。
$ docker push registry.domain.com:5000/busybox:latest  // 将镜像推送到我们的registry服务器

如果直接这样去push,会失败,并且出现 no basic auth credentials的错误,这是因为我们没有进行登录认证。

$ docker login registry.domain.com:5000
$ Username: username
$ Password: password
WARNING: login credentials saved in ~/.docker/config.json
Login Succeeded

登录成功后再次执行push操作,会出现x509: certificate signed by unknown authority的报错。这是因为docker client认为server传输过来的证书的签署方是一个unknown authority(未知的CA),因此验证失败。我们需要让docker client安装我们的CA证书:

$ sudo mkdir -p /etc/docker/certs.d/registry.domain.com:5000
$ sudo cp certs/domain.crt /etc/docker/certs.d/registry.domain.com:5000/ca.crt
$ sudo service docker restart //安装证书后,重启Docker Daemon

再次执行push操作,成功推送:

$ docker push registry.domain.com:5000/busybox:latest
The push refers to a repository [registry.domain.com:5000/busybox]
0271b8eebde3: Pushed
latest: digest: sha256:3571ca1b0e90e159de4fc07b3bf94ef189a0645314704f629204adb7035ecf45 size: 527

这里需要注意:如果使用自签署的证书,那么所有要与Registry交互的Docker主机都需要安装registry.domain.com的ca.crt(domain.crt)。但如果你使用知名CA,这一步也就可以忽略。如果是MacOS版的docker也是一样的操作,尽管它连/etc/docker都不存在,一样去创建目录就好了。只是macOS的用户想要认证生效需要执行额外的命令:

$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /etc/docker/certs.d/registry.domain.com:5000/ca.crt

此时在mac上执行docker login才可成功。


http://www.niftyadmin.cn/n/3036766.html

相关文章

中国互联网公司员工平均年龄出炉

作为当下最吃香的行业之一,互联网行业聚集了大量年轻、高收入群体,平均年龄仅二三十岁,非常“朝阳”。 日前,脉脉数据研究院发布了一份调查,对目前中国大型互联网企业员工的平均年龄进行了统计排序,结果显…

mybatis 一对多

学科 package cn.itcast.javaee.mybatis.one2many;import java.util.ArrayList; import java.util.List;/*** 学科(单方)* author AdminTC*/ public class Grade {private Integer id;private String name;private List<Student> studentList new ArrayList<Student&…

【前端vue开发】vue开发输入姓名,电话,公司表单提交组件

<template><div id"parti-info"><div><span>您的姓名&#xff1a;</span><input v-model"username" type"text" placeholder"请输入您的姓名" ></div><div><span >手机号码&am…

centos挂载windows共享文件夹

设&#xff1a;装有windows系统的主机ip为172.31.32.33的d:\test\share_dir\的共享名为123 , 系统中存在一用户zkqqzkzkq,密码CcCc&#xff1b;装有centos的系统的主机上&#xff0c;需把windows主机的share_dir挂载到/mnt/中。则有&#xff1a;在centos系统中执行mount -t cif…

苹果将于18日举行新品发布会

值得一提的是&#xff0c;苹果的最新消息也使得下周头两天的科技圈更加热闹。除了苹果外&#xff0c;谷歌也将在当地时间下周二举办大型Pixel活动。至于会不会被苹果“炸场”抢了风头&#xff0c;还是要看具体推出的产品。 综合市场传闻&#xff0c;可信度较高的推测包括苹果将…

嗯哼

import turtleturtle.speed(10)colors[#4876FF,#CDC1C5,#00FFFF,#00FF7F,#EEA2AD,#B4EEB4,#EEAEEE,#D3D3D3,#E0FFFF,#DDA0DD,#C1CDC1,#00FA9A] for i in range(200): turtle.pencolor(colors[i%12]) turtle.forward(i) turtle.left(46) turtle.done()转载于:https://www.cnblog…

WIN7下无线不能启动(错误1075,1068)的解决方案!!!

已经很久没写过东西了&#xff0c;大概3-4年了吧。因为一直也没再学过什么东西&#xff0c;另外也没有什么好的安全来写。 今天遇到一个挺好玩的事情跟大家分享一下。 昨天&#xff0c;有个老师&#xff0c;找我&#xff0c;说无线不能用了。我想应该很简单&#xff0c;就让他拿…

CTO、首席架构师、技术总监、研发Leader、高级程序员的职责

一、高级程序员 如果你是一个刚刚创业的公司&#xff0c;公司没有专职产品经理和项目经理&#xff0c;你就是公司的产品经理&#xff0c;你如果对你现在的开发员能力不满&#xff0c;那么你只需要的是一个高级程序员。 你定义功能、你做计划推进和管理&#xff0c;他可以带1-…