在docker容器中,同时运行java项目和nginx
1、打镜像所需内容结构如下
1、Dockerfile内容如下
FROM frolvlad/alpine-java:jdk8-slim LABEL version="1.0" maintainer="LCZHCH@inspur.com" ARG BASE_DIR=/home/nrms-service ARG APP_NAME=nrms-export ENV SW_AGENT_NAME="$APP_NAME" \ JAR_PATH="$BASE_DIR/$APP_NAME.jar" ENV LOG_DIR=/data/iot/jar/logs #RUN #apk add --update font-adobe-100dpi ttf-dejavu fontconfig ADD $APP_NAME*.jar $JAR_PATH # 安装 Nginx RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main" > /etc/apk/repositories \ && echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community" >> /etc/apk/repositories \ && echo "https://mirror.tuna.tsinghua.edu.cn/alpine/edge/testing" >> /etc/apk/repositories \ && echo "https://pkgs.alpinelinux.org/package/edge/main/x86_64/nginx" >> /etc/apk/repositories RUN apk add nginx # 将自定义配置文件复制到容器中 COPY nginx.conf /etc/nginx/nginx.conf # 复制启动脚本到容器内并给予执行权限 COPY start.sh /home/start.sh RUN chmod +x /home/start.sh EXPOSE 8087 31613 80 ENTRYPOINT ["/home/start.sh"] # 并行运行 Nginx 和 Java 应用 #CMD nginx -g 'daemon off;' && nohup java -jar /home/nrms-service/nrms-export.jar #ENTRYPOINT ["java","-jar","/home/nrms-service/nrms-export.jar"]
Dockerfile说明:
1、基础镜像是frolvlad/alpine-java:jdk8-slim,是alpine系统,可通过apk包管理来安装nginx等各种服务,参考地址:https://www.cnblogs.com/maxiaohei/p/16371668.html。
2、执行apk add nginx时,下载不下来,需要将nginx的相关地址加到/etc/apk/repositories中,具体做法是在https://pkgs.alpinelinux.org/packages中搜索nginx,选择哪一个,点进去,将路径复制下来,添加到/etc/apk/repositories中。参考地址:https://blog.51cto.com/u_15715098/5733169。
3、Dockerfile中CMD只能写一个,如果有多个,只执行最后一个。用&&将两个启动命令放一起,打镜像部署后,只能CMD后紧跟的第一个命令能执行成功,&&后的执行不成功。不知是否写法有问题。最后是加了个 启动文件才可以。
3、start.sh文件内容如下
#!/bin/sh echo "Hello, World!" #nginx -g 'daemon off;' & nohup java -jar /home/nrms-service/nrms-export.jar >msg.log 2>&1 & # 函数定义,启动Nginx start_nginx() { nginx -g 'daemon off;' } # 函数定义,启动Java应用 start_java() { java -jar /home/nrms-service/nrms-export.jar } # 在后台并行启动Nginx和Java应用 start_nginx & start_java # 等待所有后台进程 wait
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)