merge:合并主分支
This commit is contained in:
+11
-11
@@ -1,28 +1,28 @@
|
||||
# Ver: 1.10 by Endial Fang (endial@126.com)
|
||||
# Ver: 1.11 by Endial Fang (endial@126.com)
|
||||
#
|
||||
|
||||
# 系统默认变量 ====================================================================
|
||||
# 该部分变量为系统根据编译命令默认设置
|
||||
# `TARGETPLATFORM`:构建后的目标平台信息。如 `linux/amd64`,`linux/arm/v7`,`windows/amd64`
|
||||
# `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)中的版本变体部分
|
||||
# `BUILDARCH`:用于构建的节点平台信息(BUILDPLATFORM)中的平台架构部分
|
||||
# `BUILDVARIANT`:用于构建的节点平台信息(BUILDPLATFORM)中的版本变体部分
|
||||
|
||||
# 可变参数 ========================================================================
|
||||
# 该部分变量,在编译命令中通过 `--build-arg` 传入;如果未设置,则使用下面对应的默认值
|
||||
|
||||
ARG APP_NAME=alpine # 设置当前应用名称
|
||||
ARG APP_VER=3.18 # 设置当前应用版本
|
||||
ARG REGISTRY_URL="docker.colovu.com/" # 设置默认仓库地址,默认为本地仓库;定义时需要包含末尾的`/`
|
||||
ARG APT_SOURCE=ustc # 设置 apt-get 源:default / ustc / aliyun; 当前 Alpine 3.18 阿里云缺少部分软件包
|
||||
ARG LOCAL_URL="http://local.colovu.com/dist" # 编译镜像时指定用于加速的本地软件包存储服务器地址
|
||||
ARG APP_NAME=alpine
|
||||
ARG APP_VER=3.18
|
||||
ARG REGISTRY_URL="registry.colovu.com/docker-proxy/"
|
||||
ARG APT_SOURCE=ustc
|
||||
ARG LOCAL_URL="http://pkgs.colovu.com/dist"
|
||||
|
||||
# 1. 生成镜像 =====================================================================
|
||||
FROM --platform=${TARGETPLATFORM:-linux/amd64} ${REGISTRY_URL}library/alpine:${APP_VER}
|
||||
FROM --platform=${TARGETPLATFORM:-linux/amd64} ${REGISTRY_URL}alpine:${APP_VER}
|
||||
|
||||
# 声明需要使用的全局可变参数(ARG声明的变量仅编译打包阶段有效)
|
||||
ARG APP_NAME
|
||||
@@ -32,7 +32,7 @@ ARG APT_SOURCE
|
||||
LABEL \
|
||||
"Version"="v${APP_VER}" \
|
||||
"Description"="Docker image for Alpine." \
|
||||
"Github"="https://github.com/colovu/docker-${APP_NAME}" \
|
||||
"Github"="https://gitee.com/colovu/docker-${APP_NAME}" \
|
||||
"Vendor"="Endial Fang (endial@126.com)"
|
||||
|
||||
# 拷贝默认的通用脚本文件
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
# 当前 Docker 镜像的编译脚本
|
||||
|
||||
# 定义镜像名称
|
||||
image_name :=colovu/alpine
|
||||
image_name :=alpine
|
||||
|
||||
# 定义默认镜像仓库地址
|
||||
REGISTRY_URL :=docker.colovu.com
|
||||
REGISTRY_URL :=registry.colovu.com/docker-proxy/
|
||||
|
||||
# 定义系统默认使用的源服务器,包含:default / ustc / aliyun
|
||||
# 当前 Alpine 3.18 阿里云缺少部分软件包
|
||||
@@ -24,30 +24,45 @@ 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
|
||||
build-arg+=--build-arg LOCAL_URL=http://pkgs.colovu.com/dist
|
||||
|
||||
.PHONY: build clean clearclean upgrade
|
||||
.PHONY: build clean clearclean upgrade push
|
||||
|
||||
build:
|
||||
@echo "Build $(image_name):$(image_tag)"
|
||||
@docker buildx build --progress plain --force-rm $(build-arg) -t $(image_name):$(image_tag) .
|
||||
@podman 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
|
||||
@podman 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 '<none>' | awk '{print $$3}' | sort -u | xargs -L 1 docker rmi -f
|
||||
@podman ps -a | grep "Exited" | awk '{print $$1}' | sort -u | xargs -L 1 podman rm
|
||||
@podman images | grep '<none>' | awk '{print $$3}' | sort -u | xargs -L 1 podman 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
|
||||
@podman images | grep "$(image_name) " | awk '{print $$3}' | sort -u | xargs -L 1 podman rmi -f
|
||||
|
||||
# 更新所有 colovu 仓库的镜像
|
||||
upgrade:
|
||||
@echo "Upgrade all images..."
|
||||
@docker images | grep 'colovu' | grep -v '<none>' | grep -v "latest-" | awk '{print $$1":"$$2}' | sort -u | xargs -L 1 docker pull
|
||||
@podman images | grep 'colovu' | grep -v '<none>' | grep -v "latest-" | awk '{print $$1":"$$2}' | sort -u | xargs -L 1 podman pull
|
||||
|
||||
# 推送镜像至华为云 SWR 的 colovu 空间及 registry.colovu.com 的默认空间
|
||||
push:
|
||||
@echo "Push $(image_name):$(image_tag) to Huawei Cloud SWR colovu space"
|
||||
@podman tag $(image_name):$(image_tag) swr.cn-north-4.myhuaweicloud.com/colovu/$(image_name):$(image_tag)
|
||||
@podman push swr.cn-north-4.myhuaweicloud.com/colovu/$(image_name):$(image_tag)
|
||||
@echo "Push $(image_name):$(image_tag) to registry.colovu.com"
|
||||
@podman tag $(image_name):$(image_tag) registry.colovu.com/$(image_name):$(image_tag)
|
||||
@podman push registry.colovu.com/$(image_name):$(image_tag)
|
||||
@echo "Push $(image_name):latest to Huawei Cloud SWR colovu space"
|
||||
@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
|
||||
@echo "Push $(image_name):latest to registry.colovu.com"
|
||||
@podman tag $(image_name):latest registry.colovu.com/$(image_name):latest
|
||||
@podman push registry.colovu.com/$(image_name):latest
|
||||
@echo "Push complete"
|
||||
|
||||
@@ -12,11 +12,11 @@
|
||||
**镜像信息:**
|
||||
|
||||
* 镜像地址:
|
||||
* 阿里云: registry.cn-shenzhen.aliyuncs.com/colovu/alpine:3.18
|
||||
* Colovu Registry: docker.colovu.com/colovu/alpine:3.18
|
||||
* 华为云: swr.cn-north-4.myhuaweicloud.com/colovu/alpine
|
||||
* 依赖镜像:docker.io/library/alpine:3.18
|
||||
registry.colovu.com/docker-proxy/alpine:3.18
|
||||
|
||||
> 后续相关命令行默认使用 Aliyun ACR 镜像服务器做说明
|
||||
> 后续相关命令行默认使用华为云 SWR 镜像服务器做说明。
|
||||
|
||||
**与官方镜像差异:**
|
||||
|
||||
@@ -35,7 +35,7 @@ Docker 快速启动命令:
|
||||
|
||||
```shell
|
||||
# 从 Registry 服务器下载镜像并启动
|
||||
$ docker run -it registry.cn-shenzhen.aliyuncs.com/colovu/alpine:3.18 /bin/bash
|
||||
docker run -it swr.cn-north-4.myhuaweicloud.com/colovu/alpine /bin/bash
|
||||
```
|
||||
|
||||
---
|
||||
@@ -45,7 +45,7 @@ $ docker run -it registry.cn-shenzhen.aliyuncs.com/colovu/alpine:3.18 /bin/bash
|
||||
**下载镜像:**
|
||||
|
||||
```shell
|
||||
$ docker pull registry.cn-shenzhen.aliyuncs.com/colovu/alpine:3.18
|
||||
docker pull swr.cn-north-4.myhuaweicloud.com/colovu/alpine
|
||||
```
|
||||
|
||||
- 3.18:为镜像的 TAG,可针对性选择不同的 TAG 进行下载;可使用`latest`选择最新的镜像
|
||||
@@ -54,18 +54,18 @@ $ docker pull registry.cn-shenzhen.aliyuncs.com/colovu/alpine:3.18
|
||||
**查看镜像:**
|
||||
|
||||
```shell
|
||||
$ docker images
|
||||
docker images
|
||||
```
|
||||
|
||||
**命令行方式运行容器:**
|
||||
|
||||
```shell
|
||||
$ docker run -it --rm registry.cn-shenzhen.aliyuncs.com/colovu/alpine:3.18 /bin/bash
|
||||
docker run -it --rm swr.cn-north-4.myhuaweicloud.com/colovu/alpine /bin/bash
|
||||
```
|
||||
|
||||
- `-it`:使用交互式终端启动容器
|
||||
- `--rm`:退出时删除容器
|
||||
- `registry.cn-shenzhen.aliyuncs.com/colovu/alpine:3.18`:镜像名称及版本标签
|
||||
- `swr.cn-north-4.myhuaweicloud.com/colovu/alpine`:镜像名称及版本标签
|
||||
- `/bin/bash`:在容器中执行`/bin/bash`命令;如果不执行命令,容器会在启动后立即结束并退出。
|
||||
|
||||
以该方式启动后,直接进入容器的命令行操作界面。如果需要退出,直接使用命令`exit`退出。
|
||||
@@ -73,22 +73,22 @@ $ docker run -it --rm registry.cn-shenzhen.aliyuncs.com/colovu/alpine:3.18 /bin/
|
||||
**后台方式运行容器:**
|
||||
|
||||
```shell
|
||||
$ docker run -d --name test registry.cn-shenzhen.aliyuncs.com/colovu/alpine:3.18 tail /dev/stderr
|
||||
docker run -d --name alpine swr.cn-north-4.myhuaweicloud.com/colovu/alpine tail /dev/stderr
|
||||
```
|
||||
|
||||
- `--name test`:命名容器为`test`
|
||||
- `--name alpine`:命名容器为`alpine`,可按照实际情况自定义容器名称
|
||||
- `-d`:以后台进程方式启动容器
|
||||
- `registry.cn-shenzhen.aliyuncs.com/colovu/alpine:3.18`:镜像名称及版本标签
|
||||
- `swr.cn-north-4.myhuaweicloud.com/colovu/alpine`:镜像名称及版本标签
|
||||
- `tail /dev/stderr`:在容器中执行`tail /dev/stderr`命令,以防止容器直接退出
|
||||
|
||||
以该方式启动后,如果想进入容器,可以使用以下命令:
|
||||
|
||||
```shell
|
||||
$ docker exec -it test /bin/bash
|
||||
docker exec -it alpine /bin/bash
|
||||
```
|
||||
|
||||
- `-it`:使用交互式执行
|
||||
- `test`:之前启动的容器名
|
||||
- `alpine`:之前启动的容器名
|
||||
- `/bin/bash`:执行的命令
|
||||
|
||||
## 更新记录
|
||||
@@ -97,4 +97,4 @@ $ docker exec -it test /bin/bash
|
||||
|
||||
----
|
||||
|
||||
本文原始来源 [Endial Fang](https://github.com/colovu) @ [Github.com](https://github.com)
|
||||
本文原始来源 [Endial Fang](https://gitee.com/colovu) @ [Gitee.com](https://gitee.com)
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
#!/bin/bash
|
||||
# Ver: 1.0 by Endial Fang (endial@126.com)
|
||||
#
|
||||
# Docker 镜像构建脚本 (仅linux/amd64)
|
||||
|
||||
IMAGE_NAME="alpine"
|
||||
REGISTRY_URL="registry.colovu.com/docker-proxy/"
|
||||
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 '<none>' | 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 "$@"
|
||||
Reference in New Issue
Block a user