准备

  1. 基本事项
  2. Docker环境
  3. 登录授权方式
  4. 镜像存放地址
  5. HTTPS外网访问
  6. 启动Docker Registry

1. 基本事项

本篇涉及到的数据文件都放在/data目录下, 其中会有三个子目录

/data/auth/ 基本的用户名密码认证文件存放地址

/data/certs/ docker registry 镜像https访问射击到的证书与密钥的存放地址

/data/registry/ docker registry镜像的存放地址, 当push镜像到镜像服务器之后,镜像就是存放在这里

2. Docker环境

docker的安装,全称参考官网介绍: https://docs.docker.com/engine/installation/linux/docker-ce/debian/#install-docker-ce

3. Registry登录认证

Registry Server的登录认证有多种方式,这里我们使用常规情况下的一种认证,基本的用户名密码认证,这种认证方式也跟nginx的基本http认证相同, 使用一个htpasswd文件来存放认证的用户名跟密码, 这个文件的操作是通过htpasswd这个命令来添加与管理用户密码的.

如果系统中没有这个命令,可通过下面命令安装

apt-get install apache2-utils

通过htpasswd命令生成用户管理文件并添加一个用户

htpasswd -cBb auth/htpasswd <username> <password>

往现有的文件里面添加一个用户

htpasswd -Bb auth/htpasswd <username> <password>

Docker官网文档地址: https://docs.docker.com/registry/deploying/#restricting-access

4. 镜像存放地址

通常正式环境我们的镜像会存储在外部,而不是在docker container里面, 所以我们需要在外部准备一个目录,在启动registry镜像的时候,通过-v 参数映射到container内部, 此教程里面的目录是/data/registry/

5. HTTPS外网访问

外网访问必须要用https, 主要是涉及到证书的问题, 通常我们可以使用自签名证书,

我们分docker register server端跟 docker pull 客户端两部分来讲

server端不涉及根证书添加到信任区域问题,

client端要访问自签名证书的服务器,必须添加根证书到client的信任区

BUT: 当docker register server需要pull/push镜像的时候,就需要把根证书添加到信任区, 这里有个原则,就是哪里需要pull/push镜像,那台机器就需要添加根证书

添加自签名根证书到linux信任区(Debian, 适用于Ubuntu)

这个步骤只需要用到docker pull的机器上做, docker registry server非必须

证书存放区域: /usr/share/ca-certificates/

Copy证书到证书存放地址:

wget http://agilelabs.net/certifications/publicauthorities/agilelabs_root_ca.pem/ –O /usr/share/ca-certificates/agilelabs_root_ca.crt

重新加载新添加的跟证书:

dpkg-reconfigure ca-certificates

选择YES=>通过”空格”键选择刚添加的根证书=> Tab到底部的OK=>回车选择

添加新的根证书之后需要重启Docker,让 Docker能识别新的证书

service docker restart

6. 启动Docker Registry

mkdir -p /data/registry \

mkdir -p /data/auth \

mkdir -p /data/certs

docker run -d \

--restart=always \

--name registry \

-v /data/registry:/var/lib/registry \

-v /data/auth:/auth \

-e "REGISTRY_AUTH=htpasswd" \

-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \

-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \

-v /data/certs:/certs \

-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \

-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.niusys.com.crt \

-e REGISTRY_HTTP_TLS_KEY=/certs/niusys.key \

-p 443:443 \

registry:2

以上算是对这段时间研究Docker以来,搭建Registry的总结。

自签名证书的部分可以通过 http://agilelabs.net 非常方便的生成与下载.

无论是密钥还是证书都可以通过右键复制链接, 在Linux里面通过 wget http://agilelabs.net/下载地址 –O 要保存的文件名

比如下载根证书并存储到/usr/share/ca-certificates目录下的agilelabs_root_ca.crt文件: wget http://agilelabs.net/certifications/publicauthorities/agilelabs_root_ca.pem/ –O /usr/share/ca-certificates/agilelabs_root_ca.crt

补充 1 - 通过NGINX为Docker Registry配置反向代理

我们知道https是使用的443端口,如果Docker Registry的Container端口映射到机器的443端口,那意味着这个机器再没办法部署其他https的服务, 在这里准备通过nginx反向代理Docker Registry,做到443端口的多服务共享, 我在上面的启动配置里面把 –p 443:443换成了 –p 4433:443, 下面是nginx的docker registry反向代理配置

upstream internal_docker_registry  {
     server localhost:4433; # registry.renhl.com

}

server {
     listen 443 ssl;
     server_name registry.niusys.com

ssl on;
     ssl_certificate      /data/certs/registry.niusys.com.crt;
     ssl_certificate_key  /data/certs/niusys.key;
     ssl_session_cache    shared:SSL:10m;
     ssl_session_timeout 5m;
     ssl_protocols    TLSv1.1 TLSv1.2;

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

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

location / {
         proxy_pass https://internal_docker_registry;
         proxy_read_timeout  90;

proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection $http_connection;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_cache_bypass $http_upgrade;
     }

}

