一、registry本地仓库

registry本地仓库,其实也是一个容器,直接通过docker container run就可以把仓库运行起来
registry仓库格式:
ip:port/项目名/服务名:版本
192.168.1.106:5000/wenqiang/nginx:v1
docker客户端通过配置/etc/docker/daemon.json指向本地仓库地址,通过docker push 和 docker pull将镜像上传到仓库和从仓库下载镜像

{
    "insecure-registries":["192.168.1.106:5000"]
}

二、基于无验证方式搭建本地仓库

一、在本地仓库的docker服务器上操作
1、修改本地仓库配置文件

# cat /etc/docker/daemon.json 
{
    "registry-mirrors": ["https://5b6y64zz.mirror.aliyuncs.com"],
    
    "insecure-registries": ["192.168.1.106:5000"]      # 这里不要写127.0.0.1会出问题
}

# systemctl daemon-reload 
# systemctl restart docker

2、启动本地仓库容器

(1) 创建本地仓库数据卷
# mkdir /opt/registry
(2) 启动本地仓库容器
# docker container run -d --restart=always -p 5000:5000 -v /opt/registry:/var/lib/registry --name="registry" registry

3、上传镜像到本地仓库

  • 上传镜像的标签格式必须是: ip:port/项目名/服务名:版本
(1) 先查看本地镜像
# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              ae2feff98a0c        3 weeks ago         133 MB

(2) 修改镜像tag
# docker tag centos7.5_nginx:v3  192.168.1.106:5000/wenqiang/centos7.5_nginx:v1

(3) 查看修改后的镜像
# docker image ls
REPOSITORY                         TAG     IMAGE ID            CREATED             SIZE
192.168.1.106:5000/wenqiang/nginx   v1     ae2feff98a0c        3 weeks ago         133 MB
    
(4) 上传镜像到本地仓库
# docker push 192.168.1.106:5000/wenqiang/nginx:v1

(5) 查看仓库内容
# tree /opt/registry/

二、在其他docker服务器上操作
1、在其他docker服务器上下载本地仓库的镜像

(1) 先设置本地仓库地址
# cat /etc/docker/daemon.json 
{
    "registry-mirrors": ["https://5b6y64zz.mirror.aliyuncs.com"],      # 阿里云加速器
    "insecure-registries": ["192.168.1.106:5000"]                      # 指定本地仓库地址
}
# systemctl daemon-reload
# systemctl restart docker

(2) 下载镜像并运行
# docker container run -d --restart=always -p 8080:80 --name="test" 192.168.1.106:5000/wenqiang/nginx:v1

三、基于htpasswd验证方式搭建本地仓库

一、在本地仓库的docker服务器上
1、修改本地仓库配置文件

# cat /etc/docker/daemon.json 
{
    "registry-mirrors": ["https://5b6y64zz.mirror.aliyuncs.com"],
    
    "insecure-registries": ["192.168.1.106:5000"]      # 这里不要写127.0.0.1会出问题
}

# systemctl daemon-reload 
# systemctl restart docker

2、生成本地仓库安全认证

# yum -y install httpd-tools       # 利用http的一个工具做安全认证
# mkdir -p /opt/registry-auth      # 该目录存放生成的认证文件
# htpasswd -Bbn wenqiang wenqiang123 > /opt/registry-auth/htpasswd       # 生成加密文件
# cat /opt/registry-auth/htpasswd 
wenqiang:$2y$05$ZfrdlfrnfVedGV63HJAyrOLgj65qbvTN7psIFrHaVB.QPvhd2PMtO

2、启动本地仓库容器

(1) 创建本地仓库数据卷
# mkdir /opt/registry
(2) 启动本地仓库容器
# docker container run -d --restart=always -p 5000:5000 -v /opt/registry-auth:/auth -v /opt/registry:/var/lib/registry -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" --name="registry" registry
------------------------------------------------------------------------
REGISTRY_AUTH=htpasswd  # 指定认证文件名称
REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm    # 用来注册身份认证
REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd     # 用来指定容器中的认证文件

3、上传镜像到本地仓库

  • 上传镜像的标签格式必须是: ip:port/项目名/服务名:版本
(1) 先查看本地镜像
# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              ae2feff98a0c        3 weeks ago         133 MB

(2) 修改镜像tag
# docker tag centos7.5_nginx:v3  192.168.1.106:5000/wenqiang/centos7.5_nginx:v1

