Docker-Hubor私有镜像仓库的搭建

1.准备

Docker-HubgitHub上的项目地址的安装文档:
https://goharbor.io/docs/2.0.0/install-config/installation-prereqs/https://github.com/goharbor/harbor

安装前需要准备如下环境配置:

下载的离线的安装包的版本如下:



2.安装docker省略

尽量安装docker的版本新一点,比如20.x,具体安装请查看前几篇文章。
windows10下安装docker且使用wsl2安装双系统并构建最小jre镜像和应用镜像
CentOs7.9安装Docker,SpringBoot项目分层构建镜像


3.安装docker-compose

参考:

http://www.apgblogs.com/centos7-docker/

方式一:

#下载docker-composesudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose添加docker-compose运行权限sudo chmod +x /usr/local/bin/docker-compose

方式二:

yum install docker-compose -y查看docker-compose版本docker-compose --version


4.自签TLS证书

官方自签证书文档地址:

https://goharbor.io/docs/2.0.0/install-config/configure-https/

参考:

https://cloud.tencent.com/developer/article/1618468

将hub的包上传到vm(安装了CentOs7.x的虚拟机上)上,解压:

在解压的home目录下创建一个ssl的目录用于存放生成的证书:

修改主机名

Vi /etc/hostsIp 主机名

自签证书步骤如下:

1、openssl genrsa -out ca.key 4096
2openssl req -x509 -new -nodes -sha512 -days 3650 \ -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=bigfei.com" \ -key ca.key \ -out ca.crt
3、openssl genrsa -out bigfei.com.key 40964openssl req -sha512 -new \ -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=bigfei.com" \ -key bigfei.com.key \-out bigfei.com.csr
5 openssl x509 -req -sha512 -days 3650 \ -CA ca.crt -CAkey ca.key -CAcreateserial \ -in bigfei.com.csr \ -out bigfei.com.crt
6 cat > v3.ext <<-EOFauthorityKeyIdentifier=keyid,issuerbasicConstraints=CA:FALSEkeyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEnciphermentextendedKeyUsage = serverAuthsubjectAltName = @alt_names
[alt_names]DNS.1=bigfei.comDNS.2=bigfeiEOF
7 openssl x509 -req -sha512 -days 3650 \ -extfile v3.ext \ -CA ca.crt -CAkey ca.key -CAcreateserial \ -in bigfei.com.csr \ -out bigfei.com.crt
cp bigfei.com.crt /data/cert/cp bigfei.com.key /data/cert/
9 在/data/cert/路径下执行 openssl x509 -inform PEM -in bigfei.com.crt -out bigfei.com.cert
10 在etc/docker/mkdir -p ./certs.d/bigfei.com/cp bigfei.com.cert /etc/docker/certs.d/bigfei.com/cp bigfei.com.key /etc/docker/certs.d/bigfei.com/cp ca.crt /etc/docker/certs.d/bigfei.com/
11  systemctl restart docker

这一步才是最难的。



5.Docker-Hub的安装与配置

解压缩之后,目录下会生成harbor.conf文件,该文件就是Harbor的配置文件

## Configuration file of Harbor
# hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhosthostname = 172.33.16.1   #需要根据实际情况手动修改 # 访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置onui_url_protocol = http
 # mysql数据库root用户默认密码root123,实际使用时修改下db_password = root123
max_job_workers = 3 customize_crt = onssl_cert = /data/cert/server.crtssl_cert_key = /data/cert/server.keysecretkey_path = /dataadmiral_url = NA
# 邮件设置,发送重置密码邮件时使用email_identity = email_server = smtp.mydomain.comemail_server_port = 25email_username = sample_admin@mydomain.comemail_password = abcemail_from = admin email_ssl = false # 启动Harbor后,管理员UI登录的密码,默认是Harbor12345harbor_admin_password = Harbor12345
# 认证方式,这里支持多种认证方式,如LADP、本次存储、数据库认证。默认是db_auth,mysql数据库认证auth_mode = db_auth
# LDAP认证时配置项#ldap_url = ldaps://ldap.mydomain.com#ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com#ldap_search_pwd = password#ldap_basedn = ou=people,dc=mydomain,dc=com#ldap_filter = (objectClass=person)#ldap_uid = uid #ldap_scope = 3 #ldap_timeout = 5# 是否开启自注册self_registration = on# Token有效时间,默认30分钟token_expiration = 30# 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员)project_creation_restriction = everyoneverify_remote_cert = on

执行如下命令安装前配置准备:

执行:sudo ./install.sh 安装

遇到如下错误:

解决方法:这个报错说的是你当前的docker版本太低,所以只要去重新安装一个高版本的docker到这一步就不会报错了

https://github.com/goharbor/harbor/issues/2317

配置软连接:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

启动Harbor服务:

Restart Harbor:

docker-compose up -d#-d表示后台运行

停止并删除现有实例:

如果Harbor正在运行,执行以下命令,可以停止并删除现有实例。If Harbor is running, stop and remove the existing instance.Your image data remains in the file system, so no data is lost.数据保留在文件系统中,因此不会丢失任何数据。docker-compose down -v


