dockerbuild.sh
· 2.9 KiB · Bash
Ham
#!/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 ""
| 1 | #!/bin/bash |
| 2 | |
| 3 | # Docker 一键打包推送脚本 |
| 4 | # 用法: ./docker-build-push.sh [版本号] |
| 5 | |
| 6 | # 配置项(请修改为你的信息) |
| 7 | DOCKER_USERNAME="doracoin" # Docker Hub 用户名 |
| 8 | REGISTRY="" # 私有仓库地址,如:registry.cn-hangzhou.aliyuncs.com |
| 9 | IMAGE_NAME="YOUR_IMAGE_NAME" |
| 10 | VERSION=${1:-"v1.0.0"} # 默认版本 v1.0.0,可通过参数指定 |
| 11 | |
| 12 | # 颜色输出 |
| 13 | RED='\033[0;31m' |
| 14 | GREEN='\033[0;32m' |
| 15 | YELLOW='\033[1;33m' |
| 16 | BLUE='\033[0;34m' |
| 17 | NC='\033[0m' # No Color |
| 18 | |
| 19 | # 构建完整镜像名 |
| 20 | if [ -z "$REGISTRY" ]; then |
| 21 | FULL_IMAGE="${DOCKER_USERNAME}/${IMAGE_NAME}" |
| 22 | else |
| 23 | FULL_IMAGE="${REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}" |
| 24 | fi |
| 25 | |
| 26 | echo -e "${BLUE}========================================${NC}" |
| 27 | echo -e "${BLUE} ${IMAGE_NAME} Docker 打包推送${NC}" |
| 28 | echo -e "${BLUE}========================================${NC}" |
| 29 | echo "" |
| 30 | echo -e "镜像名称: ${YELLOW}${IMAGE_NAME}${NC}" |
| 31 | echo -e "版本标签: ${YELLOW}${VERSION}${NC}" |
| 32 | echo -e "推送地址: ${YELLOW}${FULL_IMAGE}${NC}" |
| 33 | echo "" |
| 34 | |
| 35 | # 检查 Docker 是否安装 |
| 36 | if ! command -v docker &> /dev/null; then |
| 37 | echo -e "${RED}错误: Docker 未安装${NC}" |
| 38 | exit 1 |
| 39 | fi |
| 40 | |
| 41 | # 检查是否已登录 |
| 42 | echo -e "${BLUE}>>> 检查 Docker 登录状态...${NC}" |
| 43 | if ! docker info &> /dev/null; then |
| 44 | echo -e "${YELLOW}请先登录 Docker:${NC}" |
| 45 | if [ -z "$REGISTRY" ]; then |
| 46 | docker login |
| 47 | else |
| 48 | docker login ${REGISTRY} |
| 49 | fi |
| 50 | fi |
| 51 | |
| 52 | # 构建镜像 |
| 53 | echo "" |
| 54 | echo -e "${BLUE}>>> 开始构建镜像...${NC}" |
| 55 | docker build -t ${IMAGE_NAME}:latest . |
| 56 | |
| 57 | if [ $? -ne 0 ]; then |
| 58 | echo -e "${RED}构建失败!${NC}" |
| 59 | exit 1 |
| 60 | fi |
| 61 | |
| 62 | # 查看镜像大小 |
| 63 | echo "" |
| 64 | echo -e "${BLUE}>>> 镜像信息:${NC}" |
| 65 | docker images ${IMAGE_NAME}:latest --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" |
| 66 | |
| 67 | # 标记镜像 |
| 68 | echo "" |
| 69 | echo -e "${BLUE}>>> 标记镜像版本...${NC}" |
| 70 | docker tag ${IMAGE_NAME}:latest ${FULL_IMAGE}:latest |
| 71 | docker tag ${IMAGE_NAME}:latest ${FULL_IMAGE}:${VERSION} |
| 72 | echo -e "${GREEN}✓ 已标记: ${FULL_IMAGE}:latest${NC}" |
| 73 | echo -e "${GREEN}✓ 已标记: ${FULL_IMAGE}:${VERSION}${NC}" |
| 74 | |
| 75 | # 推送镜像 |
| 76 | echo "" |
| 77 | echo -e "${BLUE}>>> 推送镜像到仓库...${NC}" |
| 78 | echo -e "${YELLOW}正在推送 latest...${NC}" |
| 79 | docker push ${FULL_IMAGE}:latest |
| 80 | |
| 81 | if [ $? -ne 0 ]; then |
| 82 | echo -e "${RED}推送 latest 失败!${NC}" |
| 83 | exit 1 |
| 84 | fi |
| 85 | |
| 86 | echo -e "${YELLOW}正在推送 ${VERSION}...${NC}" |
| 87 | docker push ${FULL_IMAGE}:${VERSION} |
| 88 | |
| 89 | if [ $? -ne 0 ]; then |
| 90 | echo -e "${RED}推送 ${VERSION} 失败!${NC}" |
| 91 | exit 1 |
| 92 | fi |
| 93 | |
| 94 | # 完成 |
| 95 | echo "" |
| 96 | echo -e "${GREEN}========================================${NC}" |
| 97 | echo -e "${GREEN} 推送成功!${NC}" |
| 98 | echo -e "${GREEN}========================================${NC}" |
| 99 | echo "" |
| 100 | echo -e "拉取命令:" |
| 101 | echo -e " ${YELLOW}docker pull ${FULL_IMAGE}:latest${NC}" |
| 102 | echo -e " ${YELLOW}docker pull ${FULL_IMAGE}:${VERSION}${NC}" |
| 103 | echo "" |
| 104 | echo -e "运行命令:" |
| 105 | echo -e " ${YELLOW}docker run -d -p HOST_PORT:CONTAINER_PORT ${FULL_IMAGE}:latest${NC}" |
| 106 | echo "" |
| 107 |