Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >harbor源码分析之构建工具make(五)

harbor源码分析之构建工具make(五)

原创
作者头像
暮雨
修改于 2018-11-05 02:50:57
修改于 2018-11-05 02:50:57
1.8K00
代码可运行
举报
文章被收录于专栏:云端漫步云端漫步
运行总次数:0
代码可运行

make介绍

make是一个构建工具,现在前端的构建工具有很多.像gulp,grunt等等,它们常被用在前端项目中.在后端领域常使用make来做构建这件事情.

具体的用法说明,可以阅读阮一峰写的Make 命令教程

harbor make文件解析

在完成了以上make教程的学习之后,再来读这个makefile,应该难度也不大。

大体上分为四大模块,编译,构建,安装,清除

这里提供了两种编译方式,本地编译和容器编译

本地编译: go build -o 编译结果路径 源码文件路径

容器编译: docker run --rm -v 源码路径:容器挂载路径 -w 工作目录 golandImage go build -o 可执行路径

harbor的UI页面是使用angular4编写的,这里需要对angular的代码进行构建打包,这里是通过容器进行构建打包,通过目录挂载的方式,加载到ui组件下的static目录下。

docker run --rm -v src/ui/static:/clarity-seed/dist -v src/ui_ng/src:/clarity-seed/src angularImage /bin/bash /entrypoint.sh

看一下容器中运行的打包脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
set -e

