🗒️Docker tini start Java

type
status
slug
date
tags
summary
category
password
icon

tini

tini
krallinUpdated Mar 20, 2025
tini 容器init 是一个最小化的 init 系统,运行在容器内部,用于启动一个子进程,并等待进程退出时清理僵尸和执行信号转发。 这是一个替代庞大复杂的systemd体系的解决方案,已经集成到Docker 1.13中,并包含在Docker CE的所有版本。
Tini的优点:
  • tini可以避免应用程序生成僵尸进程
  • tini可以处理Docker进程中运行的程序的信号,例如,通过Tini, SIGTERM 可以终止进程,不需要你明确安装一个信号处理器

不用tini问题

Docker打包Java后台服务镜像,启动命令样式为:java -jar ****.jar
启动的PID为1,java的一些命令(jmap,jstack...)是无法使用到1进程的
PID 1~5是Linux的特殊进程。
序号
pid进程号
描述
1
1
init进程,系统启动的第一个用户级进程,是其他所有进程的父进程,引导用户空间服务
2
2
kthreadd,内核线程管理
3
3
migration,用于进程在不同CPU间迁移
4
4
ksoftirqd,内核中软中断守护线程,用于系统空闲时定时处理软中断事务
5
5
watchdog,看门狗进程,用于监听内核异常,当系统出现宕机时,可利用watchdog记录宕机时堆栈信息

Dockerfile

Java使用tini

避免java应用作为第一个启动的应用。添加tini,作为第一个启动的应用。
  • 使用openjdk:8-jdk-alpine作为基础镜像
  • 运行apk add --no-cache tini
  • 添加tini作为第一个运行的参数[“tini”, “java”, “-jar”, “/tutorial.jar”, “&”]

Dockerfile

打包启动

资料

上一篇
Jprofile程序闪断
下一篇
SpringBoot优雅停机
Loading...
文章列表
王小扬博客
云原生
Git
Elasticsearch
Apollo
产品
Think
生活技巧
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP
AI