docker registry v2 nginx 安全访问控制

环境准备:

docker 版本:1.9.1

registry版本:2.2.1

本文之前也有发过一篇自建仓库nginx认证,但是对新出的registry v2版本不适用,特重更一篇。

一、创建相关目录及文件

(1)目录结构

auth
│   ├── domain.crt
│   ├── domain.key
│   ├── nginx.conf
│   └── nginx.htpasswd
├── data

mkdir -p auth
mkdir -p data
openssl req -newkey rsa:4096 -nodes -sha256 -keyout auth/domain.key -x509 -days 365 -out auth/domain.crt

例如:

Country Name (2 letter code) [AU]:China
string is too long, it needs to be less than  2 bytes long
Country Name (2 letter code) [AU]:CH
State or Province Name (full name) [Some-State]:BeiJing
Locality Name (eg, city) []:BeiJing      
Organization Name (eg, company) [Internet Widgits Pty Ltd]:BeiJing
Organizational Unit Name (eg, section) []:BeiJing  
Common Name (e.g. server FQDN or YOUR name) []:registry.test.com
Email Address []:[email protected]

(2)生成对应nginx配置文件

cat <<EOF > auth/nginx.conf
upstream docker-registry {  
    server registry:5000;
}

server {
  listen 443 ssl;
  server_name default_server;

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

  # Recommendations from https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
  ssl_protocols TLSv1.1 TLSv1.2;
  ssl_ciphers ‘EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH‘;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;

  # 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 to v2 use auth_basic setting.
    auth_basic "Registry realm";
    auth_basic_user_file /etc/nginx/conf.d/nginx.htpasswd;

    ## If $docker_distribution_api_version is empty, the header will not be added.
    ## See the map directive above where this variable is defined.
    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;
  }
}
EOF

(3)创建登录用户文件

htpasswd -cb auth/nginx.htpasswd admin admin

(4)使用docker-compose启动

cat <<EOF > docker-compose.yml
nginx:
  image: "nginx:latest"
  ports:
    - 443:443
  restart: always
  links:
    - registry:registry
  volumes:
    - `pwd`/auth/:/etc/nginx/conf.d

registry:
  image: registry:2.2.1
  ports:
    - 127.0.0.1:5000:5000
  restart: always
  volumes:
    - `pwd`/data:/var/lib/registry
EOF

启动命令:

docker-compose up -d
(5)验证
curl -i -k -v https://admin:[email protected]/v2/
登录: docker login registry.test.com
查看上传的镜像信息: curl -i -k -v https://admin:[email protected]/v2/_catalog
时间: 2024-08-14 06:05:01

docker registry v2 nginx 安全访问控制的相关文章

docker registry v2 nginx

Docker registry V2 nginx 搭建 一 环境 俩台centos 7 64位 Docker 版本 Client: Version:      1.8.2 API version:  1.20 Package Version: docker-1.8.2-7.el7.centos.x86_64 Go version:   go1.4.2 Git commit:   bb472f0/1.8.2 Built: OS/Arch:      linux/amd64 Server: Vers

Docker Registry V2(distribution) & Proxy(nginx) 的搭建经历

Docker Registry V2 问世后,简单实用的确不错,不过等将端口5000更改成其他后,或者使用域名绑定后就错误百出.这里详细的将自己的经历过程做一个记录. 一.Docker Registry V2(distribution) 的安装. 这里我选择了使用官方提供的镜像去进行安装,也许你会感觉这很EASY,不屑一顾.不过,对一个运维人员来说,注重的是应用,注重的是registry中的镜像.而不是注重花哨的搭建过程.而我们注重的,registry 镜像都能满足我们的需求. # docke 

Docker Registry v2 + Token Auth Server (Registry v2 认证)实例。

关于Registry 对于registry v1 --> v2中,其中的原理.优化等,这里不再做一一介绍.这里有篇文章我瞄过几眼应该是比较不错的介绍文章了:http://dockone.io/article/747 . Registry v2 token机制 官方document:https://docs.docker.com/registry/spec/auth/token/ 目前docker registry v2 认证分为以下6个步骤: 1. docker client 尝试到regist

ubuntu docker方式部署docker registry v2

生成自己签名的证书 生成签名的过程需要根据提示输入一些参数,需要注意的时Common Name的时候需要输入一个自己需要的域名,如果时内部域名记得访问的时候需要修改hosts. mkdir /data/certs -pcd /data/certsopenssl req -newkey rsa:4096 -nodes -sha256 \-keyout domain.key -x509 -days 365 -out domain.crt 运行docker registry images docker

为 Docker Registry 增加 Nginx 前端

其实Docker Registry 就是一个API backend,所以加一个Nginx前端有大大的好处,比如docker push 时增加用户名密码验证. 怎么加?请参考以下nginx配置 upstream docker-registry { server 127.0.0.1:5000; } server { listen 80; server_name index.bestinet.com; client_max_body_size 0; chunked_transfer_encoding

企业自用docker registry v2 镜像仓库

1. 安装docker引擎并启动docker服务 2. 生成自签证书,脚本如下crt.sh:     #!/bin/bash     # 生成自签证书脚本          #common name默认是主机名     #CN=`hostname`     CN='docker.repo'     #证书名     CrtName='registry'          mkdir certs;cd certs          openssl req -x509 -days 3650 -sub

在CentOS 6上搭建私有的Docker Registry

在CentOS 6上搭建私有的Docker Registry v2Registry概念Registry是一个无状态的, 高可扩展的服务器端应用程序, 用于存储和分发Docker Image.依赖安装1. 安装Docker要使用Docker Registry, 当然首先要安装Docker. 假设你已经安装好Docker. 没有安装好可以参考官方文档.2. 安装Docker-composeDocker-compose是一个非常有用的Docker运行, 管理的工具. 你可以通过定义compose文件,

部署内网Docker Registry

目前docker 已经分为社区版 (docker CE)和 商业版(docker EE),最新的版本由原来的1.13直接跳到了17.06,目前由于17.06的刚刚发布,在使用Docker 的时候可以根据自己的需求选择相应的版本. Docker 安装 先移除其他非官方的版本: yum -y remove docker docker-common container-selinux yum -y remove docker-selinux 添加yum源,这里选择1.13的版本: yum instal

Docker registry垃圾回收

Docker registry垃圾回收 通过: docker run -p 5000:5000 -v /netdata/xxxx/registry:/var/lib/registry registry.cn-hangzhou.aliyuncs.com/term/registry-gc:2.7 registry garbage-collect /var/lib/registry/config.yml 搭建好registry服务后,docker push alpine:3.8镜像至registry服