diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 4df4001..0000000 --- a/.dockerignore +++ /dev/null @@ -1,11 +0,0 @@ -.git -.gitignore - -./Makefile - -*.yml -*.yaml - -./LICENSE -./README.md -./img diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 5de64e7..0000000 --- a/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r - -Icon\r\r - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index c536fb3..0000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,73 +0,0 @@ -# CI/CD 的阶段定义,按顺序执行各阶段;默认包含`.pre`(最先执行)/`.post`(最后执行)两个阶段,不用显示定义 -stages: - - build - - test - - deploy - -# 全局变量定义 -variables: - IMG_URL: "$HARBOR_HOST/$HARBOR_PROJECT/$CI_PROJECT_NAME" - IMG_TAG: ":latest" - -# 默认值信息配置 -default: - # 各 stage 使用的默认镜像,如果不定义,则为 gitlab-runner 创建时指定的镜像;各 stage 可以覆盖该值以使用不同的镜像 - image: docker.colovu.com/library/docker:20.10.16 - # Gitlab-runner 配置的执行器为 Docker 时,需要 配置对应的 dind 服务(这里使用Runner中配置的Dind服务) - #services: - # - name: docker.colovu.com/library/docker:20.10.16-dind - # alias: docker - # 流水线中,各阶段都会执行的脚本命令,包括`before_script`(在各阶段 script 前执行)/`after_script`(在各阶段 script 后执行) - before_script: - - | - if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then - IMG_TAG=":latest" - else - IMG_TAG=":$CI_COMMIT_REF_NAME" - fi - - docker login -u "$HARBOR_USERNAME" -p "$HARBOR_PASSWORD" $HARBOR_URL - -# 环境变量信息 -env-variables: - stage: .pre - script: - - export - -# 编译阶段任务 -build-arm64: - stage: build - tags: - - arm64 - script: - - docker buildx build --platform=linux/arm64 --pull -t "$IMG_URL$IMG_TAG-linux-arm64" . --push - - docker rmi "$IMG_URL$IMG_TAG-linux-arm64" - -build-amd64: - stage: build - tags: - - amd64 - script: - - docker buildx build --platform=linux/amd64 --pull -t "$IMG_URL$IMG_TAG-linux-amd64" . --push - - docker rmi "$IMG_URL$IMG_TAG-linux-amd64" - -build-artifact: - stage: build - needs: [build-amd64, build-arm64] - script: - - docker manifest create "$IMG_URL$IMG_TAG" "$IMG_URL$IMG_TAG-linux-arm64" "$IMG_URL$IMG_TAG-linux-amd64" - - docker manifest push "$IMG_URL$IMG_TAG" - - docker manifest rm "$IMG_URL$IMG_TAG" - -# 测试阶段任务 -test: - stage: test - script: - - docker run --pull always --rm --platform=linux/arm64 "$IMG_URL$IMG_TAG" /bin/uname -a - - docker run --pull always --rm --platform=linux/amd64 "$IMG_URL$IMG_TAG" /bin/uname -a - - docker images -q "$IMG_URL" | sort -u | xargs docker rmi -f - -# 部署阶段任务 -deploy: - stage: deploy - script: - - echo "deploy stage" diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 99841af..0000000 --- a/Dockerfile +++ /dev/null @@ -1,51 +0,0 @@ -# Ver: 1.11 by Endial Fang (endial@126.com) -# - -# 系统默认变量 ==================================================================== -# 该部分变量为系统根据编译命令默认设置 -# `TARGETPLATFORM`:构建后的目标平台信息。如 `linux/amd64`,`linux/arm/v7`,`windows/amd64` -# `TARGETOS`:目标平台信息(TARGETPLATFORM)中的操作系统部分,如:`linux`、`windows` -# `TARGETARCH`:目标平台信息(TARGETPLATFORM)中的平台架构部分,如:`amd64`、`arm` -# `TARGETVARIANT`:目标平台信息(TARGETPLATFORM)中的版本变体部分,如:`v7` -# `BUILDPLATFORM`:用于构建的节点平台信息 -# `BUILDOS`:用于构建的节点平台信息(BUILDPLATFORM)中的操作系统部分 -# `BUILDARCH`:用于构建的节点平台信息(BUILDPLATFORM)中的平台架构部分 -# `BUILDVARIANT`:用于构建的节点平台信息(BUILDPLATFORM)中的版本变体部分 - -# 可变参数 ======================================================================== -# 该部分变量,在编译命令中通过 `--build-arg` 传入;如果未设置,则使用下面对应的默认值 - -ARG APP_NAME=aBuilder -ARG APP_VER=3.20 -ARG REGISTRY_URL="swr.cn-north-4.myhuaweicloud.com/colovu/" -ARG APT_SOURCE=ustc -ARG LOCAL_URL="http://pkgs.colovu.com/dist" - -# 1. 生成镜像 ===================================================================== -FROM --platform=${TARGETPLATFORM:-linux/amd64} ${REGISTRY_URL}alpine:${APP_VER} - -# 声明需要使用的全局可变参数(ARG声明的变量仅编译打包阶段有效) -ARG APP_NAME -ARG APP_VER -ARG APT_SOURCE - -LABEL \ - "Version"="v${APP_VER}" \ - "Description"="Docker image for Builder based on Alpine." \ - "Github"="https://gitee.com/colovu/docker-${APP_NAME}" \ - "Vendor"="Endial Fang (endial@126.com)" - -# 说明: -# 虽然原始镜像包含 wget, 但该版本存在问题,下载部分资源(如redis)会报错,因此安装官方完整版 -RUN set -eux; \ - \ - # 选择软件包源,以加速后续软件包安装 - select_source ${APT_SOURCE}; \ - \ - # 安装编译环境及常用开发库 - install_pkg sudo wget git ca-certificates iproute2 net-tools nano dpkg gnupg \ - dpkg-dev bash build-base cmake pkgconf \ - linux-headers cmocka-dev openssl-dev - - -CMD [] \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 80e3bb7..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 Endial Fang (endial@126.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Makefile b/Makefile deleted file mode 100644 index 1c38fc1..0000000 --- a/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -# Ver: 1.11 by Endial Fang (endial@126.com) -# -# 当前 Docker 镜像的编译脚本 - -# 定义镜像名称 -image_name :=colovu/abuilder - -# 定义默认镜像仓库地址 -REGISTRY_URL :=docker.colovu.com - -# 定义系统默认使用的源服务器,包含:default / ustc / aliyun -# 当前 Alpine 3.18 阿里云缺少部分软件包 -APT_SOURCE :=ustc - -# 定义镜像TAG,类似: -# <镜像名>:<分支名>-<7位Git ID> # Git 仓库且无文件修改直接编译 -# <镜像名>:<分支名>-<年月日>-<时分秒> # Git 仓库有文件修改后的编译 -# <镜像名>:latest-<年月日>-<时分秒> # 非 Git 仓库编译 -current_subversion:=$(shell if [ ! `git status >/dev/null 2>&1` ]; then git rev-parse --short HEAD; else date +%y%m%d-%H%M%S; fi) -image_tag:=$(shell if [ ! `git status >/dev/null 2>&1` ]; then git rev-parse --abbrev-ref HEAD | sed -e 's/master/latest/' | sed -e 's/main/latest/'; else echo "latest"; fi)-$(current_subversion) - -build-arg:=--build-arg REGISTRY_URL=$(REGISTRY_URL) -build-arg+=--build-arg APT_SOURCE=$(APT_SOURCE) - -# 设置本地下载服务器路径,加速调试时的本地编译速度 -local_ip:=`echo "en0 eth0" | xargs -n1 ip addr show 2>/dev/null | grep inet | grep -v 127.0.0.1 | grep -v inet6 | tr "/" " " | awk '{print $$2}'` -build-arg+=--build-arg LOCAL_URL=http://local.colovu.com/dist - -.PHONY: build clean clearclean upgrade - -build: - @echo "Build $(image_name):$(image_tag)" - @docker buildx build --progress plain --force-rm $(build-arg) -t $(image_name):$(image_tag) . - @echo "Add tag: $(image_name):latest" - @docker tag $(image_name):$(image_tag) $(image_name):latest - @echo "Build complete" - -# 清理悬空的镜像(无TAG)及停止的容器 -clearclean: clean - @echo "Clean untaged images and stoped containers..." - @docker ps -a | grep "Exited" | awk '{print $$1}' | sort -u | xargs -L 1 docker rm - @docker images | grep '' | awk '{print $$3}' | sort -u | xargs -L 1 docker rmi -f - -# 为了防止删除前缀名相同的镜像,在过滤条件中加入一个空格进行过滤 -clean: - @echo "Clean all images for current application..." - @docker images | grep "$(image_name) " | awk '{print $$3}' | sort -u | xargs -L 1 docker rmi -f - -# 更新所有 colovu 仓库的镜像 -upgrade: - @echo "Upgrade all images..." - @docker images | grep 'colovu' | grep -v '' | grep -v "latest-" | awk '{print $$1":"$$2}' | sort -u | xargs -L 1 docker pull - diff --git a/README.md b/README.md index 9877e91..ee7c122 100644 --- a/README.md +++ b/README.md @@ -1,98 +1,3 @@ # aBuilder -预安装常用工具及编译工具的镜像。 - -该镜像为基于 Alpine 系统的 Builder 环境,主要用于在使用多阶段方式制作镜像时,进行软件源代码的下载、编译等预处理操作。预安装软件包节省软件包下载及更新时间。 - - -**版本信息:** - -- 3.20、latest -- 3.20、3.18 - -**镜像信息:** - -* 镜像地址: - * 华为云: swr.cn-north-4.myhuaweicloud.com/colovu/abuilder - * 依赖镜像:swr.cn-north-4.myhuaweicloud.com/colovu/abuilder - -> 后续相关命令行默认使用华为云 SWR 镜像服务器做说明。 - -## TL;DR - -Docker 快速启动命令: - -```shell -# 从 Registry 服务器下载镜像并启动 -docker run -it swr.cn-north-4.myhuaweicloud.com/colovu/abuilder:latest /bin/bash -``` - -- latest:为镜像的 TAG,可针对性选择不同的 TAG 进行下载 -- 不指定 TAG 时,默认下载`latest`镜像 - -## 数据卷 - -镜像默认提供以下数据卷定义: - -```shell - /srv/data # 工作目录 - /srv/conf # 配置文件目录 -``` - -## 使用方式 - -使用`--from=0`方式: - -```dockerfile -# 预编译阶段 =============================== -FROM swr.cn-north-4.myhuaweicloud.com/colovu/abuilder:latest - -WORKDIR /tmp - -# 相关下载/解压/编译操作 - -# ... 省略 - -# 镜像生成阶段 ============================== -FROM scratch -# 从编译阶段的中拷贝编译结果到当前镜像中(例如:编译的应用直接安装至/usr/local时) -COPY --from=0 /usr/local/ /usr/local - -# ... 省略其它操作 - -# 镜像命令 -CMD [] -``` - -使用`--from=name`方式: - -```dockerfile -# 预编译阶段。命名为`builder` ================== -FROM swr.cn-north-4.myhuaweicloud.com/colovu/abuilder:latest as builder - -WORKDIR /tmp - -# 相关下载/解压/编译操作 - -# ... 省略 - -# 镜像生成阶段 ============================== -FROM scratch -# 从编译阶段的中拷贝编译结果到当前镜像中(例如:编译的应用直接安装至/usr/local时) -COPY --from=builder /usr/local/ /usr/local - -# ... 省略其它操作 - -# 镜像命令 -CMD [] -``` - -使用该方式的优势: - -- 因系统相关软件包已更新,工具已经预先安装,不需要在每次编译镜像时耗费大量时间在类似重复工作上 -- 不用安装、删除临时软件,放置生成多余的垃圾文件;预编译阶段的内容使用完即丢弃,不会对镜像大小产生影响 -- 没有相关的中间操作步骤,不会产生多余的镜像分层 - ----- - -本文原始来源 [Endial Fang](https://gitee.com/colovu) @ [Gitee.com](https://gitee.com) +停止维护 v3.21 版本. diff --git a/build.sh b/build.sh deleted file mode 100755 index f7f4b4a..0000000 --- a/build.sh +++ /dev/null @@ -1,110 +0,0 @@ -#!/bin/bash -# Ver: 1.0 by Endial Fang (endial@126.com) -# -# Docker 镜像构建脚本 (仅linux/amd64) - -IMAGE_NAME="abuilder" -REGISTRY_URL="swr.cn-north-4.myhuaweicloud.com/colovu/" -APT_SOURCE="ustc" - -# 获取发布版本标签 -get_release_tag() { - if ! git rev-parse --git-dir >/dev/null 2>&1; then - echo "unknown" - elif [ -n "$(git status --porcelain)" ]; then - echo "latest" - else - # 尝试获取最近的git标签 - local tag=$(git describe --tags --abbrev=0 2>/dev/null) - if [ -n "$tag" ]; then - echo "$tag" - else - local branch=$(git rev-parse --abbrev-ref HEAD) - case "$branch" in - master|main) echo "latest" ;; - *) echo "$branch" ;; - esac - fi - fi -} - -# 获取镜像完整TAG -get_image_tag() { - local CURRENT_SUBVERSION - if git rev-parse --git-dir >/dev/null 2>&1; then - if [ -z "$(git status --porcelain)" ]; then - CURRENT_SUBVERSION=$(git rev-parse --short=12 HEAD) - else - CURRENT_SUBVERSION=$(date +%Y%m%d-%H%M%S) - fi - local branch=$(git rev-parse --abbrev-ref HEAD) - branch=$(echo "$branch" | sed -e 's/master/latest/' -e 's/main/latest/') - echo "${branch}-${CURRENT_SUBVERSION}" - else - CURRENT_SUBVERSION=$(date +%Y%m%d-%H%M%S) - echo "latest-${CURRENT_SUBVERSION}" - fi -} - -# 构建amd64架构镜像 -build() { - local TAG=${1:-$(get_image_tag)} - echo "Building image ${IMAGE_NAME}:${TAG} (linux/amd64)" - - podman build --platform linux/amd64 \ - --progress plain --force-rm \ - --build-arg REGISTRY_URL=${REGISTRY_URL} \ - --build-arg APT_SOURCE=${APT_SOURCE} \ - --build-arg LOCAL_URL=http://pkgs.colovu.com/dist \ - -t ${IMAGE_NAME}:${TAG} \ - -t ${IMAGE_NAME}:latest \ - . - - echo "Build complete" -} - -# 推送镜像到colovu仓库 -push_colovu() { - local TAG=${1:-$(get_image_tag)} - echo "Pushing ${IMAGE_NAME}:${TAG} to registry.colovu.com" - - podman tag "${IMAGE_NAME}:${TAG}" "registry.colovu.com/library/${IMAGE_NAME}:${TAG}" - podman push "registry.colovu.com/library/${IMAGE_NAME}:${TAG}" - - podman tag "${IMAGE_NAME}:latest" "registry.colovu.com/library/${IMAGE_NAME}:latest" - podman push "registry.colovu.com/library/${IMAGE_NAME}:latest" -} - -# 推送镜像到华为云仓库 -push_huawei() { - local TAG=${1:-$(get_release_tag)} - echo "Pushing ${IMAGE_NAME}:${TAG} to swr.cn-north-4.myhuaweicloud.com" - - podman tag "${IMAGE_NAME}:${TAG}" "swr.cn-north-4.myhuaweicloud.com/colovu/${IMAGE_NAME}:${TAG}" - podman push "swr.cn-north-4.myhuaweicloud.com/colovu/${IMAGE_NAME}:${TAG}" - - podman tag "${IMAGE_NAME}:latest" "swr.cn-north-4.myhuaweicloud.com/colovu/${IMAGE_NAME}:latest" - podman push "swr.cn-north-4.myhuaweicloud.com/colovu/${IMAGE_NAME}:latest" -} - -# 清理工作空间 -clean() { - echo "Cleaning workspace..." - podman images | grep "${IMAGE_NAME} " | awk '{print $3}' | xargs -L 1 podman rmi -f - podman ps -a | grep "Exited" | awk '{print $1}' | xargs -L 1 podman rm - podman images | grep '' | awk '{print $3}' | xargs -L 1 podman rmi -f -} - -# 主函数中更新使用说明 -main() { - case "$1" in - build) build "$2" ;; # 传递第二个参数作为标签 - clean) clean ;; - push-cv) push_colovu "$2" ;; - push-hw) push_huawei "$2" ;; - push) push_colovu "$2"; push_huawei "$2" ;; - *) echo "Usage: $0 {build [tag]|clean|push-cv [tag]|push-hw [tag]|push [tag]}"; exit 1 ;; - esac -} - -main "$@" \ No newline at end of file