cd /clarity-seed
rm -rf dist/*

npm_proxy=

while getopts p: option
do
    case "${option}"
    in
		p) npm_proxy=${OPTARG};;
    esac
done

if [ ! -z "$npm_proxy" -a "$npm_proxy" != " " ]; then
	npm config set proxy $npm_proxy
fi

npm install
ng build

cp -r ./src/i18n/ dist/

至此,完成了对编译模块的解析,接来下,看一下构建模块

harbor使用容器的方式部署,build将编译后的exec文件通过docker copy的方式加载到相应的组件中。

在这里单独用了一个脚本用于镜像的构建。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM library/photon:1.0

RUN mkdir /harbor/
COPY ./make/dev/adminserver/harbor_adminserver /harbor/

RUN chmod u+x /harbor/harbor_adminserver
WORKDIR /harbor/
ENTRYPOINT ["/harbor/harbor_adminserver"]

harbor的db也容器化,通过一个dockerfile在容器中运行一个 shell脚本完成db的初始化。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
set -e

if [ ! -d '/var/lib/mysql/mysql' -a "${1%_safe}" = 'mysqld' ]; then
	if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" ]; then
		echo >&2 'error: database is uninitialized and MYSQL_ROOT_PASSWORD not set'
		echo >&2 '  Did you forget to add -e MYSQL_ROOT_PASSWORD=... ? v2'
		exit 1
	fi
	
	mysql_install_db --user=mysql --datadir=/var/lib/mysql
	
	# These statements _must_ be on individual lines, and _must_ end with
	# semicolons (no line breaks or comments are permitted).
	# TODO proper SQL escaping on ALL the things D:
    printf -v MYSQL_ROOT_PASSWORD "%q" ${MYSQL_ROOT_PASSWORD}
	TEMP_FILE='/tmp/mysql-first-time.sql'
	cat > "$TEMP_FILE" <<-EOSQL
		DELETE FROM mysql.user ;
		CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
		GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
		DROP DATABASE IF EXISTS test ;
	EOSQL
	
	if [ "$MYSQL_DATABASE" ]; then
		echo "CREATE DATABASE IF NOT EXISTS $MYSQL_DATABASE ;" >> "$TEMP_FILE"
	fi
	
	if [ "$MYSQL_USER" -a "$MYSQL_PASSWORD" ]; then
		echo "CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD' ;" >> "$TEMP_FILE"
		
		if [ "$MYSQL_DATABASE" ]; then
			echo "GRANT ALL ON $MYSQL_DATABASE.* TO '$MYSQL_USER'@'%' ;" >> "$TEMP_FILE"
		fi
	fi
	
	echo 'FLUSH PRIVILEGES ;' >> "$TEMP_FILE"
	cat /tmp/r.sql >> "$TEMP_FILE"
	
	set -- "$@" --init-file="$TEMP_FILE"
fi

chown -R mysql:mysql /var/lib/mysql
exec "$@"

还有一个不同的组件log,使用的是syslog,针对日志这块内容,后续会开一遍文章,专门对日志这块内容进行展开。

在安装这一步,主要是通过docker-compose 启动编排脚本

dcoker-compose -f docker-compose.yaml -d up

最后一步,清理,不做详解。

总结

本篇对harbor的makefile进行了展开。对于整个项目的安装和构建部分基本已经完成。还有一个k8s的部署,对k8s专题中,将以此为demo进行展开。接来下,将开始源码的学习。将分为以下几个模块。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Docker】MySQL 源码构建 Docker 镜像(基于 ARM 64 架构)
近期,笔者正推进公司 MySQL 适配 ARM 64 架构工作,由于一直使用 Docker Hub 上的官方镜像,所以第一时间在 Hub 上检索,却发现官方只为 MySQL 8.0 以上版本提供 ARM 64 镜像。
行者Sun
2024/09/02
8700
【Docker】MySQL 源码构建 Docker 镜像(基于 ARM 64 架构)
企业运维 | MySQL关系型数据库在Docker与Kubernetes容器环境中快速搭建部署主从实践
首发地址: https://mp.weixin.qq.com/s/7mmIsd83QPT65QnQd5CtFQ
全栈工程师修炼指南
2022/10/01
1K0
企业运维 | MySQL关系型数据库在Docker与Kubernetes容器环境中快速搭建部署主从实践
Docker
docker run –name zabbix-java-gateway -t -d zabbix/zabbix-java-gateway:latest
Miloce
2022/09/28
7100
安装podman 和服务构建
时光_赌徒
2024/11/13
6210
Docker -- Run Zabbix6.0 Containers(四)
2,Docker Run Zabbix Server 6.0 Containers
Kevin song
2022/11/19
1.2K0
Docker -- Run Zabbix6.0  Containers(四)
使用docker运行zabbix-server
3、启动zabbix-mysql容器使用link连接mysql与java-gateway。
码农编程进阶笔记
2021/07/20
2K0
使用docker运行zabbix-server
Zabbix 随笔:安装篇(四)
如果觉得 Packages 方式安装比较复杂,可以尝试 Docker 版本的安装方式,相比 Docker 方式其实还有更简单的,就是 Appliance 方式,这个方式的原理其实就是下载一个集成 Zabbix 的镜像,大家可以自行尝试。
IT小白Kasar
2022/02/16
6080
Zabbix 随笔:安装篇(四)
spug自动化运维平台部署与使用
检查git clone权限问题,更新ssh-key后,确认docker内 /root/.ssh/id_rsa 是否更新,是否可以访问 gitlab
IT不难
2023/11/17
8680
spug自动化运维平台部署与使用
Docker笔记
1.创建空文件夹 假设新建一个名为wordpress的文件夹,然后进入这个文件夹。
hankleo
2020/09/17
4370
第一章 Docker入门基础
MySQL使用过程中的环境变量 Num|Env Variable| Description —-|—-|—- 1|MYSQL_ROOT_PASSWORD|root用户的密码 2|MYSQL_DATABASE|创建一个数据库 3|MYSQL_USER,MYSQL_PASSWORD|创建一个用户以及用户密码 4|MYSQL_ALLOW_EMPTY_PASSWORD|允许空密码
公众号: 云原生生态圈
2021/11/15
7090
玩转Nextcloud:定制云盘,尽显个性!
在数字时代,个人云存储变得愈发重要,而Docker-compose作为容器编排的瑰宝,将Nextcloud的搭建过程变得更加愉快。本文将引领您进入Nextcloud的容器化之旅,让您在CentOS的平台上轻松构建个性化的数字云空间。
一只牛博
2025/05/31
2550
玩转Nextcloud:定制云盘,尽显个性!
Dockerfile
golang:latest 镜像为基础镜像,将工作目录设置为 $GOPATH/src/go-gin-example,并将当前上下文目录的内容复制到 $GOPATH/src/go-gin-example 中
Michel_Rolle
2023/11/22
3.1K0
029.Docker Compose部署Zabbix实战
Docker Compose已安装,参考《009.Docker Compose基础使用》。
木二
2019/07/25
2.3K0
029.Docker Compose部署Zabbix实战
飞牛 fnos 使用docker部署兰空图床(lsky-pro)
这次部署的是一个图床(Lsky-Pro),可以让你的图片用链接的方式出现,可以使用在你的博客上面,这个图床还需要使用数据库来存储数据所以我们这里就要部署两个容器
季春二九
2025/01/10
7000
飞牛 fnos 使用docker部署兰空图床(lsky-pro)
Docker 部署Django博客项目
我之前部署我的博客项目(Django应用),没用Docker,直接借助的宝塔Linux服务器面板在服务器上部署的,部署起来也是十分的方便,使用了Django+Nginx+Supervisor+Gunicorn部署,可查看我写过的一片博客:Centos安装python3并使用Nginx+Gunicorn+virtualenv+supervisor来部署django项目。
緣來
2020/01/02
1.5K0
Docker 部署Django博客项目
010.Docker Compose构建WordPress实战
Docker Compose已安装,参考《009.Docker Compose基础使用》。
木二
2019/07/26
4060
docker--docker compose 编排工具
根据前面所学的知识可知,想要使用Docker部署应用,就要先在应用中编写Dockerfile 文件来构建镜像。同样,在微服务项目中,我们也需要为每一个服务编写Dockerfile文件 来构建镜像。构建完成后,就可以根据每一个镜像使用docker run或者docker service create命令创建并启动容器,这样我们就可以访问容器中的服务了。 微服务架构中:涉及的服务数量巨多。 虽然使用上述方式可以部署微服务项目,但考虑到微服务项目可能有多个子服务组成, 并且每个服务启动过程中都需要配置额外的参数(如-e配置环境变量、--network指定网 络、磁盘挂载等等)。这种情况下,每次更新微服务后,都要手动运行指令来重新启动 容器,这就显得相当麻烦了。针对这种多服务部署的情况,Docker提供了Docker Compose编排工具来对多服务应用进行统一部署。Compose是Docker的服务编排工 具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个 Docker容器,非常适合组合使用多个容器进行开发的场景。 通过该编排工具,可以使用yml(或yaml)文件来配置应用程序服务,然后只需要一条简 单的服务部署指令就可以从配置中创建并启动所有服务。
eadela
2019/11/26
7280
用nextcloud搭建个人网盘
nextcloud是一个私有云存储网盘项目,nextcloud是owncloud的衍生版本,2016年4月27日,ownCloud联合创始人Frank Karlitschek宣布离开ownCloud ltc.,转而成立另一家公司“Nextcloud”,由于ownCloud程序本身归其开发人员所有,所以Nextcloud可以直接使用ownCloud的核心技术。nextcloud具有强大的扩展性,同时主打 a safe home for all your data,所以在安全性上nextcloud也十分出色。
机械视角
2020/03/30
2.2K0
如何安装Nginx Proxy Manager
这是官网的一段话: This project comes as a pre-built docker image that enables you to easily forward to your websites running at home or otherwise, including free SSL, without having to know too much about Nginx or Letsencrypt.
是小北a
2023/10/21
1.3K0
如何安装Nginx Proxy Manager
如何在Docker上安装MySQL读写分离
这三个mysql创建一个docker的局域网用于通信使用,因为各个容器之间是互不影响的,所以他们的启动端口都可以是3306,对于宿主机映射的端口分别是6606,6607,6608。
用户2323866
2021/06/17
8650
相关推荐
【Docker】MySQL 源码构建 Docker 镜像(基于 ARM 64 架构)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验