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

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

1、JAVA应用的Dockerfile

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 8001

ENTRYPOINT [ "sh", "-c", "java -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar /app.jar $PARAMS" ]
dockerfile 复制代码
# 使用阿里云镜像仓库中的 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、构建镜像

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

3、查看镜像

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

4、运行

sh 复制代码
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、查看运行中的容器

sh 复制代码
[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
相关推荐
benchmark_cc9 小时前
如何用 Python + QuantDash 快速构建高胜率“配对交易(Pairs Trading)”策略?
开发语言·人工智能·python·pandas·量化交易·quantdash
潘正翔9 小时前
docker核心概念
linux·运维·服务器·docker·容器·centos·运维开发
Python+9910 小时前
Java 枚举类(Enum)详解:从基础到高级应用
java·开发语言·python
dunge202611 小时前
2026年7月最新ChatGPT Plus / Pro 与 Codex:当 AI Agent 最新5.6版本来袭,必须理解事务、幂等与补偿
开发语言·人工智能·python
Java小白笔记12 小时前
Docker 安装配置完全指南:MacOS 、Windows、Linux环境下的安装、配置与验证
linux·macos·docker
小白学大数据13 小时前
两周完成爬虫技术栈升级:Scrapy 迁移 Crawlo 的路径与取舍
爬虫·python·scrapy
用户83562907805113 小时前
使用 Python 在 Excel 中添加和自定义文本框
后端·python
总裁余(余登武)14 小时前
python多个py文件打包【解决exe不能移动运行bug】
python
kisloy14 小时前
【python零基础教程第24讲】代码规范与质量管控
开发语言·python
xywww16815 小时前
AWS 账号权限怎么分:根用户和 IAM 用户区别及日常使用建议
大数据·开发语言·人工智能·python·gpt·云计算·aws