(3) 查看修改后的镜像
# docker image ls
REPOSITORY                         TAG     IMAGE ID            CREATED             SIZE
192.168.1.106:5000/wenqiang/nginx   v1     ae2feff98a0c        3 weeks ago         133 MB

    
(4) 登陆本地仓库(第一次上传镜像需要登陆验证)
# docker login 192.168.1.106:5000
Username: wenqiang
Password: wenqiang123
Login Succeeded
    
(5) 上传镜像到本地仓库
# docker push 192.168.1.106:5000/wenqiang/nginx:v1

(5) 查看仓库内容
# tree /opt/registry/

二、在其他docker服务器上操作
1、在其他docker服务器上下载本地仓库的镜像

(1) 先设置本地仓库地址
# cat /etc/docker/daemon.json 
{
    "registry-mirrors": ["https://5b6y64zz.mirror.aliyuncs.com"],      # 阿里云加速器
    "insecure-registries": ["192.168.1.106:5000"]                      # 指定本地仓库地址
}
# systemctl daemon-reload
# systemctl restart docker

(2) 下载镜像并运行(第一次需要登陆验证)
# docker login 192.168.1.106:5000
Username: wenqiang
Password: wenqiang123
Login Succeeded
# docker container run -d --restart=always -p 8080:80 --name="test" 192.168.1.106:5000/wenqiang/nginx:v1

四、基于harbor的本地仓库

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

环境、软件准备:

系统:Centos 7.9

Python 2.7.5

Docker:version 17.06.2-ce (版本太低无法运行harbor)

Docker-compose:version 1.25.5(负责管理harbor的)

Harbor:version 2.2.0

harbor仓库地址: 192.168.1.106

harbor命令用法 https://blog.csdn.net/clouderpig/article/details/82754020

一、配置docker本地仓库

1、安装docker

2、下载docker-compose

# yum -y install docker-compose
# docker-compose version
docker-compose version 1.25.5, build 8a1c60f6

3、创建https证书(这里可以使用之前k8s颁发的ca证书)

证书有自签名证书和公网证书两种
自签名证书就是通过自建CA的方面,创建签名证书,具有加密的功能,一般仅供内部使用。公网证书是受信任的证书提供商签名的证书,公网证书可以直接使用。内网证书需要导入自签名的CA跟证书才能使用。
最重要的证书有三个:ca.crt、server.key、server.crt
为证书去掉秘钥 https://www.cnblogs.com/zhangmingcheng/p/12753959.html
harbor默认使用的是https的,所以需要自签证书
(1) 创建证书目录,并赋予权限
mkdir -p /data/cert && chmod -R 777 /data/cert && cd /data/cert

(2) 生成server.key (这是证书秘钥)
# openssl genrsa -des3 -out server.key 2048 
Enter pass phrase for harbor.key:             # 输入密码,我这里是wenqiang123
Verifying - Enter pass phrase for harbor.key: # 确认输入密码,我这里是wenqiang123
-----------------------------------------------------------------------------------
# 会让你输入两次密码,要记住这个密码后期可能会频繁输入
# 如果不想输入密码可以使用openssl rsa -in server.key -out server.key来生成server.key

