一、Docker hub 交互

    Docker hub 是 Docker 官方维护的三个共用仓库,超越四分一要求都足以经过在
Docker hub 中央直机关接下载镜像来完毕。接下来,来看一下怎么与 Docker hub
举行交互,包括登陆登出以及将本地镜像推送到 Docker hub 等…

注册:https://hub.docker.com/ 注册的时候须要FQ~~

登陆:docker login 

澳门金沙国际 1

登出:docker logout

搜索镜像

docker search [name] --filter=stars=30
                     --filter=stars=N (参数可以指定仅显示收藏数量为 N 以上的镜像)

澳门金沙国际 2

拉取镜像:docker pull [选项] [Docker Registry
地址[:端口号]/]仓库名[:标签]

推送镜像

#1、打镜像标签(username 表示Docker账号用户名)
docker tag REPOSITORY[:tag] username/REPOSITORY[:tag]
docker tag myenv:1.0 jmcui/myenv:1.0

#2、推送到Docker hub
docker push username/REPOSITORY[:tag]
docker push jmcui/myenv:1.0

驷马难追思路:

Docker入门之搭建私人住房公司级镜像仓库Harbor

澳门金沙国际 3


二、创建 Docker 私库(基于HTTP)

    在合营社中把个中的片段工具包放入 Nexus 中是比较宽泛的做法,最新版本
Nexus3.x 周详协理 Docker 的个体镜像。所以采取 Nexus3.x 1个软件来保管
Docker , Maven , Yum , PyPI 等是二个睿智的选项。

  1. Docker Registry 说明

为何要搭建私有镜像仓库

  对于1个恰好接触Docker的人来说,官方的Docker
hub是用以管理国有镜像。既然官方提供了镜像仓库我们为何还要去协调搭建私有仓库呢?即使也得以托管私有镜像。大家得以丰硕便于的把大家温馨镜像推送上去,不过Docker
hub提供的私家仓库个数有限。对于个人来说Docker
hub是个不利的选择,但是对于店铺的话,相对于安全
,开支和集团的架构来说搭建自个儿的私有镜像仓库才是天经地义的征途。

=====

1、使用 Docker 安装 Nexus

docker run -d --name nexus3 --restart=always -p 8081:8081 -p 8082:8082 -p 8083:8083 --mount src=nexus-data,target=/nexus-data sonatype/nexus3
## 8081:nexus3网页端
## 8082:docker(hosted)私有仓库,可以pull和push
## 8083:docker(proxy)代理远程仓库,只能pull 

有关什么创设和使用当地仓库,其实早就有那个稿子介绍了。因为docker技术正处在发展和周密阶段,所以某个文章要么内容早已不合时宜,要么给出了错误的布署,导致不可能正常创设仓库。本文记录的是私有完整的搭建进程,docker
version为1.1.2。

怎么是Harbor?为何要选用Harbor

  Harbor是贰个用以存款和储蓄和散发Docker镜像的信用合作社级Registry服务器,通过丰硕一些合营社须求的成效特色,例如安全、标识和管制等,增添了开源Docker
Distribution。作为多少个企业级私有Registry服务器,Harbor提供了更好的习性和安全。提高用户选择Registry创设和平运动行条件传输镜像的效用。Harbor帮助安装在几个Registry节点的镜像财富复制,镜像全体保存在私有Registry中,
确认保证数据和知识产权在商店里面网络中管理控制。此外,Harbor也提供了尖端的汉中特点,诸如用户管理,访问控制和移动审计等。

  • 听别人说剧中人物的访问控制 –
    用户与Docker镜像仓库通过“项目”进行集体管制,多少个用户能够对八个镜像仓库在同一命名空间(project)里有差异的权位。
  • 镜像复制 –
    镜像能够在八个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和积雨云的景色。
  • 图形化用户界面 –
    用户能够通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。
  • AD/LDAP 帮忙 –
    Harbor能够融为一炉集团中间已有的AD/LDAP,用于鉴权认证管理。
  • 审计管理 – 全数针对镜像仓库的操作都能够被记录追溯,用于审计管理。
  • 国际化 –
    已享有英文、汉语、German、日文和俄文的本地化版本。更加多的语言将会添加进去。
  • RESTful API – RESTful API 提须求管理员对于Harbor越来越多的操控,
    使得与其它管理软件集成变得更易于。
  • 配置简单 – 提供在线和离线三种安装工具,
    也得以设置到vSphere平台(OVA格局)虚拟设备。
    那正是官网原话。完美诠释了什么是Harbor?为何要挑选Harbor。上边表达那么多的Harbor,
    今后大家来初步设置吧。

    #### Harbor安装

      要设置Harbor,有以下多少个先决条件:
        Python版本大于也许等于2.7
        
    Docker engine的版本大于等于1.10
        Docker Compose的版本大于1.6.0

  首先大家须求检查自身服务器是不是协助方面一个尺码。输入以下代码检查

#python2.7官网安装页面

#反省Python版本.Ubuntu 16.04早就合龙了python2.7。
python -V
#检查Docker的版本
docker -v
#Docker Compose安装脚本
sudo curl -L

