0
点赞
收藏
分享

微信扫一扫

Docker 镜像仓库

RIOChing 03-24 17:00 阅读 2

目录

1、搭建私有 registry

服务端创建镜像仓库

客户端推送镜像

镜像导入导出

2、Nginx 代理 registry 仓库

SSL 证书 & https 协议

SSL证书

https协议

SSL 的验证流程

客户端安装 Nginx

使用 openssl 生成CA根证书和根证书key

创建 Nginx 服务证书

配置启动 Nginx

服务端配置 docker

上传镜像

registry 仓库镜像删除

3、Harbor 仓库搭建

Docker-compose

创建 Harbor 服务证书

部署 Harbor

配置 Nginx 代理 Harbor

上传镜像


1、搭建私有 registry

主机名

ip

安装服务

角色

node-10

192.168.137.110

docker

Registry客户端

node-11

192.168.137.111

docker,Registry

Registry服务器

服务端创建镜像仓库
# 服务端拉取Registry镜像
[root@node-11 ~] docker pull registry
mkdir -p /data/docker/registry

# 启动Registry仓库
docker run -d --name registry1 --restart=always -p 5000:5000 \
-v /data/docker/registry:/var/lib/registry registry

# 查看仓库中的镜像
curl -X GET http://192.168.137.111:5000/v2/_catalog

客户端推送镜像

修改images仓库中镜像的名字

在镜像名字前加registry仓库地址和端口, 使之和registry仓库地址匹配, 只有Docker Hub 上的官方镜像可以省略仓库地址和项目名字,因为默认镜像下载地址就是docker hub

# 修改images仓库中镜像的名字
docker tag centos:7 192.168.137.111:5000/centos7:v1

客户端添加私有仓库地址:vim /etc/docker/daemon.json

{
  "insecure-registries": ["192.168.137.111:5000"],
  "registry-mirrors": ["https://w0ckwo1v.mirror.aliyuncs.com"]
}
----------------------------------------------------------------

# 重启docker
systemctl restart docker

推送镜像到镜像仓库

docker push 192.168.137.111:5000/centos7:v1

# 查看仓库中的镜像
curl -X GET http://192.168.137.111:5000/v2/_catalog

测试拉取私有仓库镜像

# 删除有原有镜像
docker rmi 192.168.137.111:5000/centos7:v1 

# 拉取私有仓库镜像
Docker pull 192.168.137.111:5000/centos7:v1

镜像导入导出
# 导出镜像
docker save -o centos7.tar centos:7

# 删除原有镜像
docker rmi centos:7

# 导入镜像
docker load < centos-7.tar	 |   docker load -i centos-7.tar 

2、Nginx 代理 registry 仓库
SSL 证书 & https 协议
SSL证书
https协议

SSL 证书,也称为 SSL 服务器证书,是遵守 SSL 协议的一种数字证书,由全球信任的证书颁发机构 (CA) 验证服务器身份后颁发,将 SSL 证书安装在网站服务器上,可以使用https加密协议访问网站。

ssl证书用来认证服务器真实身份,钓鱼欺诈网站泛滥,用户如何识别网站是钓鱼网站还是安全网站?网站部署全球信任的SSL证书后,浏览器内置安全机制,实时查验证书状态,通过浏览器向用户展示网站认证信息,让用户轻松识别网站真实身份,防止钓鱼网站仿冒。

https协议可以看成是HTTP+SSL的结合体,https实现网站加密传输,用户通过http协议访问网站时,浏览器和服务器之间是明文传输,这就意味着用户填写的密码、帐号、交易记录等机密信息都是明文,随时可能被泄露、窃取、篡改,被黑客加以利用。网站安装SSL证书后,使用https加密协议访问网站,可激活客户端浏览器到网站服务器之间的"SSL加密通道"(SSL协议),实现高强度双向加密传输,防止传输数据被泄露或篡改。

SSL 的验证流程

使用证书认证比我们之前秘钥认证多了一个用户浏览器访问证书颁发机构验证服务器颁发公钥的合法性。浏览器默认集成了证书颁发机构。

证书认证采用非对称加密,公钥和私钥都可以用来加密数据,用另一个解开,公钥加密数据,然后私钥解密的情况被称为加密解密,私钥加密数据,公钥解密一般被称为签名和验证签名

客户端安装 Nginx

主机名

ip

安装服务

角色

node-10

192.168.137.110

