#!/bin/bash # Docker 一键打包推送脚本 # 用法: ./docker-build-push.sh [版本号] # 配置项(请修改为你的信息) DOCKER_USERNAME="doracoin" # Docker Hub 用户名 REGISTRY="" # 私有仓库地址,如:registry.cn-hangzhou.aliyuncs.com IMAGE_NAME="YOUR_IMAGE_NAME" VERSION=${1:-"v1.0.0"} # 默认版本 v1.0.0,可通过参数指定 # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 构建完整镜像名 if [ -z "$REGISTRY" ]; then FULL_IMAGE="${DOCKER_USERNAME}/${IMAGE_NAME}" else FULL_IMAGE="${REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}" fi echo -e "${BLUE}========================================${NC}" echo -e "${BLUE} ${IMAGE_NAME} Docker 打包推送${NC}" echo -e "${BLUE}========================================${NC}" echo "" echo -e "镜像名称: ${YELLOW}${IMAGE_NAME}${NC}" echo -e "版本标签: ${YELLOW}${VERSION}${NC}" echo -e "推送地址: ${YELLOW}${FULL_IMAGE}${NC}" echo "" # 检查 Docker 是否安装 if ! command -v docker &> /dev/null; then echo -e "${RED}错误: Docker 未安装${NC}" exit 1 fi # 检查是否已登录 echo -e "${BLUE}>>> 检查 Docker 登录状态...${NC}" if ! docker info &> /dev/null; then echo -e "${YELLOW}请先登录 Docker:${NC}" if [ -z "$REGISTRY" ]; then docker login else docker login ${REGISTRY} fi fi # 构建镜像 echo "" echo -e "${BLUE}>>> 开始构建镜像...${NC}" docker build -t ${IMAGE_NAME}:latest . if [ $? -ne 0 ]; then echo -e "${RED}构建失败!${NC}" exit 1 fi # 查看镜像大小 echo "" echo -e "${BLUE}>>> 镜像信息:${NC}" docker images ${IMAGE_NAME}:latest --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" # 标记镜像 echo "" echo -e "${BLUE}>>> 标记镜像版本...${NC}" docker tag ${IMAGE_NAME}:latest ${FULL_IMAGE}:latest docker tag ${IMAGE_NAME}:latest ${FULL_IMAGE}:${VERSION} echo -e "${GREEN}✓ 已标记: ${FULL_IMAGE}:latest${NC}" echo -e "${GREEN}✓ 已标记: ${FULL_IMAGE}:${VERSION}${NC}" # 推送镜像 echo "" echo -e "${BLUE}>>> 推送镜像到仓库...${NC}" echo -e "${YELLOW}正在推送 latest...${NC}" docker push ${FULL_IMAGE}:latest if [ $? -ne 0 ]; then echo -e "${RED}推送 latest 失败!${NC}" exit 1 fi echo -e "${YELLOW}正在推送 ${VERSION}...${NC}" docker push ${FULL_IMAGE}:${VERSION} if [ $? -ne 0 ]; then echo -e "${RED}推送 ${VERSION} 失败!${NC}" exit 1 fi # 完成 echo "" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN} 推送成功!${NC}" echo -e "${GREEN}========================================${NC}" echo "" echo -e "拉取命令:" echo -e " ${YELLOW}docker pull ${FULL_IMAGE}:latest${NC}" echo -e " ${YELLOW}docker pull ${FULL_IMAGE}:${VERSION}${NC}" echo "" echo -e "运行命令:" echo -e " ${YELLOW}docker run -d -p HOST_PORT:CONTAINER_PORT ${FULL_IMAGE}:latest${NC}" echo ""