docker应用篇(3):搭建Docker私服镜像中心

news/2025/2/26 6:18:32

文章目录

  • 前言
  • 如何搭建私有仓库
    • 第一节 创建无认证私服
      • 1. 创建私服
      • 2. 测试
    • 第二节 创建安全私服
      • 1. 创建私服(有认证)
      • 2. 测试
      • 3. 退出登录
  • 关于错误
    • 问题1: 登录失败x509: certificate relies on legacy Common Name field

前言

Dockerhub是docker官网的仓库,国内的加载速度比较慢。搭建一个私有的镜像仓库,提高速度,保存私有的镜像文件。
docker提供了registry 镜像用于私有仓库的搭建。

如何搭建私有仓库

第一节 创建无认证私服

1. 创建私服

  1. 启动registry创建私有仓库 ,可以访问http://106.13.2.249:5000/v2/_catalog。此时仓库没有任何内容,。
#启动私服并挂载镜像文件
docker run -di --name myregistry -p 5000:5000 -v /home/docker_registry:/var/lib/registry registry

在这里插入图片描述

2. 测试

  1. 修改配置
vim  /etc/docker/daemon.json

添加信任的私服

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

在这里插入图片描述
2. 重新加载配置和重启

# 重新加载某个服务的配置文件
systemctl daemon-reload
# 重新启动 docker
systemctl restart docker
  1. 拉取一个镜像用来测试
#拉取镜像用来测试
docker pull hello-world

在这里插入图片描述
2. 推送镜像到私有仓库,此时再次刷新页面,可以看到镜像里新增了刚刚push的镜像。

#标记镜像
docker tag hello-world 106.13.2.249:5000/myhello-world:1.0
#推送镜像到私有仓库
docker push 106.13.2.249:5000/myhello-world:1.0

在这里插入图片描述

在这里插入图片描述

第二节 创建安全私服

前面我们配置了一个不需要安全认证的私有仓库。但是生产环境中,肯定要保证安全,需要安全认证。

1. 创建私服(有认证)

  1. 创建目录 用于存放证书
mkdir -p /usr/local/registry/certs
  1. 生成证书,按照要求输入内容
openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/registry/certs/domain.key -x509 -days 365 -out /usr/local/registry/certs/domain.crt

在这里插入图片描述

  1. 生成鉴权文件

(1) 创建目录

#创建目录
mkdir -p /usr/local/registry/auth

(2) 安装htpasswd(如果未安装htpasswd,请先安装htpasswd)

  • centos安装htpasswd
yum -y  install httpd
  • ubuntu安装htpasswd
sudo apt-get install apache2-utils

(3) 生成用户名和密码写入到文件

# 创建用户和密码hello/123456
htpasswd -Bbn hello 123456 > /usr/local/registry/auth/htpasswd

如需要了解htpasswd相关的命令,请见:htpasswd的使用

  1. 创建仓库(前面章节已经创建过了的话,需要删除已经创建的容器)
#删除已经创建的容器
docker rm -f myregistry
#创建registry
docker run -di --name myregistry -p 5000:5000 \
   -v /home/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/domain.crt \
   -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
   registry

在这里插入图片描述

2. 测试

真实场景,镜像服务器和docker客户端肯定不在同一台服务器,所以下面的操作在另一台服务器(docker客户端)执行。(当然也可以在同一台机测试)

  1. 添加信任的私服
  2. 修改配置
vim  /etc/docker/daemon.json

添加信任的私服

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

在这里插入图片描述

  1. 重新加载配置和重启
# 重新加载某个服务的配置文件
systemctl daemon-reload
# 重新启动 docker
systemctl restart docker
  1. 拉取一个镜像用来测试
#拉取镜像用来测试
docker pull hello-world

在这里插入图片描述
4. 推送镜像到私有仓库,此时发现push失败,提示需要认证,表示我们的镜像服务器需要登录。

#标记镜像
docker tag hello-world 106.13.2.249:5000/myhello-world:1.0
#推送镜像到私有仓库
docker push 106.13.2.249:5000/myhello-world:1.0