docker、Nginx

Registry客户端

node-11

192.168.137.111

docker,Registry

Registry服务器

# 安装nginx依赖包
yum -y install pcre-devel zlib-devel openssl openssl-devel epel-release

# 安装nginx
yum install -y nginx

使用 openssl 生成CA根证书和根证书key

如果你有经过认证机构认证的证书,则直接使用将证书放入nginx目录下即可。如果没有,则使用openssl创建自签名证书

查看ca证书默认配置:cat /etc/pki/tls/openssl.cnf

vim /etc/pki/tls/openssl.cnf
-----------------openssl.cnf---------------------------
req_extensions = v3_req
-----------------openssl.cnf---------------------------

创建根证书key

cd /etc/pki/CA/
openssl genrsa -out private/cakey.pem 2048

# 生成根证书
openssl req -new -x509 -key private/cakey.pem -days 3650 -out cacert.pem

req

证书请求的子命令,请求生成证书

x509

表示输出证书,X509是通用的证书文件格式

days

证书有效期

OpenSSL生成密钥文件的格式就只有PEM和DER两种格式,PEM的是将密钥用base64编码(base64就是一种基于64个可打印字符来表示二进制数据的方法)表示出来的,直接打开你能看到一串的英文字母,DER格式是二进制的密钥文件

创建 Nginx 服务证书
[root@node-10 CA] mkdir /etc/pki/CA/ssl
cd /etc/pki/CA/ssl/
openssl genrsa -out nginx.key 2048

为nginx web服务器生成证书签署请求

# 为nginx web服务器生成证书签署请求
[root@cong10 ssl] openssl req -new -key nginx.key -out nginx.csr

Common Name一定要是访问nginx的web服务器的域名。这里使用registry.test.com域名访问后端镜像仓库。

创建证书序列号文件、证书索引文件:第一次创建的时候需要给予证书序列号

[root@node-10 ssl] touch /etc/pki/CA/{serial,index.txt}
echo 00 > /etc/pki/CA/serial

# 使用私有CA根据请求签发服务端证书
openssl ca -in nginx.csr -keyfile /etc/pki/CA/private/cakey.pem -cert \
/etc/pki/CA/cacert.pem -days 3650 -out nginx.crt

配置启动 Nginx

编写nginx配置文件:vim /etc/nginx/nginx.conf

upstream docker-registry {
     ip_hash;
     server 192.168.137.111:5000;
     server 192.168.137.111:5001;
}
server {
    listen       80;
    listen       [::]:80;
    server_name  registry.test.com;

    location / {
            return 301 https://$host$request_uri;
    }

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    error_page 404 /404.html;
    location = /404.html {
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }
}

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  registry.test.com;

    ssl_certificate /etc/pki/CA/ssl/nginx.crt;
    ssl_certificate_key /etc/pki/CA/ssl/nginx.key;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
       auth_basic "Registry realm";
       auth_basic_user_file /etc/nginx/nginx.htpasswd;
       proxy_pass http://docker-registry;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forward-Proto $scheme;
       proxy_connect_timeout 900;
       proxy_read_timeout 900;
       proxy_send_timeout 900;
    }

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }    
}

配置nginx认证

yum -y install httpd-tools
htpasswd -bc /etc/nginx/nginx.htpasswd admin 123456

启动 Nginx

# 启动nginx
systemctl enable nginx
systemctl start nginx

# 查看nginx端口
netstat -antup | grep nginx

配置hosts解析

vim /etc/hosts
192.168.137.110 registry.test.com

访问测试

# curl命令访问
curl -k -u admin:123456 https://registry.test.com/v2/_catalog

服务端配置 docker

添加hosts解析

[root@node-11 ~] vim /etc/hosts
192.168.137.110 registry.test.com

添加registry仓库

[root@node-11 ~] vim /etc/docker/daemon.json
{
  "insecure-registries": ["https://registry.test.com"],
  "registry-mirrors": ["https://0u0do0ns.mirror.aliyuncs.com"]
}

注意:如果有多个私有仓库,请在insecure-registries列表里使用逗号分隔

重启docker

systemctl restart docker

# 登陆registry仓库
docker login https://registry.test.com

上传镜像
# 给busybox镜像打标签
docker tag busybox registry.test.com/busybox

# 推送镜像
docker push registry.test.com/busybox

