打包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
具体来说,它会执行以下操作:
java:调用 Java 运行时环境(JRE)。-jar:这是一个 Java 命令行选项,表示运行一个 JAR(Java Archive)文件。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
- sh:
sh是 Linux/Unix 系统中的一个命令解释器(Shell)。在 Docker 容器中使用它,可以让我们运行一条包含多个命令或环境变量的复杂命令。 - -c:
-c是sh的一个参数,表示后面跟的是要执行的命令字符串。也就是说,sh -c会执行后面给定的字符串内容作为命令。 - "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.properties或application-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 宿主机-->容器