docker搭建本地仓库
一、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
更多推荐
所有评论(0)