Docker Register部署与基本认证
准备
- 基本事项
- Docker环境
- 登录授权方式
- 镜像存放地址
- HTTPS外网访问
- 启动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/certsdocker 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.comssl 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部署与基本认证的更多相关文章
- Docker Register安装与基本认证
准备 基本事项 Docker环境 登录授权方式 镜像存放地址 HTTPS外网访问 启动Docker Registry 1. 基本事项 本篇涉及到的数据文件都放在/data目录下, 其中会有三个子目录 ...
- docker开启2376端口CA认证及IDEA中一键部署docker项目
嘿,大家好,今天更新的内容是docker开启2376端口CA认证及IDEA中一键部署docker项目... 先看效果 我们可以通过idea一键部署docker项目,还以通过idea的控制台实时查看容器 ...
- .net core 微服务架构-docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务(asp.net core web api)
本文主要介绍通过Docker来部署通过.Net Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发).统一认证(IdentityServer4).应用服务(asp.net c ...
- 使用Docker 一键部署 LNMP+Redis 环境
使用Docker 部署 LNMP+Redis 环境 Docker 简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linu ...
- 01 . Docker原理部署及常用操作命令
Docker的来源及构造: 容器是一种基础工具:泛指任何用于容纳其他物品的工具,可以部分或完全封闭,被用于容纳,储存,运输物品: 物品可以被放置在容器中,而容器可以保护内容物: 人类使用容器的历史有十 ...
- Docker开启远程连接,本地IDEA使用docker插件连接(不认证的版本和认证的版本都有)
前言 在学校学习的时候,要部署一个Java程序,一般是打成war包,放到服务器上的tomcat的webapp里面去: 后来SpringBoot出现内置了tomcat,就直接打成jar包,丢到服务器任何 ...
- Docker安装部署Rancher
# 一.Rancher简介 [Rancher](https://www.cnrancher.com/rancher/)是一个开源的企业级容器管理平台.通过Rancher,企业再也不必自己使用一系列的开 ...
- Docker 容器部署 Consul 集群
Docker 容器部署 Consul 集群 一.docker安装与启动1.1安装docker[root@localhost /]# yum -y install docker-io 1.2更改配置文件 ...
- 在docker里部署网络服务
之前试着玩玩docker有一阵子了,今天算是头一回正式在docker里部署网络服务. 本来想和lxc差不多的东西那自然是手到擒来,没想到还是改了很多. 第一个遇到的问题是,远程连到docker宿主机干 ...
随机推荐
- AWVS基本用法
https://www.bugbank.cn/q/article/5983de41cbb936102d397781.html
- js 事件创建发布
// 创建事件. var event = document.createEvent('Event'); // 初始化一个点击事件,可以冒泡,无法被取消 event.initEvent('click', ...
- c#使用Stopwatch来计算时间间隔
今天要记录一个接口的耗时情况,就要求去写一段测试各个代码运行时间的方法,于是就加了这么一段代码.原来的做法是在代码执行之前和之后获取系统时间,然后相减.被改成了使用c#里的Stopwatch来计算时间 ...
- java script入门之知识
1.注释 /* */ 多行 //单行 2.常见形式 <!DOCTYPE html><html><head><title>My ...
- 【Web】前端裁剪图片,并上传到服务器(Jcrop+canvas)
web网站中常常有的功能:上传头像.上传封面等:一般图片都有一定的比例限制,所以需要前端在上传图片时,进行裁剪,并把裁剪后的图片进行上传. 本例采用Jcrop插件实现裁剪效果,canvas裁剪图片,并 ...
- python之常用字符串用法
1.isdigit=indecimal(判断是否是数字) s=" print(s.isdigit()) 输出为:True 2.format(标识符) a =("I have a { ...
- Linux/Python学习路线
Linux: 初级阶段: 熟练掌握常用80个命令: 掌握Linux常用软件包的安装方法,如源码安装,rpm安装等: 学习安装设备驱动程序(如网卡,显卡驱动): 了解Grub/Lilo引导程序以及简单的 ...
- 20155312 2006-2007-2 《Java程序设计》第三周学习总结
20155312 2006-2007-2 <Java程序设计>第三周学习总结 课堂内容总结 yyp复制上一行代码 5不是false statistics.sh换成.bat就可以在windo ...
- gcc 库路径里同时有相同文件名的动态库和静态库
找不到库的处理方案 有两种方法: 一.可以把当前路径加入 /etc/ld.so.conf中然后运行ldconfig,或者以当前路径为参数运行ldconfig(要有root权限才行). 二.把当前路径加 ...
- Django的学习(五)————实战问题
一.多参数问题: 首先是在添加一个新的参数,其次在url中把这个id传递过去 def article_page(request, article_id): article = models.Artic ...