#!/bin/bash
set -e
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
IMAGE_NAME="uos-syslog-ng-exporter"
VERSION=${1:-"latest"}
REGISTRY=${2:-""}
FULL_IMAGE_NAME="${REGISTRY:+$REGISTRY/}${IMAGE_NAME}:${VERSION}"
print_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
check_docker() {
if ! command -v docker &> /dev/null; then
print_error "Docker 未安装,请先安装 Docker"
exit 1
fi
if ! docker info &> /dev/null; then
print_error "Docker 服务未运行,请启动 Docker 服务"
exit 1
fi
}
build_image() {
print_info "开始构建 Docker 镜像..."
print_info "镜像名称: $FULL_IMAGE_NAME"
if [ ! -f "Dockerfile" ]; then
print_error "Dockerfile 不存在"
exit 1
fi
if docker build -t "$FULL_IMAGE_NAME" .; then
print_success "Docker 镜像构建成功: $FULL_IMAGE_NAME"
else
print_error "Docker 镜像构建失败"
exit 1
fi
}
push_image() {
if [ -n "$REGISTRY" ]; then
print_info "推送镜像到仓库: $REGISTRY"
if docker push "$FULL_IMAGE_NAME"; then
print_success "镜像推送成功: $FULL_IMAGE_NAME"
else
print_error "镜像推送失败"
exit 1
fi
else
print_info "未指定仓库,跳过推送"
fi
}
show_image_info() {
print_info "镜像信息:"
docker images "$IMAGE_NAME" --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}\t{{.CreatedAt}}"
}
main() {
print_info "UOS Syslog-NG Exporter Docker 构建脚本"
print_info "=========================================="
check_docker
build_image
push_image
show_image_info
print_success "构建完成!"
print_info "运行容器: docker run -p 9309:9309 $FULL_IMAGE_NAME"
}
main "$@"