Docker Register部署与基本认证的更多相关文章

  1. Docker Register安装与基本认证

    准备 基本事项 Docker环境 登录授权方式 镜像存放地址 HTTPS外网访问 启动Docker Registry 1. 基本事项 本篇涉及到的数据文件都放在/data目录下, 其中会有三个子目录 ...

  2. docker开启2376端口CA认证及IDEA中一键部署docker项目

    嘿,大家好,今天更新的内容是docker开启2376端口CA认证及IDEA中一键部署docker项目... 先看效果 我们可以通过idea一键部署docker项目,还以通过idea的控制台实时查看容器 ...

  3. .net core 微服务架构-docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务(asp.net core web api)

    本文主要介绍通过Docker来部署通过.Net Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发).统一认证(IdentityServer4).应用服务(asp.net c ...

  4. 使用Docker 一键部署 LNMP+Redis 环境

    使用Docker 部署 LNMP+Redis 环境 Docker 简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linu ...

  5. 01 . Docker原理部署及常用操作命令

    Docker的来源及构造: 容器是一种基础工具:泛指任何用于容纳其他物品的工具,可以部分或完全封闭,被用于容纳,储存,运输物品: 物品可以被放置在容器中,而容器可以保护内容物: 人类使用容器的历史有十 ...

  6. Docker开启远程连接,本地IDEA使用docker插件连接(不认证的版本和认证的版本都有)

    前言 在学校学习的时候,要部署一个Java程序,一般是打成war包,放到服务器上的tomcat的webapp里面去: 后来SpringBoot出现内置了tomcat,就直接打成jar包,丢到服务器任何 ...

  7. Docker安装部署Rancher

    # 一.Rancher简介 [Rancher](https://www.cnrancher.com/rancher/)是一个开源的企业级容器管理平台.通过Rancher,企业再也不必自己使用一系列的开 ...

  8. Docker 容器部署 Consul 集群

    Docker 容器部署 Consul 集群 一.docker安装与启动1.1安装docker[root@localhost /]# yum -y install docker-io 1.2更改配置文件 ...

  9. 在docker里部署网络服务

    之前试着玩玩docker有一阵子了,今天算是头一回正式在docker里部署网络服务. 本来想和lxc差不多的东西那自然是手到擒来,没想到还是改了很多. 第一个遇到的问题是,远程连到docker宿主机干 ...

随机推荐

  1. AWVS基本用法

    https://www.bugbank.cn/q/article/5983de41cbb936102d397781.html

  2. js 事件创建发布

    // 创建事件. var event = document.createEvent('Event'); // 初始化一个点击事件,可以冒泡,无法被取消 event.initEvent('click', ...

  3. c#使用Stopwatch来计算时间间隔

    今天要记录一个接口的耗时情况,就要求去写一段测试各个代码运行时间的方法,于是就加了这么一段代码.原来的做法是在代码执行之前和之后获取系统时间,然后相减.被改成了使用c#里的Stopwatch来计算时间 ...

  4. java script入门之知识

    1.注释 /*              */ 多行 //单行 2.常见形式 <!DOCTYPE html><html><head><title>My ...

  5. 【Web】前端裁剪图片,并上传到服务器(Jcrop+canvas)

    web网站中常常有的功能:上传头像.上传封面等:一般图片都有一定的比例限制,所以需要前端在上传图片时,进行裁剪,并把裁剪后的图片进行上传. 本例采用Jcrop插件实现裁剪效果,canvas裁剪图片,并 ...

  6. python之常用字符串用法

    1.isdigit=indecimal(判断是否是数字) s=" print(s.isdigit()) 输出为:True 2.format(标识符) a =("I have a { ...

  7. Linux/Python学习路线

    Linux: 初级阶段: 熟练掌握常用80个命令: 掌握Linux常用软件包的安装方法,如源码安装,rpm安装等: 学习安装设备驱动程序(如网卡,显卡驱动): 了解Grub/Lilo引导程序以及简单的 ...

  8. 20155312 2006-2007-2 《Java程序设计》第三周学习总结

    20155312 2006-2007-2 <Java程序设计>第三周学习总结 课堂内容总结 yyp复制上一行代码 5不是false statistics.sh换成.bat就可以在windo ...

  9. gcc 库路径里同时有相同文件名的动态库和静态库

    找不到库的处理方案 有两种方法: 一.可以把当前路径加入 /etc/ld.so.conf中然后运行ldconfig,或者以当前路径为参数运行ldconfig(要有root权限才行). 二.把当前路径加 ...

  10. Django的学习(五)————实战问题

    一.多参数问题: 首先是在添加一个新的参数,其次在url中把这个id传递过去 def article_page(request, article_id): article = models.Artic ...