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

docker-常用应用部署dockerfile模板

文章目录

  • 概述
  • Springboot
    • -Djava.security.egd=file:/dev/./urandom参数说明
  • vue应用部署
    • nginx.conf配置
    • Dockerfile

概述

本文列举了Java开发中常用如SpringBoot、Vue前端等类型的应用Docker部署所需的DockerFile

Springboot

FROM anapsix/alpine-java:8_server-jre_unlimited
# 下面是JDK17镜像
# FROM bellsoft/liberica-openjdk-debian:17.0.11-cds

MAINTAINER xxx作者
#定义参数(build构建时使用)
ARG VERSION
ARG SERVICE_NAME
ARG SERVICE_PORT

# 系统编码
#设置环境变量(程序运行时使用)
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
ENV JAVA_OPTS="-Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
ENV PARAMS="--spring.profiles.active=prod"
ENV VERSION=$VERSION
ENV SERVICE_NAME=$SERVICE_NAME
ENV SERVICE_PORT=$SERVICE_PORT

#工作目录
WORKDIR /usr/local/

# 声明一个挂载点,容器内此路径会对应宿主机的某个文件夹
VOLUME ["/usr/local/logs"]

# 应用构建成功后的jar文件被复制到镜像内,名字也改成了app.jar
ADD ./target/${SERVICE_NAME}-${VERSION}.jar app.jar

# 声明运行时端口
EXPOSE ${SERVICE_PORT}

# 健康检查参数设置,每5秒检查一次,接口超时时间2秒,连续10次返回1就判定该容器不健康
HEALTHCHECK --interval=5s \
            --timeout=3s \
            --retries=10 \
            CMD curl -fs http://localhost:${SERVICE_PORT}/actuator/health || exit 1

# 启动容器时的进程
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar app.jar $PARAMS"]

构建命令

docker build --build-arg VERSION=1.0.0 SERVICE_NAME=MyApp SERVICE_PORT=8080 -t my-springboot-app .

启动命令

docker run -d -p 8080:8080 --name my-springboot-container my-springboot-app

-Djava.security.egd=file:/dev/./urandom参数说明

在 Docker 容器中运行 Java 应用时,你可能会遇到由于熵池不足导致的 SSL/TLS 握手延迟问题。这是因为 Java 默认使用 /dev/random 作为其安全随机数生成器(SecureRandom)的来源,而 /dev/random 在熵池耗尽时会阻塞等待更多的熵输入,这在某些情况下(特别是容器化环境中)可能导致显著的性能瓶颈。为了缓解这个问题,可以通过设置 JVM 参数 security.egd 来指定使用 /dev/urandom 作为熵源。/dev/urandom 不会因为熵池不足而阻塞,因此可以提高应用启动速度和响应时间

vue应用部署

nginx.conf配置

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        try_files $uri $uri/ /index.html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Dockerfile

# 第一阶段:构建Vue应用
FROM node:18-alpine AS build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# 第二阶段:使用Nginx服务静态文件
FROM nginx:alpine AS production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
COPY ./nginx.conf /etc/nginx/conf.d/default.conf

EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

构建命令

docker build -t my-vue-app .

启动命令

docker run -d -p 80:80 --name my-vue-container my-vue-app

http://www.kler.cn/a/429949.html

相关文章:

  • 数据库优化、sql优化
  • 奇异值分解推导——把任意n维度矢量,从vi基分量对应映射到ui基分量。所以分解后,V转置是提取矢量中属于V的列的分量。
  • 磁盘阵列服务器和普通服务器的区别
  • 在微信小程序中引入字体样式
  • 杂谈随笔-关于unity开发游戏
  • 如何让Google快速收录你的页面?
  • (0基础保姆教程)-JavaEE开课啦!--13课程(Interception拦截器)-完结
  • 如何使用 Docker Compose 安装 Memos 自托管笔记应用
  • 非MFC工程实现消息映射
  • 最小二乘法原理
  • couchbase 支持的数据格式以及与数据湖的对比
  • 【Appium】AttributeError: ‘NoneType‘ object has no attribute ‘to_capabilities‘
  • nginx不允许静态文件被post请求显示405 not allowed
  • DLL注入(AppInit_DLLs)
  • 24/12/9 算法笔记<强化学习> TD3
  • CSS学习记录07
  • 专业135+总分400+华中科技大学824信号与系统考研经验华科电子信息与通信工程,真题,大纲,参考书。
  • Claude:高效智能的AI语言模型
  • 【日常记录-Java】查看Maven本地仓库的位置
  • MySQL | 尚硅谷 | 第12章_MySQL数据类型精讲