热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

FW配置一个私有的Docker仓库

思维 66 3月1日发布建分支 0 分支收藏 0 收藏思维 66 3月1日发布建分支 0 分支收藏 0 收藏思维 66 3月1日发布建分支 0 分支收藏 0 收藏思维 66 3月1

  技术分享思维 66 3月1日 发布

我们在本地开发时,如果内网能部署一台Docker服务器,无疑会极大的方便镜像的分享发布,有些私有镜像就是可以直接放到内网服务器上,省去了不必要的网络下载。

本课程需要配两个虚拟机,一台作为私有仓库部署,一台作为工作机。

//Docker仓库部署-虚拟机
docker-machine create -d virtualbox registry
//Docker工作机
docker-machine create -d virtualbox default

Setup1 安装并配置Registry

mkdir ~/docker-registry && cd $_
mkdir data

mate docker-compose.yml

registry:
 image: registry
 ports:
  - 127.0.0.1:5000:5000
 environment:
  REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
 volumes:
  - ./data:/data

执行

docker-compose up

Setp2配置Nginx容器

mkdir ~/docker-registry/nginx

mate docker-compose.yml

nginx:
 image: "nginx"
 ports:
  - 443:443
 links:
  - registry:registry
 volumes:
  - ./nginx/:/etc/nginx/conf.d:ro

registry:
 image: registry
 ports:
  - 5000:5000
 environment:
  REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
 volumes:
  - ./data:/data

mate ~/docker-registry/nginx/registry.conf

upstream docker-registry {
  server registry:5000;
}

server {
  listen 443;
  server_name registry.51yixiao.com;

  # SSL
  # ssl on;
  # ssl_certificate /etc/nginx/conf.d/domain.crt;
  # ssl_certificate_key /etc/nginx/conf.d/domain.key;

  # disable any limits to avoid HTTP 413 for large image uploads
  client_max_body_size 0;

  # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
  chunked_transfer_encoding on;

  location /v2/ {
    # Do not allow connections from docker 1.5 and earlier
    # docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents
    if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
      return 404;
    }

    # To add basic authentication
    # auth_basic "registry.localhost";
    # auth_basic_user_file /etc/nginx/conf.d/registry.password;
    # add_header ‘Docker-Distribution-Api-Version‘ ‘registry/2.0‘ always;

    proxy_pass                          http://docker-registry;
    proxy_set_header  Host              $http_host;   # required for docker client‘s sake
    proxy_set_header  X-Real-IP         $remote_addr; # pass on real client‘s IP
    proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;
    proxy_read_timeout                  900;
  }
}

执行

docker-compose up
//测试
curl http://www.registry.com:443
curl http://www.registry.com:5000

Setup3 设置HTTP验证

cd ~/docker-registry/nginx

htpasswd -c registry.password USERNAME
//USERNAME替换自己想添加的用户名,比如:markthink,如果要继续添加其他用户 
//htpasswd registry.password USERNAME

mate ~/docker-registry/nginx/registry.conf

 #To add basic authentication
 auth_basic "registry.localhost";
 auth_basic_user_file /etc/nginx/conf.d/registry.password;
 add_header ‘Docker-Distribution-Api-Version‘ ‘registry‘ always;

执行

cd ~/docker-registry
docker-compose up

curl http://www.registry.com:443/

<html>
<head><title>401 Authorization Requiredtitle>head>
<body bgcolor="white">
<center><h1>401 Authorization Requiredh1>center>
<hr><center>nginx/1.9.11center>
body>
html>

//使用HTTP验证访问-用上面配置的用户名和密码 
curl http://markthink:123456a@www.registry.com:443/

Setup4设置SSL验证

使用HTTP验证并不安全,因为连接没有加密传输,下面启用SSL配置

mate ~/docker-registry/nginx/registry.conf

  # SSL
  ssl on;
  ssl_certificate /etc/nginx/conf.d/domain.crt;
  ssl_certificate_key /etc/nginx/conf.d/domain.key;

