弄了一天,在网上查了很多资料,感觉都好复杂好复杂,一步一步踩坑踩出来就好了。

服务器:阿里云(香港)

环境:CentOS Linux release 7.4.1708 (Core)

Docker:1.13.1
 
一、使用https的nginx
 
因为已经在阿里云有了域名,申请了免费的CA证书,具体的申请方法参考阿里云的文档就行
 
1、在nginx的配置目录下创建cert免费,存放秘钥,我的是在/usr/local/nginx/conf目录下
mkdir cert

2、把在阿里提供的证书全部拷贝,放到此目录

 
3、修改nginx的配置文件 添加有关CA证书的内容
 
1)在nginx.conf配置文件中的http{ } 段添加
include /usr/local/nginx/conf/conf.d/*;
 
2)创建conf.d文件夹
mkdir /usr/local/nginx/conf/conf.d
 
3)在conf.d下创建docker.conf配置文件
upstream docker-registry{
server localhost:;
} server {
listen ;
listen ssl; server_name www.lereun.com; charset utf8;
ssl_certificate cert/.pem;
ssl_certificate_key cert/.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM- SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1. TLSv1.;
ssl_prefer_server_ciphers on; location / { root html;
index index.html; proxy_pass http://docker-registry;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size ;
chunked_transfer_encoding on;
}
}
 
这段配置里需要注意的是:
 
1) proxy_pass http://docker-registry; 这里的反向代理,一定要看自己的配置文件nginx.conf,对localhost:5000是否支持https;若不支持那么只能写http://docker-registry; 这个地方弄了好久,一直报502,所以一定要注意
 
2)client_max_body_size 0; #表示客户端连接的最大请求实体大小;为0表示不限制
     chunked_transfer_encoding on; #响应时是否启用chunked编码
 
这里是不设置的话,等上传镜像的时候,会报错:
 
 
4)重启nginx
 
/usr/local/nginx/sbin/nginx -s reload
 
5)测试,使用https访问是可以的
 
 
 
二、部署Registry
 
1、先搜索docker的registry镜像,然后拉取下来
 
docker search registry
 
 
2、拉取registry镜像
 
docker pull docker.io/registry
 
 
3、启动一个容器
 
docker run -v 宿主机目录:容器目录
 
docker run -d -v /opt/registry:/var/lib/registry -p : --restart=always --name registry registry
 
-d 表示后台进程
 
-v /opt/registry:/var/lib/registry registry服务默认会将上传的镜像保存到/var/lib/registry,将该目录挂载到/opt/registry,这样就可以将镜像保存在/opt/registry目录
 
 
 
 
4、修改镜像的tag
 
docker tag用法:
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
 
docker tag centos www.lereun.com/centos

 
5、把打了tag的镜像上传到自己的Docker Registry
 
docker push用法:
docker push [OPTIONS] NAME[:TAG]
 
docker push www.lereun.com/centos

 
可以根据我们挂在的目录查看,里面有已经上传的镜像
 
 
 
6、从另外的客户端测试从自己刚刚搭建的Docker Registry拉取刚刚上传的镜像
 
1)查看仓库中的镜像情况
 
curl www.lereun.com/v2/_catalog
 
 
2)测试能否拉下来
 
从服务本机拉取:
 
 
从其他客户端拉取,报这个错:
 
 
解决办法:修改客户端的配置文件 vim /etc/sysconfig/docker
 
other_args="--insecure-registry www.lereun.com:5000"
 
然后,再一次尝试,就可以了
 
 
7、其他报错
 
启动的容器的时候如果报错
 
 
看他提示的要把容器的删除,才能启动
 
 
 
三、使用身份验证的功能
       如果是自己公司内部使用的话,前两步基本上可以了,但是我如果放在外网,不做认证措施的话,那么谁都可以下载,谁都可以上传,所以得把身份验证操作加上,这又是一个大坑,花了一个晚上加一个上午的时候
 
1、安装httpd工具
yum -y install httpd-tools
 
2、创建存放密码文件的目录
mkdir /etc/docker/auth
 
3、生成账号密码文件
htpasswd -Bbn username password >> /etc/docker/auth/registry.htpasswd
 

4、启动registry容器,这里在第二部的基础上,需要先把原来的容器删掉再启动

 
先停掉容器、再删除
docker stop 560445a00194
docker rm 560445a00194
 
 
6、启动registry容器(这一串看着很多,实则很简单,本来我也以为很难,不想看但是最终还是得看,很容易理解很容易理解)

docker run -d -p : --restart=always --name registry \
-v /opt/registry:/var/lib/registry \
-v /etc/docker/auth:/auth \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.htpasswd \
-v /etc/docker/certs.d/registry:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/.pem \
-e REGISTRY_HTTP_TLS_KEY=/certs/.key \
registry
说明:
1)-v /opt/registry:/var/lib/registry 镜像目录上传的位置挂载
2)-v /etc/docker/auth:/auth 将宿主机的/etc/docker/auth挂载在容器的/auth下
3)-e REGISTRY_AUTH=htpasswd 告诉Registry容器使用htpasswd模式验证
4)-e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" 指定注册中心领域
5)-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.htpasswd 告诉容器账号密码文件的路径,因为把宿主机的目录挂载在容器的目录上了,这样就可以直接访问这个目录里的文件(这句话懂了的话,这段很容易就懂了
6)-v /etc/docker/certs.d/registry:/certs CA认证的目录挂载
7)-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/214501762340334.pem 说明秘钥的路径
8)-e REGISTRY_HTTP_TLS_KEY=/certs/214501762340334.key 说明公钥的路径
 
8、进行push,报错没登录 (这里要注意的是tag的时候要把端口号带上,登录也一样,push也一样,要不然会出现一大堆稀奇古怪的错误
 
 
 
9:push之前需先login登录
 
 
 
10)再上传就可以了
 
 
 
上传成功
 
 

搭建自己的Docker registry(五)的更多相关文章

  1. 在CentOS 6上搭建私有的Docker Registry

    在CentOS 6上搭建私有的Docker Registry v2Registry概念 :Registry是一个无状态的, 高可扩展的服务器端应用程序, 用于存储和分发Docker Image. 依赖 ...

  2. Docker系列08—搭建使用私有docker registry

    本文收录在容器技术学习系列文章总目录 1.了解Docker Registry 1.1 介绍 registry 用于保存docker 镜像,包括镜像的层次结构和元数据. 启动容器时,docker dae ...

  3. 部署私有Docker Registry

    安装部署一个私有的Docker Registry是引入.学习和使用Docker这门技术的必经之路之一.尤其是当Docker被所在组织接受,更多人.项目和产品开始接触和使用Docker时,存储和分发自制 ...

  4. docker registry 镜像同步

    docker registry 镜像同步 Intro 之前我们的 docker 镜像是保存在 Azure 的 Container Registry 里的,最近我们自己搭建了一个 docker regi ...

  5. docker(五) 使用Docker Registry搭建镜像私服

    1.创建私服 docker run -d --name registry -v /opt/data/registry:/var/lib/registry -p 5000:5000 registry - ...

  6. Docker:搭建私有仓库(Registry 2.4)

    一.背景 首先,Docker Hub是一个很好的用于管理公共镜像的地方,我们可以在上面找到想要的镜像(Docker Hub的下载量已经达到数亿次):而且我们也可以把自己的镜像推送上去.但是,有的时候, ...

  7. Ubuntu 搭建docker registry 私有仓库

    一.为什么要搭建 docker 私有仓库 原因有几个: 项目需要,不希望将项目放到 docker hub 上. 环境需求,考虑网络.效率的问题,希望在私有服务器上建立自用的仓库,提高便利性和访问速度. ...

  8. Docker Registry搭建

    一.前言 Docker官方镜像仓库 访问速度很慢,Docker Registry允许搭建我们自己的镜像仓库,为实现镜像拉取.推送提供便利. 二.安装与启动 1.创建目录 mkdir /usr/loca ...

  9. 搭建docker registry私有镜像仓库

    搭建docker registry私有镜像仓库 一.安装docker-distribution yum install -y docker-distribution 安装完成后,启动服务: syste ...

随机推荐

  1. C#实现基于ffmpeg加虹软的人脸识别

    关于人脸识别 目前的人脸识别已经相对成熟,有各种收费免费的商业方案和开源方案,其中OpenCV很早就支持了人脸识别,在我选择人脸 识别开发库时,也横向对比了三种库,包括在线识别的百度.开源的OpenC ...

  2. js中字符串和正则相关的方法

    正则表达式对象常用方法 test() 检索字符串中指定的值.返回 true 或 false. var str="Embrace You" var r1=/you/i.test(st ...

  3. CentOS7下swap分区创建(添加),删除以及相关配置

    在添加swap分区之前我们可以了解下当前系统swap是否存在以及使用情况,可用: 1. free –h 或 swapon –s 了解硬盘使用情况(一般/dev/vda1为挂载硬盘): 1. df –h ...

  4. 数据结构与算法之PHP排序算法(冒泡排序)

    一.基本思想 冒泡排序算法是重复地走访过要排序的数列,一次比较相邻的两个元素,如果他们的顺序与排序要求相反,就将它们互换,直到没有再需要交换的数字,则说明排序完成.   二.算法过程 1)比较相邻的两 ...

  5. SSH免密码登录教程

    在一些受信任的环境中配置免密码登录,是比较方便的:而对于ansible等自动化工具配置免密码登录更是必要的. 免密码登录的要点就是,把想让服务器信任的客户机的公钥发送到服务器. 当客户机连接服务器时直 ...

  6. session和cookie的应用场景和区别

    cookie存于客户端,session存于服务器端. cookie的作用是与服务器进行交互,作为http规范的一部分存在,而web storage是为了在本地存储“数据”而生. cookie应用场景: ...

  7. Android 音视频深入 十三 OpenSL ES 制作音乐播放器,能暂停和调整音量(附源码下载)

    项目地址https://github.com/979451341/OpenSLAudio OpenSL ES 是基于NDK也就是c语言的底层开发音频的公开API,通过使用它能够做到标准化, 高性能,低 ...

  8. 你了解大O符号(big-O notation)么?你能给出不同数据结构的例子么?

    大O符号表示当数据结构的元素增加的时候,算法规模或者性能在最坏场景下有多好. 大O符号也可以用来描述其他行为,比如说内存消耗.因为集合实际上就是一种数据结构,我们一般用大O符号基于时间.性能.内存消耗 ...

  9. MySQL免安装版错误解决方案

    在进行mysql zip版本的安装时,遇到如下的错误 一.提示 无法启动此程序,丢失 msvcr140.dll 解决方法 下载Visual C++ Redistributable for Visual ...

  10. Shell 变量替换及测试

    声明:$ 后面跟linux可执行命令 一.变量替换                   语法                      说明 ${变量名#匹配规则} 从变量的开头进行规则匹配,将符合最 ...