6.宿主机访问docker-hub主页

修改本机的hosts的域名和ip的映射

账户:admin

密码:123456



7.其它虚拟docker环境登录hubor

登录出现这个问题:

参考:https://blog.csdn.net/tink_bell/article/details/89329791Error response from daemon: Get https://bigfei.com/v2/: dial tcp 192.168.23.128:443: connect: connection refused

报这个错误可能有如下2个原因:

   1)是端口错了

   2)未在docker启动文件中添加--insecure-registry信任关系!大多数这个错误是第2个原因,因为你没有添加信任关系的话,docker默认使用的是https协议,所以端口不对(443),会报连接拒绝这个错误;或者提示你 "服务器给HTTPS端的是HTTP响应" 这个错误,因为你没添加端口信任,服务器认为这是默认的https访问,返回的却是http数据!

解决方法:

正确的添加信任关系包括端口号:注:记住,这是harbor镜像仓库,而不是单纯的registry容器仓库!如果你用的是默认的80端口,则不需要加,或者加上80也行,而不是5000这个端口![root@localhost harbor]# tee /etc/docker/daemon.json <<-'EOF'> {>   "insecure-registries": [>     "xxxxx"    #harbor服务主机ip,如果不是80端口,一定要把端口同时添加进去>   ]> }> EOF

重启docker:

systemctl daemon-reload systemctl restart docker

进入hubor路径下重启docker-hub:

docker-compose down -v docker-compose up -d

# 指定用户名和密码登录:docker  login  -u  bigfei.com -p xxxxx  # 免密登录:docker  login  bigfei.com# 其它docker主机登录还需要将hubor主机上的证书拷贝到cp bigfei.com.crt  /etc/docker/certs.d/bigfei.com/


8.推送镜像

在项目中标记镜像:

docker tag SOURCE_IMAGE[:TAG] bigfei.com/myhub/IMAGE[:TAG]

推送镜像到当前项目:

docker push bigfei.com/myhub/IMAGE[:TAG]

将自制的最小的jre8的镜像推送到私有Docker-hub仓库中如下图所示:



9.通过dockerfile构建JDK最小镜像前奏

构建前准备:
参看操作系版本及位数:
# 参考:https://www.cnblogs.com/woshimrf/p/5883037.htmluname -a
选择跟当前系统匹配的JDK版本:
# jdk8官网下载地址:https://www.java.com/en/download/linux_manual.jsp# 最新jdk官网下载地址:17/18https://www.oracle.com/java/technologies/downloads/
下载jdk8的Linux(CentOs)安装包如下:

9.1 解压jre

tar -zxvf jre-8u271-linux-x64.tar.gz


9.2 删除无用文件

# cd /jre1.8.0_271/# rm -rf COPYRIGHT LICENSE README release THIRDPARTYLICENSEREADME-JAVAFX.txt THIRDPARTYLICENSEREADME.txt Welcome.html# rm -rf   lib/plugin.jar \           lib/ext/jfxrt.jar \           bin/javaws \           lib/javaws.jar \           lib/desktop \           plugin \           lib/deploy* \           lib/*javafx* \           lib/*jfx* \           lib/amd64/libdecora_sse.so \           lib/amd64/libprism_*.so \           lib/amd64/libfxplugins.so \           lib/amd64/libglass.so \           lib/amd64/libgstreamer-lite.so \           lib/amd64/libjavafx*.so \           lib/amd64/libjfx*.so

9.3 重新打包
tar zcvf jre1.8.0_271.tar.gz *

将该压缩包mv 到 ~下


9.4 需要准备一个Dockerfile文件和local.md文件:



9.5 构建中需要解决两问题:
一是时区的问题

二是中文乱码的问题
Dockerfile构建文件中含有如下的命令:


9.6 构建最小jre的docker镜像

docker  build  -t  zlf/jre:1.8  -f  Dockerfile_jre1.8.0_271  .


9.7 测试最小jre的docker镜像

docker run -it  zlf/jre:1.8

时间同步验证如下:

中文乱码验证如下:


9.8 构建业务镜像使用ADD命令的一个问题及解决办法:
docker run Error: Invalid or corrupt jarfile /xxxx.jar出现的英文invalid or corrupt jarfile /app.jar,中文意思是jarfile/app.jar无效或损坏

ADD指令说明:
ADD指令的功能是将主机构建环境(上下文)目录中的文件和目录、以及一个URL标记的文件 拷贝到镜像中。其格式是:ADD 源路径 目标路径如果源路径是个文件,且目标路径是不是以 / 结尾,则docker会把目标路径当作一个文件。如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件;所以此处犯的错误就是,目标路径app.jar不是一个路径,需要加上“/”,然后就可以成功构建业务镜像了。


参考:

https://www.cnblogs.com/panwenbin-logs/p/10218099.htmlhttps://www.cnblogs.com/liabio/p/11696083.html


请使用浏览器的分享功能分享到微信等