在这里插入图片描述

  1. 登录服务器,输入创建的用户名和密码
docker login 106.13.2.249:5000

在这里插入图片描述

  1. 再次执行push操作,可以push成功
#推送镜像到私有仓库
docker push 106.13.2.249:5000/myhello-world:1.0

在这里插入图片描述

  1. 拉取刚刚创建的镜像
#拉取镜像前,可以先删除这个镜像,避免使用本地镜像
docker rmi hello-world
#拉取刚刚推送到服务器的镜像
docker run 106.13.2.249:5000/myhello-world:1.0

在这里插入图片描述

3. 退出登录

docker logout 106.13.2.249:5000

关于错误

问题1: 登录失败x509: certificate relies on legacy Common Name field

Error response from daemon: Get "https://106.13.2.249:5000/v2/": x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0

在这里插入图片描述
解决方案:
请检查是否添加私服信任,并重启docker。按照文中测试demo流程重新执行一遍。
在这里插入图片描述


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

相关文章

git如何移除某文件夹的版本控制

目录结构如下 projectbinlibsrc...... 执行如下的操作 git add . git commit -m "add bin/ lib/ src/" git push origin master突然发现原来 lib 目录不需要提交到版本库,但是现在远程已经存在该目录,what should I do.(吐出去的东西还能收回来吗&#…

docker应用篇(4):搭建私服镜像中心docker-registry和docker-registry-web

文章目录前言第一节、创建镜像中心第二节、测试完整流程(1) 创建账号(2) 推送镜像(3) 退出登录第三节、扩展内容1. 多个私服的配置前言 搭建一个私服docker镜像中心,并且需要安全认证和后台管理。 本文基于mkuchin/docker-registry-web提供的案例来搭建服务。 htt…

iOS在xib或storyboard里为控件添加圆角、外框和外框颜色

如果要在xib和storyboard里为控件添加圆角和外框宽度,只要这样做就可以: layer.borderWidth 设置外框宽度属性 layer.cornerRadius 设置圆角属性 只要为属性设置value值就可以了。 当然修改完xib里看是看不出来的,要运行才看得到,…

docker应用篇(5):详解镜像中心的管理者docker-registry-web

文章目录前言认识和使用docker-registry-web1. 修改密码2. 认识角色3. 查看事件4. 新建角色并控制访问权限前言 docker-registry-web管理者docker镜像中心,本章详解docker-registry-web的使用。 如何搭建docker-registry-web,请见:docker应用篇(4):搭建…

Windows上Python2.7安装Scrapy过程

需要执行: pip install scrapy pip install requests 在Windows下用pip安装Scrapy报如下错误,看错误提示就知道去http://aka.ms/vcpython27找解决方法了 error: Microsoft Visual C 9.0 is required (Unable to find vcvarsall.bat). Get it from http:/…

HTTP协议、Ajax请求

今天这篇文章呢,主要讲的就是关于HTTP协议、Ajax请求以及一些相关的小知识点。虽然内容不算多,可是是很重点的东西~ HTTP协议 1. http:超文本传输协议。简单、快速、灵活、无状态、无连接。2. url:统一资源定位符。 组成部分:协议名://主…

如何进行Android、IOS APP的自动化测试—东舟自动化测试解决方案

金融领域移动端自动化测试解决方案—— 测试能力建设、实现敏捷测试、缩短测试周期银行们的优步(Uber)时刻即将到来,银行的实体网点将被淘汰,移动设备将成为客户和银行之间的主要沟通“中介”。花旗银行全球视角及解决方案部随着智…

docker错误:docker: Error response from daemon: Get “https://xxx:5000/v2/“: http: server gave

错误信息 docker: Error response from daemon: Get “https://106.13.2.249:5000/v2/”: http: server gave HTTP response to HTTPS client. 解决办法: 修改配置 vim /etc/docker/daemon.json添加你的docker私服的ip和端口, 单个私服务 { "insecure-registries&…