当前位置: 首页 > web >正文

14、Docker构建后端镜像并运行

14、Docker构建后端镜像并运行

1、JAVA应用的Dockerfile

FROM registry.cn-hangzhou.aliyuncs.com/xx_blog/openjdk:21-jdk
LABEL maintainer="xx@qq.com"
#复制打好的jar包
COPY *.jar /app.jar
RUN  apk add -U tzdata; \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime; \
echo 'Asia/Shanghai' >/etc/timezone; \
touch /app.jar;ENV JAVA_OPTS=""
ENV PARAMS=""EXPOSE 8001ENTRYPOINT [ "sh", "-c", "java -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar /app.jar $PARAMS" ]
# 使用阿里云镜像仓库中的 OpenJDK 21 JDK 作为基础镜像,减少网络下载时间
FROM registry.cn-hangzhou.aliyuncs.com/xx_blog/openjdk:21-jdk# 镜像作者信息(可选)
LABEL maintainer="xx@qq.com"# 将打包好的 Spring Boot 应用 JAR 文件复制到镜像根目录并命名为 /app.jar
COPY *.jar /app.jar# 安装 tzdata 以支持时区设置,并将容器时区设置为上海(Asia/Shanghai)
RUN  apk add -U tzdata; \ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime; \echo 'Asia/Shanghai' >/etc/timezone; \touch /app.jar;# 定义环境变量 JAVA_OPTS,用于传递 JVM 启动参数(如内存设置等)
ENV JAVA_OPTS=""# 定义应用运行参数环境变量 PARAMS,可用于运行时传递程序参数
ENV PARAMS=""# 容器对外暴露的端口为 8001
EXPOSE 8001# 容器启动命令,使用 shell 启动 Java 应用,并加载 JAVA_OPTS 和 PARAMS
ENTRYPOINT [ "sh", "-c", "java -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar /app.jar $PARAMS" ]

2、构建镜像

image-20250729105736276

docker build -t xx-springboot:v1 .
参数作用
docker buildDocker 的命令,用于构建镜像
-t xx-springboot:v1给构建出的镜像打标签(tag),这里 xx-springboot 是镜像名,v1 是版本号。可以用来区分不同版本的镜像,例如后续可以有 v2、v3。
.指定构建上下文,也就是 Dockerfile 所在的目录。. 代表当前目录,Docker 会从这个目录中查找 Dockerfile 和它引用的其他文件(比如 .jar 包等)。 如果不在当前目录 则用 -f 指定

3、查看镜像

[root@xx-blog xx-springboot]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
xx-springboot   v1        82132e652235   3 minutes ago   546MB

4、运行

docker run -d --name=xx-springboot -p 8001:8001 xx-springboot:v1
docker run创建并运行一个容器
-d后台运行容器(即“detached”模式,不会阻塞终端)
–name=xx-springboot给容器起个名字叫 xx-springboot,方便后续管理
-p 8001:8001宿主机的 8001 端口映射到容器内的 8001 端口(端口映射)
xx-springboot:v1使用名为 xx-springboot、标签为 v1 的镜像创建容器

5、查看运行中的容器

[root@xx-blog xx-springboot]# docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED         STATUS         PORTS                                       NAMES
1a9645a41184   xx-springboot:v1   "sh -c 'java -Djava.…"   3 seconds ago   Up 2 seconds   0.0.0.0:8001->8001/tcp, :::8001->8001/tcp   xx-springboot
http://www.xdnf.cn/news/19900.html

相关文章:

  • 关于SPI串口spidev接收数据不完整的问题
  • Moonchain:「新加坡大华银行」加持下连接现实金融与链上经济的价值通道
  • 大数据毕业设计选题推荐-基于大数据的电信客户流失数据分析系统-Hadoop-Spark-数据可视化-BigData
  • 03、Maven下载与阿里云镜像加速
  • 电子电气架构 --- 新EEA架构下开发模式转变
  • Openmanus复现教程:打造自己的Agent助手
  • Python之split - 常遇见的bug
  • Redis突然挂了,数据丢了多少?就看你用RDB还是AOF
  • Git配置:禁用全局HTTPS验证
  • LangGraph 时间旅行深度解析:掌握状态、持久化与人机协同工作流
  • SecureCRT v9.5.2 Mac SSH终端操作工具
  • 3种通过USB从电脑传输文件到iPad的方法
  • 【Luogu】P2398 GCD SUM (容斥原理求gcd为k的数对个数)
  • Ubuntu查看开机以来修改的文件
  • k8s,v1.30.4,安装使用docker
  • 嵌入式解谜日志-网络编程(udp,tcp,(while循环原理))
  • [特殊字符] 预告!我正在开发一款让自动化操作变得「像呼吸一样自然」的AI神器
  • 从静态到智能:用函数式接口替代传统工具类
  • 命令行小工具
  • Controller返回CompletableFuture到底是怎么样的
  • Ubuntu系统镜像源配置
  • 数据结构——树(03二叉树,与路径有关的问题,代码练习)
  • SPI片选踩坑实录(硬件片选和软件片选)
  • Base64编码的作用与应用场景
  • 利用 Java 爬虫获取淘宝商品 SKU 详细信息实战指南
  • 美团龙猫(longcat.AI)编写的利用二分查找优化Excel的sheet.xml指定范围输出C程序
  • 【数学建模学习笔记】时间序列分析:ARIMA
  • Scikit-learn从入门到实践:Scikit-learn入门-安装与基础操作
  • Qwen3-Reranker-0.6B 模型结构
  • Shell脚本一键监控平台到期时间并钉钉告警推送指定人