# 查看仓库镜像
curl -k -u admin:123456 https://registry.test.com/v2/_catalog
curl -k -u admin:123456 'https://registry.test.com/v2/busybox/tags/list'

registry 仓库镜像删除
# 删除repo
docker exec registry1 rm -rf /var/lib/registry/docker/registry/v2/repositories/centos7

# 清除blob
docker exec registry1 registry garbage-collect /etc/docker/registry/config.yml

# 查看registry仓库镜像
curl -k -u admin:123456 https://registry.test.com/v2/_catalog

3、Harbor 仓库搭建

项目地址:GitHub - goharbor/harbor: An open source trusted cloud native registry project that stores, signs, and scans content.

Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能,具有web管理功能,操作其实是非常简单易行的。

Harbor是一个基于Apache协议的开源软件,主要开发语言为go,harbor本身也是基于docker镜像,使用docker-compose来进行编排部署。

https://github.com/goharbor/harbor/releases/download/v2.6.0/harbor-online-installer-v2.6.0.tgz

Docker-compose

项目地址: https://github.com/docker/compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,你可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用docker-compose up,就可以从YML 文件配置中创建并启动所有服务。

# Docker-compose下载(新版本docker集成compose,无需安装)
curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

# 查看docker-compose版本
docker-compose -v
#新版本docker compose使用方法
[root@node-11 ~] docker compose version 

创建 Harbor 服务证书
[root@node-10 ssl] mkdir /etc/pki/CA/harbor && cd /etc/pki/CA/harbor
openssl genrsa -out harbor.key 2048

# 为harbor服务器生成证书签署请求
openssl req -new -key harbor.key -out harbor.csr

# 使用私有CA根据请求签发服务端证书
openssl ca -in harbor.csr -keyfile /etc/pki/CA/private/cakey.pem -cert \
/etc/pki/CA/cacert.pem -days 3650 -out harbor.crt

# 拷贝证书到cong12
scp -r /etc/pki/CA/harbor/ 192.168.137.111:/etc/pki/CA

部署 Harbor

解压软件包

tar -zxvf harbor-online-installer-v2.6.0.tgz -C /usr/local/
ls /usr/local/harbor/

配置文件harbor.yml

cd /usr/local/harbor/
mv harbor.yml.tmpl harbor.yml 
vim harbor.yml 
--------------------- harbor.yml -----------------------
hostname: 192.168.137.111
https:
  # https port for harbor, default is 443
  port: 443
  # The path of cert and key files for nginx
  certificate: /etc/pki/CA/harbor/harbor.crt
  private_key: /etc/pki/CA/harbor/harbor.key
--------------------- harbor.yml -----------------------

安装Harbor仓库

./install.sh

# 查看Harbor依赖的镜像及其健康状况
docker-compose -f docker-compose.yml ps

登录Harbor并创建羡慕:账户为admin ,密码为 Harbor12345,该密码的初始配置在harbor.yml文件中

点击镜像仓库可以看到推送命令,这里包含有docker以及k8s的Helm

配置 Nginx 代理 Harbor

添加harbor.conf:[root@node-10 ~] vim /etc/nginx/conf.d/harbor.conf

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  harbor.test.com;

    ssl_certificate /etc/pki/CA/harbor/harbor.crt;
    ssl_certificate_key /etc/pki/CA/harbor/harbor.key;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;	
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
           proxy_pass https://192.168.137.111;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forward-Proto $scheme;
           proxy_connect_timeout 900;
           proxy_read_timeout 900;
           proxy_send_timeout 900;
       }

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }    
}
---------------------------------------------

# 重载 nginx
nginx -s reload

修改hosts:vim /etc/hosts

192.168.137.110 harbor.test.com

添加harbor仓库:vim /etc/docker/daemon.json

{
  "insecure-registries": ["192.168.137.111:5000","https://harbor.test.com"],
  "registry-mirrors": ["https://0u0do0ns.mirror.aliyuncs.com"]
}

-----------------------------------------------
# 重启docker
[root@node-10 ~] systemctl restart docker

上传镜像

推送镜像

# 登陆harbor
[root@node-10 ~] docker login https://harbor.test.com

# 推送镜像
[root@node-10 ~] docker tag busybox:latest harbor.test.com/docker/busybox:v2
[root@node-10 ~] docker push harbor.test.com/docker/busybox:v2

拉取镜像

docker pull harbor.test.com/docker/busybox:v1

举报

相关推荐

0 条评论