-s`-`uname -m` -o /usr/local/bin/docker-compose
#检查Docker Compose的版
docker-compose –version
#假诺提醒Permission denied。执行以下语句赋权
sudo chmod +x /usr/local/bin/docker-compose

  确认保证服务器上的软件版本已经满意上述供给之后。咱们前几天始于安装Harbor。假使不掌握怎么设置docker
能够参见 

一、 背景

docker中要利用镜像,一般会从本土、docker
Hup公共仓库和其他第2方共用仓库中下载镜像,一般出于安全和外网(墙)能源下载速率的来头考虑公司级上不会随机使用。

那便是说有没有一种方法能够储存本人的镜像又有平安认证的仓库呢? 

 公司级环境中基于Harbor搭建本身的平安认证仓库。

Harbor是VMware集团日前开源的信用合作社级Docker Registry项目,
其目的是帮扶用户飞速搭建叁个小卖部级的Docker registry服务。

2、登陆

    访问 http:// ip地址:8081 默许账号:admin,暗许密码:admin123

澳门金沙国际 4

合法提供了Docker Hub网站来作为二个公然的集聚仓库。但是,本地访问Docker
Hub速度往往一点也不快,并且很多时候我们须要1个当地的私人住房仓库只供网内使用。

下载Harbor

#下载安装包
wget

#解压
tar -xzf harbor-offline-installer-v1.1.2.tgz
cd harbor
#编纂配置文件
vi harbor.cfg

② 、选用的说辞

*提供了管理UI

*依照角色的访问控制(Role Based Access Control)

*AD/LDAP集成

*审计日志(奥迪(Audi)t logging)

*原生帮忙中文

 ③ 、创造私有仓库

    页面顶端的齿轮按钮 —> Repository —> Repositories —> Create
repository —> 选拔 docker (hosted)

澳门金沙国际 5

      仍是可以创制三个 docker (proxy) 类型的仓库链接到 DockerHub
上。再次创下立2个 docker (group) 类型的库房把刚刚的 hosted 与 proxy
添加在一道。主机在走访的时候暗许下载私有仓库中的镜像,借使没有将链接到
DockerHub 中下载并缓存到 Nexus 中。

Docker仓库实际上提供两位置的职能,八个是镜像管理,一个是注脚。前者主要由docker-registry项目来兑现,通过http服务来上传下载;后者能够透过docker-index(闭源)项目还是选取现成认证方案(如nginx)实现http请求保管。

陈设文件注释参考]

## Configuration file of Harbor

#安装访问地址,协助IP,域名,主机名,禁止设置127.0.0.1
hostname = reg.mydomain.com

#做客方式,http只怕https
ui_url_protocol = http

#邮件通告有关设置
email_server = smtp.mydomain.com
email_server_port = 25
email_username =
[email protected]
email_password = abc
email_from = admin
<[email protected]>
email_ssl = false

#用户登录密码
harbor_admin_password = Harbor12345

#harbor认证形式,暗中同意为db_auth,本地mysql,也得以布署ldap认证
auth_mode = db_auth

#ldap认证配置
ldap_url = ldaps://ldap.mydomain.com
ldap_basedn = ou=people,dc=mydomain,dc=com
ldap_uid = uid
ldap_scope = 3

#mysql数据库设置
db_password = root123
self_registration = on
use_compressed_js = on
max_job_workers = 3
token_expiration = 30
verify_remote_cert = on
customize_crt = on

#浮现的印证及团伙音信
crt_country = CN
crt_state = State
crt_location = CN
crt_organization = organization
crt_organizationalunit = organizational unit
crt_commonname = example.com
crt_email =
[email protected]
project_creation_restriction = everyone

#SSL证书地址。只有打开https访问才生效
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
#############

【澳门金沙国际】registry搭建教程,搭建docker内网私服。  以上遵照自个儿需求修改。要是想打开https形式访问必要团结报名ssl证书。harbor暗中同意监听80端口。假设必要修改端口。请修改目录下的docker-compose.yml文件,
澳门金沙国际 6
修改形成之后。运维

sudo ./install.sh

  举行设置。安装到位以后她会协调运维。那里她会融洽下载一些他所需的images。进程有点慢。能够透过Ali云的镜像加快器来加快。Ali云镜像加快器
.打开链接登录之后点击镜像加快。然后你会取得二个隶属加快地址。如图
澳门金沙国际 7能够依据本人的环境查看文书档案安装使用。然后等待命令执行完成。
澳门金沙国际 8

叁 、 相关介绍

Harbor在架设上第三由八个零件构成:

*Proxy:Harbor的registry, UI,
token等服务,通过2个放权的反向代理统一接受浏览器、Docker客户端的伸手,并将呼吁转发给后端不相同的劳动。

*Registry: 负责储存Docker镜像,并处理docker push/pull
命令。由于大家要对用户进行访问控制,即不一样用户对Docker
image有差异的读写权限,Registry会指向一个token服务,强制用户的每一回docker
pull/push请求都要指点二个合法的token, Registry会通过公钥对token
实行解密验证。

*Core services: 那是Harbor的着力功用,主要提供以下服务:

*UI:提供图形化界面,帮衬用户管理registry上的镜像(image),
并对用户展开授权。

*webhook:为了及时获得registry 上image状态变化的场所,
在Registry上配置webhook,把景况变化传递给UI模块。

*token 服务:负责依照用户权限给各类docker push/pull命令签发token.
Docker
客户端向Registry服务发起的呼吁,就算不包括token,会被重定向到那边,得到token后再另行向Registry进行呼吁。

*Database:为core
services提供数据库服务,负责储存用户权限、审计日志、Docker
image分组消息等数码。

*Log
collector:为了援助监察和控制Harbor运维,负责搜集其余零件的log,供日后展开剖析。

逐条零部件之间的关联如下图所示:

澳门金沙国际 9

Harbor的每一种组件都以以Docker容器的款型营造的,所以使用Docker
Compose来对它举行配置。

用于安插Harbor的Docker Compose 模板位于 /Deployer/docker-compose.yml.
打开这些模板文件,会发现Harbor由四个容器组成:

*proxy: 由Nginx 服务器构成的反向代理。

*registry:由Docker官方的开源registry 镜像构成的容器实例。

*ui: 即架构中的core services, 构成此容器的代码是Harbor项目的侧重点。

*mysql: 由官方MySql镜像构成的数据库容器。

*log: 运营着rsyslogd的器皿,通过log-driver的款型收集别的容器的日记。

那多少个容器通过Docker
link的款型连接在联合署名,那样,在容器之间能够透过容器名字相互访问。对终端用户而言,只须要揭破proxy
(即Nginx)的劳动端口。

Harbor的验证流程

澳门金沙国际 10

A、首先,请求被代理容器监听拦截,并跳转到钦赐的辨证服务器。

B、如果证实服务器配置了权力认证,则会回去401。文告dockerclient在特定的乞求中必要带上贰个官方的token。而认证的逻辑地址则指向框架结构图中的core
services。

C、 当docker
client接受到错误code。client就会发送认证请求(带有用户名和密码)到coreservices进行basic
auth认证。

D、
当C的央浼发送给ngnix未来,ngnix会依照铺排的辨证地址将含有用户名和密码的伸手发送到core
serivces。

E、
coreservices获取用户名和密码然后对用户音信实行求证(本人的数据库或许出席LDAP都能够)。成功以往,重回认证成功的音讯。

Harbor的装置形式

*在线online安装  –> 由于国内墙和网速率的缘故,体验倒霉

*离线offline安装  –> 下载包较大 [ 包括了连带依赖镜像
],从官网下载效果不完美

4、配置匡助 HTTP

    Docker 私下认可分化意非 HTTPS 格局推送镜像。大家得以通过 Docker
的安顿选项来撤销那么些范围,(Ubuntu 16.04+, Debian 8+, centos 7)在
/etc/docker/daemon.json 中写入如下内容:

{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ],
  "insecure-registries": [
    "xx.xx.xx.xx:8082"
  ]
}

     重启 Docker :

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

docker-registry既然也是软件应用,自然最简便的点子就是采用官方提供的已经配备好的镜像registry。官方文书档案中也交由了提出,直接运维sudo
docker run -p 6000:四千registry命令。那样实在能运转三个registry服务器,可是全部上传的镜像其实都以由docker容器管理,放在了/var/lib/docker/….某些目录下。而且倘诺删除容器,镜像也会被删除。由此,大家须要想办法告诉docker容器镜像应该存放在哪儿。registry镜像中运行后镜像默许地点是/tmp/registry,由此平昔照射这几个职务即可,比如到本机的/opt/data/registry目录下。

开启https

  假设使用http的那里能够跳过,大家把曾经报名好的注脚文件放到/data/cert
目录上面。然后修改harbor.cfg文件

澳门金沙国际 11
  安装成功之后打开事先自身设定的域名依旧IP地址。测试地方。测试用户名:harbor_test,测试密码:Harbor_test123
澳门金沙国际 12

④ 、实验准备

harbor-offline-installer-v1.1.1.tgz

百度云:

[root@www ~]# cat /etc/redhat-release

CentOS Linux release 7.3.1611 (Core)

[root@www ~]# cat /etc/hosts

192.168.1.102 www.michael.com

Harbor 主机

IP:192.168.1.102

Hostname:www.michael.com

docker主机(用来试验向Harbor registry拉取和推送镜像

IP:192.168.1.109

五 、验证成效

#1、登陆
docker login xx.xx.xx.xx:8082
#2、私库标签
docker tag myenv:1.0  xx.xx.xx.xx:8082/myenv
#3、推送镜像到私有仓库
docker push xx.xx.xx.xx:8082/myenv
#4、查看私有仓库镜像,验证是否推送成功
curl xx.xx.xx.xx:8082/v2/_catalog
#5、拉取私有仓库镜像
docker pull xx.xx.xx.xx:8082/myenv
  1. 在CentOS上搭建docker私服

使用harbor

5、搭建CA,创立连锁证件

在Harbor 主机:

1.搭建CA,完结加密传输

安装openssl相关包

# yum -y install pcre pcre-devel zlib-devel openssl
openssl-devel 

2.开立证书

创建证书存放目录

# mkdir -p /data/cert

# cd /data/cert/

3.创建 CA 根证书

#openssl req  -newkey rsa:4096 \

> -nodes -sha256 -keyout ca.key -x509 -days 365 \

> -out ca.crt -subj “/C=CN/L=Shenzhen/O=Harbor/CN=www.harbor.com”

#  ls

ca.crt    ca.key

4.生成证书签名, 设置访问域名为 www.michael.com

openssl req -newkey rsa:4096 \

> -nodes -sha256 -keyout www.michael.com.key \

> -out www.michael.com.csr -subj
“/C=CN/L=Shenzhen/O=XXX/CN=www.michael.com”

# ls

ca.crt  ca.key  www.michael.com.csr  www.michael.com.key

5.生成主机的证件

# openssl x509 -req -days 365 -in www.michael.com.csr -CA ca.crt
-CAkey ca.key -CAcreateserial -out www.michael.com.crt

Signature ok

subject=/C=CN/L=Shenzhen/O=XXX/CN=www.michael.com

Getting CA Private Key

# ls

ca.crt  ca.key  ca.srl  www.michael.com.crt  www.michael.com.csr 
www.michael.com.key

三 、私有仓库高级配置(HTTPS 认证)

    下面,大家将要搭建的个体仓库地址为 docker.domain.com,使用 openssl
自行签发 docker.domain.com 的站点 SSL 证书,并用 Docker Compose
搭建一个享有权力认证、TLS 的私家仓库。

    由于是在 Centos 7 下玩的 Docker ,首先要消除 Docker Compose
安装的题材。

2.1 安装docker-registry

制造用户

harbor已经成立成功。今后我们来开头创办三个用户。
澳门金沙国际 13

六、Harbor安装配置**

**在Harbor 主机:


1.安装docker 

# yum  -y install docker 

**# systemctl start  docker.service


**# systemctl enable docker.service




**2.安装 docker-compose


**#  yum -y  install python-pip 


#  pip install –upgrade pip

#  pip install docker-compose

#  pip install –upgrade backports.ssl_match_hostname

3.将 harbor-offline-installer-v1.1.1.tgz 上传(下载)至 /root

# tar zxf  harbor-offline-installer-v1.1.1.tgz

# cd harbor

4.修改habor配置文件   harbor.cfg 

# vim  harbor.cfg

hostname= www.michael.com       #
钦赐个人仓库的主机名,能够是IP地址,也能够是域名

ui_url_protocol = https                  
# 用户访问私仓时使用的商谈,私下认可时http,配置成https

db_password = root123                 # 钦命mysql数据库管理员密码

harbor_admin_password:Harbor12345            
 # harbor的管理员账户密码

ssl_cert =/data/cert/www.michael.com.crt            
 # 设置证书文件路径

ssl_cert_key =/data/cert/www.michael.com.key    
 # 设置证书密钥文件路径

5.执行自带脚本一键安装

# ./install.sh

澳门金沙国际 14

澳门金沙国际 15

6.WEB访问

澳门金沙国际 16

默许用户名:admin

暗许密码:Harbor12345 

 [可经过设置前 harbor.cfg 配置文件修改 harbor_admin_password 指定 ]

澳门金沙国际 17

*因而 admin 账户登陆创造 test 用户 

*剥离 admin 账户登陆 test 用户

*创建 test 项目, 访问级别采取公开

澳门金沙国际 18


=

1、安装 Docker Compose

x86_64 框架结构的 Linux 提出设置如下:

    从 官方
GitHub
Release 处选取新型版本安装,类似如下~

#1、直接下载对应的二进制包
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
#2、添加环境变量
export PATH=$PATH:/usr/local/bin/docker-compose

#卸载
sudo rm /usr/local/bin/docker-compose

AMuranoM 架构的 Linux 建议安装如下:

#1、检查linux有没有安装python-pip包
 pip -V
#2、执行安装 epel-release 包
 yum -y install epel-release
#3、执行安装 python-pip 包
 yum install python-pip
#4、对安装好的pip进行升级
 pip install --upgrade pip
#5、再次验证pip是否安装成功
 pip -V
#6、安装Docker-Compose(失败的话可重复多次)
 pip --default-timeout=300 install -U docker-compose --ignore-installed requests
#7、检查docker-compose 安装
 docker-compose -version

#卸载
sudo pip uninstall docker-compose
yum -y remove python-pip
yum -y remove epel-release

bash
补全命令 :sudo curl -L

-o /etc/bash_completion.d/docker-compose

 

直接用容器来推行Docker Compose:

curl -L https://github.com/docker/compose/releases/download/1.22.0/run.sh > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

方式有多种,直接运营上面的吩咐:

创建项目

创造项目,并加上用户
澳门金沙国际 19

七、客户端(**docker机**)测试**

在 docker机:

1.安装docker

# yum -y isntall docker

2.创建仓库证书存放目录

# mkdir /etc/docker/certs.d/www.michael.com

3.从harbor服务器获取证书至仓库证书目录

# scp root@192.168.1.102:/data/cert/ca.crt
/etc/docker/certs.d/www.michael.com/ca.crt

# update-ca-trust

# systemctl restart docker

4.添加 192.168.1.102(www.michael.com)域名解析

# vim   /etc/hosts

192.168.1.102 www.michael.com

5. 用户登陆

**# docker login  www.michael.com  -u admin  -p  “XXX”
**

# docker login  www.michael.com  -u test      -p   “XXX”

澳门金沙国际 20

# docker pull ubuntu:14.04

# docker tag ubuntu:17.04  www.michael.com/test/ubuntu:17.04

# docker push www.michael.com/test/ubuntu:17.04

澳门金沙国际 21

澳门金沙国际 22

至于仓库、用户的 push 和pull权限控制,请上官网查阅相关课程!

2、HTTPS 认证

    因为对 HTTPS
的那个证书认证什么的,着实没有怎么大的概念,就不在这里大夸其辞了。国内各大云服务商均提供了免费的站点证书,常见的做法是:申请个域名,绑定服务器IP,然后下载云服务提供的证书,添加认证即可。

    那里的做法是选择 openssl 自行签发 docker.domain.com 的站点 SSL
证书,也是瞅着步子,一步步傻瓜式操作下来的,就不献丑了。具体步骤可以参照:https://yeasy.gitbooks.io/docker\_practice/content/repository/registry\_auth.html

    至于坑,那照旧一些,比如上边的 Docker Compose
安装就折腾了深切。别的部供给要小心的是,最毕生成的公文都要放在 /etc/docker
相关目录下,目录结构如下:

澳门金沙国际 23

澳门金沙国际 24

 

参考资料:《Docker —
从入门到执行》

# docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry
-v /opt/data/registry:/tmp/registry  -p 5000:5000 registry

上传镜像

先是选用docker login命令登录:

#登录
robin:~ robin$ sudo docker login shepherd618.cn
Username: admin
Password:
Login Succeeded
#查看本地镜像
robin:docker_demo robin$ sudo docker images
Password:
REPOSITORY          TAG                IMAGE ID            CREATED     
      SIZE
docker_demo        latest              fdd994bee741        19 seconds
ago      283MB
node                8.9-alpine          406f227b21f5        2 weeks ago 
      68.1MB
#给dcoker_demo新增tag
robin:docker_demo robin$ sudo docker tag docker_demo
shepherd618.cn/test/demo
#push images
robin:docker_demo robin$ docker push shepherd618.cn/test/demo
The push refers to repository [shepherd618.cn/test/demo]
f8387a884f73: Layer already exists
d74f9d9e7013: Pushed
f846841ed47f: Layer already exists
0198944a9875: Layer already exists
9dfa40a0da3b: Layer already exists
latest: digest:
sha256:5b33acc5edf6f48cbd8e7ccd216daa4a7da1ebd4871fbc68bc2517136f1ccf44
size: 1374

接下来打开harbor,会看到刚刚上传的images和操作日志
澳门金沙国际 25

当大家必要用到这一个images的时候能够通过上面给的pull命令下载到本地。到此整个安装进程甘休。

正文永久更新链接地址:

为何要搭建私有镜像仓库 对于3个刚好接触Docker的人的话,官方的Docker
hub是用以管理国有镜像。…

八 、关于甘休和运转 Harbor(修改配置文件需重启)

在 Harbor 机:

澳门金沙国际 26

澳门金沙国际 27

澳门金沙国际 28

# docker-compose  -f  /root/harbor/docker-compose.yml  down

#  docker-compose  -f  /root/harbor/docker-compose.yml  up  -d

# docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry
-v /opt/data/registry:/tmp/registry  -p 5000:5000 registry

九、参考

专营商级Registry开源项目Harbor

http://dockone.io/article/1179;

http://www.cnblogs.com/jicki/p/5737369.html

http://www.jiagoumi.com/work/1221.html

Docker实践:使用Harbor搭建Docker私有仓库

http://www.jiagoumi.com/work/1221.html

商厦级Docker Registry开源工具Harbor的牵线以及使用指南

https://my.oschina.net/xxbAndy/blog/786712

Docker Harbor registry(http)私有仓库搭建

http://lisea.blog.51cto.com/5491873/1934750

Docker Harbor registry(https)安全认证搭建

https://github.com/vmware/harbor

https://github.com/vmware/harbor/blob/master/docs/installation\_guide.md

# git clone

# cd docker-registry && mkdir -p /opt/data/registry

# docker build -t “local-sean” .

build完结后,就足以运作那几个docker-registry

我们先配备本身的config.yml文件,第二种办法是一向在run的时候内定变量

# cp config/config_sample.yml /opt/data/registry/config.yml

# vi /opt/data/registry/config.yml

##此处能够安装本地存款和储蓄SETTINGS_FLAVOR=dev,local
STORAGE_PATH:/tmp/registry等待

# docker run -d -v /opt/data/registry:/tmp/registry -p 5000:5000 -e 
DOCKER_REGISTRY_CONFIG=/tmp/registry/config.yml registry

docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v
/db/docker-images:/tmp/registry -p 5000:5000 registry

2.2 客户端使用

要从私服上赢得镜像或向私服提交镜像,今后变得十二分不难,只必要在仓房前边加上私服的地址和端口,形如172.29.88.222:6000/centos6。注意,这里能够挑选不使用IP,而是用hostname,如registry.domain.com:5000,但不能够仅用不带.的主机名registry,docker会认为registry是用户名,提出使用带域名的hostname加port来代表。

于是在此外一台要利用docker的主机上就能够透过那台私服拉取和推送镜像了:

从私服上搜寻存在什么可用镜像

# curl -X GET

{“num_results”: 2, “query”: “”, “results”: [{“description”: “”,
“name”: “library/centos6”}, {“description”: “”, “name”:
“library/nginx”}]}

按原则搜索nginx

# curl -X GET

拉取image到本地

docker pull library/centos6

## 本地对份镜像运转起来,形成container

## 给container去其余1个名字

# docker tag 68edf809afe7 registry.domain.com:5000/centos6-test

## 最终将新的docker images推送到私服上

docker push registry.domain.com:5000/centos6-test

首先次push到私服上时会提醒用户名、密码和邮箱,成立即可。也足以在docker私服端参预认证机制。

  1. 加入nginx认证

(请在实操之前,先读书完本节,再鲜明是或不是在前端参加nginx)

3.1 安装及安排nginx

从地点的历程能够见到,除非防火墙限制,不然其余主机能够创建账号并想私服推送镜像,更安全的做法是在外层到场登录认证机制。

最佳安装1.4.x本子,不然下边包车型大巴有个别配置大概会不相同盟

# yum install nginx

创办三个登录用户

# htpasswd -c /etc/nginx/docker-registry.htpasswd sean

New password:

Re-type new password:

Adding password for user sean

# htpasswd /etc/nginx/docker-registry.htpasswd itsection

为了让nginx使用这一个密码文件,并且转载8080端口的乞求到Docker
Registry,新增nginx配置文件

vi /etc/nginx/sites-enabled/docker-registry:

# For versions of Nginx > 1.3.9 that include chunked transfer
encoding support

# Replace with appropriate values where necessary

upstream docker-registry {

server localhost:5000;

}

server {

listen 8080;

server_name sean.domain.com;  — your registry server_name

# ssl on;

# ssl_certificate /etc/ssl/certs/docker-registry;

# ssl_certificate_key /etc/ssl/private/docker-registry;

proxy_set_header Host      $http_host;  # required for Docker client
sake

proxy_set_header X-Real-IP  $remote_addr; # pass on real client IP

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

# required to avoid HTTP 411: see Issue #1486
()

chunked_transfer_encoding on;

location / {

# let Nginx know about our auth file

auth_basic              “Restricted”;

auth_basic_user_file    docker-registry.htpasswd;

proxy_pass ;

}

location /_ping {

auth_basic off;

proxy_pass ;

}

location /v1/_ping {

auth_basic off;

proxy_pass ;

}

}

让nginx来行使这一个virtual-host

# ln -s /etc/nginx/sites-enabled/docker-registry
/etc/nginx/conf.d/docker-registry.conf

重启nginx来激活虚拟主机的安插

# service nginx restart

3.2 参预认证后使用docker-registry

那时候主机的四千端口应该通过防火墙禁止访问(大概在docker
run端口映射时只监听回环接口的IP -p 127.0.0.1:5000:5000)。

# curl localhost:5000

“docker-registry server (dev) (v0.8.1)”

一经直接待上访问访问将取得未授权的音讯:

# curl localhost:8080401 Authorization Required

nginx/1.4.7

带用户认证的docker-registry:

# curl

{“num_results”: 2, “query”: “”, “results”: [{“description”: “”,
“name”: “library/centos6”}, {“description”: “”, “name”:
“library/nginx”}]}

# docker login registry.domain.com:8080

Username: sean

Password:

Email: zhouxiao@domain.com

Login Succeeded

# docker pull registry.domain.com:8080/library/centos6

不出意外的话,下面的docker pull会退步:

# docker pull registry.domain.com:8080/library/centos6

Pulling repository registry.domain.com:8080/library/centos6

2014/11/11 21:00:25 Could not reach any registry endpoint

# docker push registry.domain.com:8080/ubuntu:sean

The push refers to a repository [registry.domain.com:8080/ubuntu]
(len: 1)

Sending image list

Pushing repository registry.domain.com:8080/ubuntu (1 tags)

2014/11/12 08:11:32 HTTP code 401, Docker will not send auth headers
over HTTP.

nginx日志

2014/11/12 07:03:49 [error] 14898#0: *193 no user/password was
provided for basic

authenticatGET /v1/repositories/library/centos6/tags HTTP/1.1″, host:
“registry.domain.com:8080”

本文后的第③篇参考文书档案没有出现这几个题材,但评论中有提及。

有人说是backend
storage的标题,那里是地面存款和储蓄镜像,不应有。经过查阅大量资料,并一再操作验证,是docker-registry版本的标题。从v0.10.0起来,docker
login尽管Succeeded,但pull或push的时候,~/.dockercfg下的用户登录新闻将不允许通过HTTP明文字传递输。(如若你愿意能够查看v0.10.0的源码
registry.go,在分支v0.9.1及在此之前是一向不HTTP code 401, Docker will not send
auth headers over HTTP的)

脚下的主意多个:

撤出,那就是怎么先证实在操作前线查看到那的来由了

换到v0.9.1及以下版本。以后都v1.3.1了,笔者猜你不会这么做

修改源码session.go,去掉相应的判定行,然后git下来重新安装。笔者猜你更不会如此做

设置SSL证书,使用HTTPS传输。这是明智的抉择,新本子docker也援引我们这么做,往下看。

3.3 为nginx安装ssl证书

先是打开nginx配置文件中ssl的三行注释

# vi /etc/nginx/conf.d/docker-registry.conf

server {

listen 8000;

server_name registry.domain.com;

ssl on;

ssl_certificate /etc/nginx/ssl/nginx.crt;

ssl_certificate_key /etc/nginx/ssl/nginx.key;

保留之后,nginx会分别从/etc/nginx/ssl/nginx.crt和/etc/nginx/ssl/nginx.key读取ssl证书和私钥。假如您自身甘愿花钱买八个ssl证书,那就会变得非凡不难,把证件和私钥拷贝成下面一样即可。关于SSL以及签订契约ssl证书,请参考其他文章。

此地大家自签署一个ssl证书,把当前系统作为(私有)证书颁发中央(CA)。

创立存放证书的目录

1 # mkdir /etc/nginx/ssl

承认CA的一部分配置文件

# vi /etc/pki/tls/openssl.cnf

[ CA_default ]

dir            = /etc/pki/CA          # Where everything is kept

certs          = $dir/certs            # Where the issued certs are
kept

crl_dir        = $dir/crl              # Where the issued crl are kept

database        = $dir/index.txt        # database index file.

#unique_subject = no                    # Set to ‘no’ to allow
creation of

# several ctificates with same subject.

new_certs_dir  = $dir/newcerts        # default place for new certs.

certificate    = $dir/cacert.pem      # The CA certificate

serial          = $dir/serial          # The current serial number

crlnumber      = $dir/crlnumber        # the current crl number

# must be commented out to leave a V1 CRL

crl            = $dir/crl.pem          # The current CRL

private_key    = $dir/private/cakey.pem # The private key

RANDFILE        = $dir/private/.rand    # private random number file

default_days    = 3650                  # how long to certify for

[ req_distinguished_name ]

countryName                    = Country Name (2 letter code)

countryName_default            = CN

countryName_min                = 2

countryName_max                = 2

stateOrProvinceName            = State or Province Name (full name)

stateOrProvinceName_default    = GD

…[ req_distinguished_name ]澳门金沙国际,有的重大是颁证时部分暗中同意的值,能够不动

(1) 生成根密钥

# cd /etc/pki/CA/

# openssl genrsa -out private/cakey.pem 2048

为了安全起见,修改cakey.pem私钥文件权限为600或400,也可以动用子shell生成(
umask 077; openssl genrsa -out private/cakey.pem 2048
),上边不再另行。

(2) 生成根证书

# openssl req -new -x509 -key private/cakey.pem -out cacert.pem

会唤起输入一些情节,因为是私家的,所以可以任由输入,最棒记住能与背后保持一致。上边的自签证书cacert.pem应该生成在/etc/pki/CA下。

(3) 为大家的nginx web服务器生成ssl密钥

# cd /etc/nginx/ssl

# openssl genrsa -out nginx.key 2048

大家的CA宗旨与要申请证书的服务器是同一个,不然应当是在另一台要求用到证书的服务器上变化。

(4) 为nginx生成证书签署请求

# openssl req -new -key nginx.key -out nginx.csr

Country Name (2 letter code) [AU]:CN

State or Province Name (full name) [Some-State]:GD

Locality Name (eg, city) []:SZ

Organization Name (eg, company) [Internet Widgits Pty Ltd]:COMPANY

Organizational Unit Name (eg, section) []:IT_SECTION

Common Name (e.g. server FQDN or YOUR name) []:your.domain.com

Email Address []:

Please enter the following ‘extra’ attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

同等会唤起输入一些内容,其它随便,除了Commone
Name一定借使您要赋予证书的服务器域名或主机名,challenge password不填。

(5) 私有CA依据请求来签发证书

# openssl ca -in nginx.csr -out nginx.crt

上面签发进度实际上暗中认可使用了-cert cacert.pem -keyfile
cakey.pem,那四个文件正是前两步生成的放在/etc/pki/CA下的根密钥和根证书。

到此大家已经有所了树立ssl安全连接所急需的有着文件,并且服务器的crt和key都置身配置的目录下,唯有根证书cacert.pem地方不鲜明放在CentOS6下的哪个地点。

经认证以下几个职责卓殊:(Adding trusted root certificates to the
server)

/etc/pki/ca-trust/source/anchors、/etc/pki/ca-trust/source、/etc/pki/ca-trust/extracted、

/etc/pki/ca-trust/extracted/pem/、/etc/pki/tls/certs/cacert.crt

都会报错:

# docker login

Username (sean): sean

2014/11/14 02:32:48 Error response from daemon: Invalid Registry
endpoint: Get : x509:
certificate signed by unknown authority

# curl

curl: (60) Peer certificate cannot be authenticated with known CA
certificates

More details here:

curl performs SSL certificate verification by default, using a “bundle”

of Certificate Authority (CA) public keys (CA certs). If the default

bundle file isn’t adequate, you can specify an alternate file

using the –cacert option.

If this HTTPS server uses a certificate signed by a CA represented in

the bundle, the certificate verification probably failed due to a

problem with the certificate (it might be expired, or the name might

not match the domain name in the URL).

If you’d like to turn off curl’s verification of the certificate, use

the -k (or –insecure) option.

(6) 最近让根证书起效果的只发现3个主意:

# cp /etc/pki/tls/certs/ca-bundle.crt{,.bak}    备份避防出错

# cat /etc/pki/CA/cacert.pem >> /etc/pki/tls/certs/ca-bundle.crt

# curl

“docker-registry server (dev) (v0.8.1)”

将cacert.pem根证书追加到ca-bundle.crt后自然要重启docker后台进度才行。

要是docker login仍然报错certificate signed by unknown
authority,参考Running Docker with
https,运营docker后台进度时钦定亲信的CA根证书:

# docker -d –tlsverify –tlscacert
/etc/pki/CA/cacert.pem或者将cacert.pem拷贝到~/.docker/ca.pem# mkdir
~/.docker && cp /etc/pki/CA/cacert.pem ~/.docker/ca.pem

# docker -d

最棒重启一下registry# docker restart

地点用“若是”是因为一先导总提示certificate signed by unknown
authority,有人说将根证书放在/etc/docker/certs.d下,还有人说运维docker
daemon收出席–insecure-registry ..
但终归是因为版本差距不成功。但后来又神迹般的不须求–tlscacert就好了。

以此地点挣扎了很久,重点关怀一下以此上面多少个issue:

(7) 最后化解:

# docker login

Username: sean

Password:

Email: zhouxiao@domain.com

Login Succeeded

# curl

“docker-registry server (dev) (v0.8.1)”

# docker push registry.domain.com:8000/centos6:test_priv

The push refers to a repository [registry.domain.com:8000/centos6]
(len: 1)

Sending image list

Pushing repository registry.domain.com:8000/centos6 (1 tags)

511136ea3c5a: Image successfully pushed

5b12ef8fd570: Image successfully pushed

68edf809afe7: Image successfully pushed

40627956f44c: Image successfully pushed

Pushing tag for rev [40627956f44c] on
{

但还有一个符合规律没解决,即便曾经得以平常使用,但每一遍请求在nginx的error.log中依旧会有[error]
8299#0: *27 no user/password was provided for basic
authentication,应该是这么些版本docker暂未缓解的bug。

3.3 别的难点(1) docker后台进程意外中断后,重新docker start报错

# docker start b36bd796bd3d

Error: Cannot start container b36bd796bd3d: Error getting container
b36bd796bd3d463c4fedb70d98621e7318ec3d5cd14b2f60b1d182ad3cbcc652

from driver devicemapper: Error mounting
‘/dev/mapper/docker-253:0-787676-b36bd796bd3d463c4fedb70d98621e7318ec3d5cd14b2f60b1d182ad3cbcc652’

on
‘/var/lib/docker/devicemapper/mnt/b36bd796bd3d463c4fedb70d98621e7318ec3d5cd14b2f60b1d182ad3cbcc652’:
device or resource busy

2014/11/08 15:14:57 Error: failed to start one or more containers

经分析爆发那几个题材的原因是做了三个操作:在docker后台进度运行的终点,继续回车后会临时退出后台进度的日志输出,笔者就在这几个shell下使用yum安装软件包,但鉴于互联网原因yum卡住不动,于是本身就另起了二个极限kill了那一个yum进度,不知为啥会潜移默化到表面已经脱离前台输出的docker。消除办法是umount容器的挂载点:(见那里)

# umount
/var/lib/docker/devicemapper/mnt/b36bd796bd3d463c4fedb70d98621e7318ec3d5cd14b2f60b1d182ad3cbcc652

# service docker start  正常

能体会领会的别的2个措施是,运营docker后台进度时,重定向输出docker -d >
/dev/null 2>&1(/var/log/docker已自动记录了一份日记)。

(2) 配置完nginx的docker-registry.conf后开发银行报错

# service nginx start

[emerg] 14714#0: unknown directive “upstream” in
/etc/nginx/conf.d/docker-registry.conf:4

由来是nginx版本太低,一些布署指令不包容,使用yum install
nginx暗中认可安装了1.0.x,卸载重新下载nginx-1.4.7-1.el6.ngx.x86_64.rpm设置化解。

(3) 网络设置代理难题

pull,
push官网的镜像时出于GFW的缘由供给安装代理,但不是http_proxy而是HTTP_PROXY,对于docker来说同时设置那四个值就会出难点,有时由于安装软件包的必要安装http_proxy,就会导致争论。在docker-registry中一经忘记了现阶段哪多个在起功用,找遍全部标题都发觉不了原因,而docker再次回到给我们的不当也麻烦看清。切记~

TO-DO

哪些删除docker-registry的里的镜像

  1. 参考

布署自个儿的私人住房 Docker Registry [英文]

Official docker-registry README

How To Set Up a Private Docker Registry on Ubuntu 14.04

The Docker Hub and the Registry spec

via:

相关文章