(3) 生成server.csr(这是创建服务器证书的申请文件)
# openssl req -new -key server.key -out server.csr
------------------------------------------------------------------------------------
Enter pass phrase for server.key:                # 输入server.key的密码,我这里是wenqiang123
Country Name (2 letter code) [XX]: CN            # 这里输入国家名称 CN
State or Province Name (full name) []:beijing    # 这里输入省市名称
Locality Name (eg, city) [Default City]:beijing  # 这里输入城市名称
Organization Name (eg, company) [Default Company Ltd]:wenqiang  # 这里输入你的公司名称
Organizational Unit Name (eg, section) []:IT     # 这里输入你的部门
Common Name (eg, your name or your server's hostname) []:hub.wenqiang.com   # 这里输入你的域名
Email Address []:wenqiangit@163.com              # 输入邮箱
A challenge password []:wenqiang123              # 询问密码,我这里是wenqiang123
An optional company name []:wenqiang             # 可选公司名称

(4) 去掉seerver.key的证书密码,防止harbor一直询问导致nginx起不来
# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:  # 输入server.key的密码
             
(5) 生成ca.crt证书(这是证书颁发者)
# openssl req -new -x509 -key server.key -out ca.crt -days 3650
Enter pass phrase for server.key:        # 输入server.key的密码,我这里是wenqiang123
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:wenqiang
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:hub.wenqiang.com
Email Address []:wenqiangit@163.com

(6) 生成server.crt(这是服务器证书,记录着域名信息和10年有效期)
# openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt
Enter pass phrase for server.key:    # 输入server.key秘钥 

(7) 会生成5个文件
# ls /data/cert/
ca.crt  ca.srl  server.crt  server.csr  server.key

4、下载并解压harbor包

建议换成最新版harbor-offline-installer-v2.1.3.tgz

(1) 下载harbor (可以去github翻墙下载)
链接:https://pan.baidu.com/s/1y1BGcEACoM-NFFNNzVDKsA 
提取码:agnb 

(2) 解压harbor
# cd /home/soft/
# tar zxvf harbor-offline-installer-v1.10.1.tgz -C /opt/

5、修改harbor配置文件

# cp harbor.yml harbor.yml.bak
# vim /harbor/harbor.yml
hostname: hub.od.com        # 指定域名或主机ip(不能写127.0.0.1或localhost)
http:                       # 指定http协议(保持默认)
  port: 80                  # 指定仓库端口,注意不要和本机端口冲突
https:                     # 指定https协议(我这里不用https所以注释掉了)
  port: 443                # 指定端口(我这里注释了)
  certificate: /data/cert/server.crt  # 指定ssl 服务器证书
  private_key: /data/cert/server.key  # 指定ssl 证书秘钥
harbor_admin_password: Harbor12345    # 登陆harbor的管理密码,如果公司用要设置复杂点(账号是admin)
database:                   # 最新版用的是pg数据库,老板用的是mysql数据库
    password: root123       # 指定数据库密码(用户名是root)
    max_idle_conns: 50      # 空闲连接池的最大连接数
    max_open_conns: 500     # 连接数据库的最大连接数(默认是100)
data_volume: /data/harbor   # harbor相关数据存放地址
    
# mkdir /data/harbor    

6、运行 ./install.sh安装harbor访问, 可加参数(–with-notary)

 流程:检查环境  ->  导入镜像  -> 准备环境  ->  准备配置(含移除旧版本)->  开始启动

(1) 安装harbor
# ./install.sh
[Step 0]: checking if docker is installed ...
Note: docker version: 19.03.8

[Step 1]: checking docker-compose is installed ...
Note: docker-compose version: 1.23.1

[Step 2]: loading Harbor images ...
...
...
✔ ----Harbor has been installed and started successfully.----

7、重启harbor(通过docker-compose来管理harbor)

(1) 重启harbor,如果有错误多重启几次确保都为done,并且容器状态都为up(不要用restart)
# cd /opt/harbor      # 先进入harbor目录
# docker-compose stop
# docker-compose start
Restarting harbor-jobservice ... done
Restarting nginx             ... done
Restarting harbor-core       ... done
Restarting harbor-portal     ... done
Restarting registryctl       ... done
Restarting registry          ... done
Restarting harbor-db         ... done
Restarting redis             ... done
Restarting harbor-log        ... done

(2) 查看容器是否都启动为up状态
# docker ps -a
CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS                   PORTS                                         NAMES
57fd32514e9b        goharbor/harbor-jobservice:v2.2.0    "/harbor/entrypoin..."   3 minutes ago       Up 3 minutes (healthy)                                                 harbor-jobservice
b56ba657c355        goharbor/nginx-photon:v2.2.0         "nginx -g 'daemon ..."   3 minutes ago       Up 3 minutes (healthy)   0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp   nginx
b12de84ddc58        goharbor/harbor-core:v2.2.0          "/harbor/entrypoin..."   3 minutes ago       Up 3 minutes (healthy)                                                 harbor-core
612bd67f2166        goharbor/redis-photon:v2.2.0         "redis-server /etc..."   3 minutes ago       Up 3 minutes (healthy)                                                 redis
e4ae8dba277d        goharbor/harbor-portal:v2.2.0        "nginx -g 'daemon ..."   3 minutes ago       Up 3 minutes (healthy)                                                 harbor-portal
f3a0827258f6        goharbor/registry-photon:v2.2.0      "/home/harbor/entr..."   3 minutes ago       Up 3 minutes (healthy)                                                 registry
0cef40a3ee68        goharbor/harbor-db:v2.2.0            "/docker-entrypoin..."   3 minutes ago       Up 3 minutes (healthy)                                                 harbor-db
dde75d1516f1        goharbor/harbor-registryctl:v2.2.0   "/home/harbor/star..."   3 minutes ago       Up 3 minutes (healthy)                                                 registryctl
f0c50b494629        goharbor/harbor-log:v2.2.0           "/bin/sh -c /usr/l..."   3 minutes ago       Up 3 minutes (healthy)   127.0.0.1:1514->10514/tcp                     harbor-log

(3) 查看本地端口是否监听成功
# netstat  -npult|grep docker
tcp        0      0 127.0.0.1:1514          0.0.0.0:*               LISTEN      2204/docker-proxy   
tcp6       0      0 :::443                  :::*                    LISTEN      2722/docker-proxy   
tcp6       0      0 :::80                   :::*                    LISTEN      2734/docker-proxy 

8、自定义harbor监听端口(如果本地端口有冲突可以通过这里修改)

[root@localhost harbor]# vim docker-compose.yml
 
 proxy:
    image: goharbor/nginx-photon:v1.7.1
    container_name: nginx
    restart: always
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
      - NET_BIND_SERVICE
    volumes:
      - ./common/config/nginx:/etc/nginx:z
    networks:
      - harbor
    dns_search: .
    ports:
      - 80:8080      # 这里nginx容器端口是8080,宿主机端口是80,如果本地已经使用了80端口可以改成其他端口
      - 443:443
      - 4443:4443
    depends_on:
      - postgresql
      - registry
      - core
      - portal
      - log
    logging:
      driver: "syslog"
      options:
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "proxy

9、配置镜像仓库地址

(1) 绑定hosts
# cat /etc/hosts|tail -1
192.168.1.106 hub.wenqiang.com

(2) 修改仓库地址
# vim /etc/docker/daemon.json 

{
    "registry-mirrors": ["https://5b6y64zz.mirror.aliyuncs.com"],
    "insecure-registries": ["hub.wenqiang.com"]   # 这里是harbor本地仓库的访问地址
}

(3) 重启docker服务和harbor服务
# systemctl daemon-reload 
# systemctl restart docker
# docker-compose stop
# docker-compose start

10、登陆harbor,并创建公开项目镜像仓库(用户名admin 密码wenqiang123)

    客户机绑定hosts服务 echo "192.168.1.106  hub.wenqiang.com" >> /etc/hosts

在这里插入图片描述
11、上传本地镜像到本地harbor仓库

(1) 随便找一个本地镜像
# docker image ls
nginx        latest     ae2feff98a0c        4 weeks ago         133MB

(2) 修改标签
# docker tag nginx hub.wenqiang.com/project1/nginx:v2
# docker image ls
hub.wenqiang.com/project1/nginx    v2      ae2feff98a0c        4 weeks ago         133MB

(3) 登陆本地仓库(这里的地址是daemon.json里面写的本地仓库地址,用户名admin 密码wenqiang123)
# docker login hub.wenqiang.com
Username: admin
Password: 
Login Succeeded

(4) 上传镜像
# docker push hub.wenqiang.com/op/nginx:v2

12、访问harbor查看上传的镜像
在这里插入图片描述
13、对于harbor仓库这里只使用镜像仓库功能,其他的不做研究

二、客户端配置

1、下载docker 01-yum安装指定版本docker
2、配置本地仓库地址

(1) 绑定hosts
# cat /etc/hosts|tail -1
192.168.1.106 harbor.od.com   # 192.168.1.106是harbor本地仓库地址

(2) 指定harbor仓库地址
# cat /etc/docker/daemon.json 
{
    "registry-mirrors": ["https://5b6y64zz.mirror.aliyuncs.com"],
    "insecure-registries": ["192.168.1.106:5000","harbor.od.com"]   # 指向harbor仓库地址,可以写多个
} 

(3) 重启docker
# systemctl restart docker

(4) 连接harbor服务器
# docker login hub.wenqiang.com
Username: admin
Password: 
Login Succeeded

(5) 拉镜像
# docker pull  hub.wenqiang.com/project1/nginx:v2

三、重新安装harbor

(1) 停止harbor
# docker-compose stop

(2) 删除harbor容器和镜像
# docker-compose down  -v
# docker rmi `docker images |awk '{print $3}'`
# docker rm -f `docker ps -a|awk '{print $1}'`

(3) 删除harbor数据目录
# rm -rf /data/harbor

(4) 删除harbor安装文件
# rm -rf /opt/harbor*

(5) 重新安装harbor
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