🗒️Docker tini start Java
type
status
slug
date
tags
summary
category
password
icon
tini
tini
krallin • Updated 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...