为我们的域名购买一个证书或申请一个免费SSL证书

Setup5申请免费证书

沃通CA(WoSign CA) 
https://buy.wosign.com/free/#myorder
https://buy.wosign.com/FreeSSL.html

用申请好的证书更新nginx配置文件

Setup6配置域名

mate /etc/hosts
//宿主机添加
192.168.99.100 registry.51yixiao.com

Setup7测试

docker-machine start default
//重新分配IP
docker-machine regenerate-certs default

docker-machine ssh default
sudo -i
vi /etc/hosts
192.168.99.100 registry.51yixiao.com

docker login https://registry.51yixiao.com
//输入前面配置的用户和密码 登陆成功

Setup8从工作机推送镜像至服务器

eval $(docker-machine env default)
docker images
//为本地镜像打标签
docker pull busybox
docker tag busybox registry.51yixiao.com/busybox

//登陆服务器
docker login https://registry.51yixiao.com

//向服务器推送镜像
docker push registry.51yixiao.com/busybox

curl https://markthink:123456a@registry.51yixiao.com/v2/
//网页直接访问
https://markthink:123456a@registry.51yixiao.com/v2/
//退出服务器
docker logout https://registry.51yixiao.com

//查看镜像仓库已有的镜像
https://markthink:123456a@registry.51yixiao.com/v2/_catalog
Setup9从镜像服务器下载镜像至工作机
docker-machine start default
docker-machine regenerate-certs default
docker-machine ssh default
sudo -i
vi /etc/hosts
//添加IP地址
192.168.99.100 registry.51yixiao.com
//登陆服务器
docker login https://registry.51yixiao.com
//下载镜像
docker pull registry.51yixiao.com/busybox
//镜像改名
docker tag registry.51yixiao.com/busybox busybox

制作自己的证书

由于Dokcer目前不允许使用自签名的SSL证书,这一步比平时更加复杂,我们必须建立自己的系统,对我们自己的证书签名授权。

1.生成根密钥

cd ~/docker-registry/nginx
//生成新的根密钥
openssl genrsa -out devdockerCA.key 2048

2.生成根证书-Common Name填写证书签发者的域名 比如:www.trjcn.com

openssl req -x509 -new -nodes -key devdockerCA.key -days 10000 -out devdockerCA.crt

3.为nginx生成ssl密钥

//生成nginx域名的SSL证书
openssl genrsa -out domain.key 2048

我们的CA中心与要申请证书的服务器是同一个,否则应该是在另一台需要用到证书的服务器上生成

4.为nginx生成证书签署请求

//生成ssl_certificate_key证书 
openssl req -new -key domain.key -out dev-docker-registry.com.csr

需要注意的是Common Name必须输入我们要授予证书的服务器IP或域名

5.私有CA根据请求来签发证书

//签署证书申请
openssl x509 -req -in dev-docker-registry.com.csr -CA devdockerCA.crt -CAkey devdockerCA.key -CAcreateserial -out domain.crt -days 10000
``
此过程用到了前两步生成的根密钥和根证书

至此SSL证书制作完成,但是我们生成的证书没有已经的证书颁发机构验证,因此需要在Docker Registry中注册。

下面是基于centsos的部署过程

scp ./devdockerCA.crt registry:/home/docker/
docker-machine ssh registry
sudo -i
mkdir /usr/local/share/ca-certificates/docker-dev-cert
mv /home/docker/devdockerCA.crt /usr/local/share/ca-certificates/docker-dev-cert/
//update-ca-certificates

重启Docker daemon守护进程

docker-machine restart registry
//service docker restart

 
  • 链接

FW 配置一个私有的Docker仓库


推荐阅读
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了一种解析GRE报文长度的方法,通过分析GRE报文头中的标志位来计算报文长度。具体实现步骤包括获取GRE报文头指针、提取标志位、计算报文长度等。该方法可以帮助用户准确地获取GRE报文的长度信息。 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
author-avatar
yzh148448
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有