Docker 在构建镜像的时候,每次都要 build 与 push 的时候 还要指定版本非常的麻烦,本文通过一个 shell 脚本来实现 一键推送docker镜像
正文
前提是你有了 DockerFile 哦
下文内容,建议复制、更改使用,手敲,容易导致空格丢失,导致部分命令失效。
下文内容,建议复制、更改使用,手敲,容易导致空格丢失,导致部分命令失效。
#!/bin/bash
# 获取当前时间并格式化为年月日时分
VERSION=$(date +"%Y%m%d_%H%M")
# 定义镜像名称
IMAGE_NAME="镜像中心仓库地址/项目名/仓库名:V$VERSION"
## 镜像地址就是:项目名/仓库名
## 确定唯一一个镜像地址就是:项目名/仓库名:版本
# 颜色定义
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # 无颜色
# 构建 Docker 镜像
sudo docker build -t $IMAGE_NAME .
# 检查构建是否成功
if [ $? -eq 0 ]; then
echo -e "${GREEN}Docker 镜像构建成功: $IMAGE_NAME${NC}"
# 推送 Docker 镜像
sudo docker push $IMAGE_NAME
if [ $? -eq 0 ]; then
echo -e "${GREEN}Docker 镜像推送成功: $IMAGE_NAME${NC}"
else
echo -e "${RED}Docker 镜像推送失败${NC}"
fi
else
echo -e "${RED}Docker 镜像构建失败${NC}"
fi
使用说明:
- 将上述代码保存到一个文件中,例如
build_and_push.sh。 - 给这个文件添加执行权限:
chmod +x build_and_push.sh - 运行脚本:
./build_and_push.sh
这个脚本会自动生成版本号,构建 Docker 镜像,并在构建成功后推送到指定的 Docker 注册表。
Shell 脚本讲解
if [ $? -eq 0 ]; then 是一个常见的 Bash 脚本语句,用于检查前一个命令的执行结果。
解释:
$?:这是一个特殊变量,表示上一个命令的退出状态码。成功执行的命令通常返回0,而失败的命令返回一个非零值。-eq:这是一个比较运算符,用于判断两个数是否相等。在这里,它用于检查$?的值是否等于0。if [ $? -eq 0 ]; then:这个语句的意思是:如果上一个命令成功执行(即返回值为0),那么就执行then后面的命令块。
附带一个 Dockerfile 演示
# 使用 OpenJDK 8 JRE 作为基础镜像
FROM openjdk:8-jre
# 设置时区为上海
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone
# 设置工作目录和操作选项
ENV WORKDIR /app/
ENV OP op
# 下载并复制 JDK 文件到临时目录
COPY jdk-8u431-linux-x64.tar.gz /tmp/
# 解压 JDK 文件到指定目录
RUN mkdir -p /usr/lib/jvm && \
tar -xzf /tmp/jdk-8u431-linux-x64.tar.gz -C /usr/lib/jvm/
# 设置 JAVA_HOME 环境变量
ENV JAVA_HOME /usr/lib/jvm/jdk1.8.0_431
ENV PATH $JAVA_HOME/bin:$PATH
# 指定要复制的 JAR 包,确保它与 Dockerfile 在同一级目录
ENV JAR your.jar
COPY ${JAR} ${WORKDIR}
# 设置工作目录
WORKDIR ${WORKDIR}
# 启动应用程序并将日志输出到指定文件
CMD ["sh", "-ec", "exec java ${JAVA_OPTS} -jar ${JAR} 2>&1 > /app/nohup/sys_log.log"]
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
免责声明: 本站文章旨在总结学习互联网技术过程中的经验与见解。任何人不得将其用于违法或违规活动!所有违规内容均由个人自行承担,与作者无关。
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
免责声明: 本站文章旨在总结学习互联网技术过程中的经验与见解。任何人不得将其用于违法或违规活动!所有违规内容均由个人自行承担,与作者无关。
