Docker部署springboot项目

打包Java项目为一个镜像

  • CentOS/Unbuntu (Linux环境)
  • JDK
  • 上传jar包(拷贝jar包过去)
  • 运行jar包(配置启动脚本)

分层,便于复用

复制代码
FROM centos:7   //镜像名:版本号(默认latest)
COPY jdk17.tar.gz /usr/local
RUN tar -zxvf /usr/local/jdk17.tar.gz -C /usr/local/ && rm /usr/local/jdk.tar.gz  //嵌套语法

ENV JAVA_HOME=/USR/LOCAL/jdk-17.0.10
ENV PATH=$JAVA_HOME/bin:$PATH

RUN mkdir -p /app
WORKDIR /app   //切换工作目录,若不存在则会自动创建,类似cd

COPY app.jar app.jar  //复制应用JAR文件到容器    A-->B中

EXPOSE 8080

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/app.jar"]
          //执行java程序	提高启动速度	 							运行一个指定的jar包 应用的jar包路径




构建镜像
docker build -t 镜像名  .(Dockerfile所在目录)
          //tag

CMD ["java", "-jar", "text.jar"] 是 Dockerfile 中的一个命令,它用来指定在容器启动时运行的默认命令。

java -jar text.jar

具体来说,它会执行以下操作:

  1. java:调用 Java 运行时环境(JRE)。
  2. -jar:这是一个 Java 命令行选项,表示运行一个 JAR(Java Archive)文件。
  3. text.jar:这是 JAR 文件的文件名,包含了 Java 应用程序的代码。

因此,这个命令的作用是在容器启动时,执行 java -jar text.jar,也就是运行 text.jar 这个 Java 可执行文件。

这个命令常用于 Docker 容器化 Java 应用,确保容器启动时自动运行指定的 Java 程序。


CMD ["sh", "-c", "java $JAVA_OPTS -jar app.jar --spring.profiles.active=$SPRING_PROFILES_ACTIVE"]

sh -c java JAVA_OPTS -jar app.jar --spring.profiles.active=SPRING_PROFILES_ACTIVE

  1. sh
    sh 是 Linux/Unix 系统中的一个命令解释器(Shell)。在 Docker 容器中使用它,可以让我们运行一条包含多个命令或环境变量的复杂命令。
  2. -c
    -csh 的一个参数,表示后面跟的是要执行的命令字符串。也就是说,sh -c 会执行后面给定的字符串内容作为命令。
  3. "java JAVA_OPTS -jar app.jar --spring.profiles.active=SPRING_PROFILES_ACTIVE"
    这是 sh 命令要执行的实际命令字符串。在这个命令中:
    • java:调用 Java 运行时环境,执行 Java 程序。
    • $JAVA_OPTS:这是一个环境变量,通常用于传递给 Java 程序的额外参数。你可以在 Docker 容器启动时通过 docker run 命令或 Dockerfile 中的 ENV 指令来定义它的值。例如,它可能包含 JVM 参数,如 -Xms512m -Xmx1024m 来设置内存大小。
    • -jar app.jar:这是标准的 Java 启动命令,表示运行 app.jar 这个 JAR 文件。
    • **--spring.profiles.active=SPRING_PROFILES_ACTIVE**:这是 Spring Boot 应用程序的配置参数,用来指定激活的 Spring 配置文件。`SPRING_PROFILES_ACTIVE也是一个环境变量,它的值会在容器启动时传入,通常用于切换不同的 Spring 配置文件(例如开发、生产等环境)。比如,如果SPRING_PROFILES_ACTIVE=prod,它会加载 application-prod.propertiesapplication-prod.yml` 之类的配置文件。

总结

这个命令的作用是:

  • 它使用 sh 启动一个命令行。
  • 然后通过 sh -c 执行一个包含 Java 启动命令的字符串,启动一个 Spring Boot 应用程序。
  • 在启动时,$JAVA_OPTS$SPRING_PROFILES_ACTIVE 环境变量会被替换成实际的值,这样可以根据环境来调整 JVM 参数和 Spring 配置文件

Docker 在尝试拉取镜像 openjdk:8-jre-alpine(官方镜像)时,无法连接到 Docker Hub(registry-1.docker.io

docker-compose追溯错误日志命令 docker-compose up --force-recreate

清除旧容器命令 docker-compose down

删除容器 docker ps -a -->docker stop test-nginx-->docker rm test-nginx

强制删除 docker rm -f test-nginx

mysql问题

所以不用在docker-compose.yml中设置MYSQL_USER:root

nginx问题

# 如果你只想重启 nginx docker-compose up -d --force-recreate recruite_nginx

mime.types****是 Nginx 用来识别不同文件类型(如 .html, .css, .js, .jpg)并自动为它们设置正确 HTTP Content-Type 响应头的配置文件,通常位于 /etc/nginx/mime.types**,你需要在 nginx.conf 中用** **include /etc/nginx/mime.types;**加载它,否则可能导致浏览器无法正确处理静态资源。

port 8081:8080 宿主机-->容器

kurbernets

相关推荐
蝎子莱莱爱打怪7 小时前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
初次攀爬者8 小时前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺9 小时前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
Derek_Smart10 小时前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
Nyarlathotep011316 小时前
SpringBoot Starter的用法以及原理
java·spring boot
小p1 天前
docker学习7:docker 容器的通信方式
docker
小p1 天前
docker学习5:提升Dockerfile水平的5个技巧
docker
小p1 天前
docker学习3:docker是怎么实现的?
docker
dkbnull1 天前
深入理解Spring两大特性:IoC和AOP
spring boot
洋洋技术笔记2 天前
Spring Boot条件注解详解
java·spring boot