Harbor私有仓库搭建和镜像变量处理
在win11上构建harbor私有镜像仓库,方便后续为k8s集群提供镜像。
由于办公电脑不能安装vmware,通过开启wsl功能搭建harbor。
wsl介绍:
https://baike.baidu.com/item/wsl/20359185?fr=ge_ala
安装wsl:
Win+R:
wsl --install
该命令会直接安装ubuntu22.04。
由于每次关机之后,wsl也会关闭,需要设置开机自启动。(每次在cmd命令行界面上键入wsl即可进入ubuntu命令行)
可以通过wsl –shutdown 来关闭wsl
设置wsl开机自启动:
按键盘Win+r 启动运行,输入shell:startup,转到Windows“启动”目录,新建文件wsl_run.vbs(文件名自命名,扩展名是vbs就行),并保存以下内容(Ubuntu-20.04是wsl子系统名子,根据自己的改)。
Set ws = CreateObject("Wscript.Shell")
ws.run "wsl -d Ubuntu-20.04", vbhide
安装harbor:安装之前需要自行安装docker-compose
在ubuntu命令行中编辑一个sh脚本,键入以下代码,自动拉起harbor镜像服务:
vi harbor.sh
#!/bin/bash
#!/bin/bash
# 执行命令遇到错误就退出
set -e
# 脚本中遇到不存在的变量就退出
# set -u
# 执行指令的时候,同时把指令输出,方便观察结果
set -x
# 执行管道的时候,如果前面的命令出错,管道后面的命令会停止
set -o pipefail
HARBOR_IPADDR=192.168.11.20
HARBOR_PASSWORD=harbor666
HARBOR_VERSION=v2.8.2
在线安装,也就是通过网络下载镜像
wget https://ghproxy.com/https://github.com/goharbor/harbor/releases/download/${HARBOR_VERSION}/harbor-online-installer-${HARBOR_VERSION}.tgz
tar -zxvf harbor-online-installer-${HARBOR_VERSION}.tgz && cd harbor
离线安装,也就是镜像在压缩包当中
#wget https://ghproxy.com/https://github.com/goharbor/harbor/releases/download/${HARBOR_VERSION}/harbor-offline-installer-${HARBOR_VERSION}.tgz
#tar -zxvf harbor-offline-installer-${HARBOR_VERSION}.tgz && cd harbor
修改hostname
sed -i "s/hostname.*/hostname: ${HARBOR_IPADDR}/g" harbor.yml.tmpl
修改Harbor管理员密码
sed -i "s/harbor_admin_password.*/harbor_admin_password: ${HARBOR_PASSWORD}/g" harbor.yml.tmpl
注释https
sed -i "s/^https:/#https:/g" harbor.yml.tmpl
sed -i "s/port: 443/#port: 443/g" harbor.yml.tmpl
sed -i "s@certificate: /your/certificate/path@#certificate: /your/certificate/path@g" harbor.yml.tmpl
sed -i "s@private_key: /your/private/key/path@#private_key: /your/private/key/path@g" harbor.yml.tmpl
mv harbor.yml.tmpl harbor.yml
./prepare
./install.sh
docker compose down && docker compose up –d
在宿主机上登录harbor:
http:// 172.24.150.71
在黑屏模式下登录harbor准备上传镜像:
docker login http:// 172.24.150.71
报错:
root@8sfork:/usr/lib/systemd/system# docker login 172.24.150.71
Username: admin
Password:
Error response from daemon: Get "https://172.24.150.71/v2/": dial tcp 172.24.150.71:443: connect: connection refused
原因是docker不支持https,支持http的方式登录
解决方式:
修改/etc/docker/daemon.json文件,加入如下两行,
{"insecure-registries":["http://172.24.150.71"],"registry-mirrors":["https://reg-mirror.qiniu.com/"]}
重启docker:
root@8sfork:/usr/lib/systemd/system# systemctl daemon-reload
root@8sfork:/usr/lib/systemd/system# systemctl restart docker
重新拉起harbor集群:
docker start $(docker ps -qa)
再次登录
docker login
root@8sfork:/usr/lib/systemd/system# docker login http://172.24.150.71
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
在宿主机上直接拉取nginx容器,启动容器:
docker pull nginx
docker run -itd --name mynginx --restart unless-stopped --cpus=1 -m 512M -p 8001:80 -v /mnt/c/k8s/mydir/nginx:/etc/nginx/ -v /mnt/c/k8s/mydir/html:/usr/share/nginx/html/ nginx:latest
通过修改映射后的目录html中nginx的index.html文件内容,再将mynginx容器打包成不同的镜像版本,如v1、v2、v3、v4
如下:
Ngx镜像v1版本:
设置index.html内容为this is mynginx:v1 ,将容器打包为v1版本的nginx镜像:
cd /mnt/c/k8s/mydir/html && echo ‘this is mynginx:v1’ > index.html
打包:
docker commit 6f7c03177381 mynginx:v1
打标签:
docker tag mynginx:v1 172.24.150.71/myitem/mynginx:v1
在harbor上新建项目myitem,将v1的镜像推送到harbor:
docker push 172.24.150.71/myitem/mynginx:v1
返回harbor上查看,已经成功推送到harbor上了
通过在index.html中写入不同的内容,以相同的方式制作v2、v3、v4版本的nginx镜像,方便后续k8s实验使用。
如下:
构建mysql镜像:
docker pull mysql
启动一个初始mysql容器:
docker run --name mymysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /mnt/c/k8s/mydir/mysql/my.cnf:/etc/my.cnf -d mysql:latest
配置my.cnf 修改mysql参数,登录容器配置用户修改密码等:
docker exec -it mymysql mysql -u root –p
mysql> CREATE USER 'fork'@'%' IDENTIFIED BY 'fork';
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'fork'@'%';
Query OK, 0 rows affected (0.02 sec)
再将该容器保存为新的镜像:
docker commit mymysql mymysql:v1
打标签
docker tag mymysql:v1 172.24.150.71/myitem/mymysql:v1
推送
docker push 172.24.150.71/myitem/mymysql:v1
############################################################################
创建带变量的mysql容器镜像
设置动态变量:
可以在dockerfile中指定ENV参数来配置动态环境变量,即可在启动镜像的时候填入任意变量值启动容器。
格式如下:
cat Dockerfile
…
FROM ……
ENV test=${test}
…
通过docker built –t . 重新构建镜像层
配置静态变量:
ENV test=值 直接写固定值即可。