您当前的位置:首页 > 电脑百科 > 程序开发 > 前端

容器如何使用tini作为启动进程

时间:2021-12-23 11:36:45  来源:  作者:mj谈云技术

一般的Docker镜像为了节省空间,通常是没有安装systemd或者sysvint这类初始化系统的进程。一旦容器的起始进程不稳定将会产生大量的僵尸进程,影响宿主系统的运行。

 

缺少init的容器

init系统有以下几个特点:

  • 它是系统的第一个进程,负责产生其他所有用户进程。
  • init 以守护进程方式存在,是所有其他进程的祖先。
  • 它主要负责:

1.启动守护进程

2.回收孤儿进程

3.将操作系统信号转发给子进程

 

以下dockerfile为例:

FROM Nginx


ENTRYPOINT ["nginx", "-c"]
CMD ["/etc/nginx/nginx.conf"]

当docker容器启动时,PID 1即容器启动程序将会是nginx, 只要这个程序停止,容器就会跟住停止。由于nginx 不具备init 上述的功能,PID 1是无法回收异常退出进程,异常退出的进程变成僵尸进程,继续占用系统资源。

当多个容器运行在一个宿主机上的时候,为了避免一个容器消耗完我们整个宿主机进程号资源,docker会配置PID CGROUP来限制每个容器的最大进程数目。也就是说,进程数目在每个容器中也是有限的,是一种很宝贵的资源。(例如:linux 机器上的进程总数目是有限制,如果进程数据过多,比如你想ssh登录到机器上就不行 )

 

如何使用 tini 初始化系統

tini 是一套更简单的 init 系统,专门用来执行一个子程序(spawn a single child),并等待子程序结束,即便子程序已经变成僵尸程序也能捕捉到,同时也能转送 Signal 给子程序。如果你使用docker来跑容器,可以非常简便的在docker run的时候用--init参数,就会自动注入tini程式 (/sbin/docker-init) 到容器中,并且自动取代ENTRYPOINT设定,让原本的程式直接跑在 tini程序底下。

 

dockerfile如下:

FROM nginx


RUN export TINI_VERSION=0.9.0 && 
    export TINI_SHA=fa23d1e20732501c3bb8eeeca423c89ac80ed452 && 
    curl -fsSL https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini-static -o /bin/tini && 
    echo 'Calculated checksum: '$(sha1sum /bin/tini) && 
    chmod +x /bin/tini && echo "$TINI_SHA  /bin/tini" | sha1sum -c 
    
ENTRYPOINT ["/bin/tini","--","/opt/nginx/docker-entrypoint.sh"]
ENTRYPOINT ["nginx", "-c"] 
CMD ["/etc/nginx/nginx.conf"]

 

建议为了提高容器运行的可靠性,可以选择在打包镜像时加入tini的安装,并以tini作为启动入口。

以上就是关于今天的全部内容,下期将给大家带来《K8S之调度器-精细控制Pod分布》,敬请期待~



Tags:容器   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一般的docker镜像为了节省空间,通常是没有安装systemd或者sysvint这类初始化系统的进程。一旦容器的起始进程不稳定将会产生大量的僵尸进程,影响宿主系统的运行。 缺少init的...【详细内容】
2021-12-23  Tags: 容器  点击:(6)  评论:(0)  加入收藏
环境:Spring5.3.10通常,应用程序开发人员不需要对ApplicationContext实现类进行子类化。相反,SpringIOC容器可以通过插入特殊集成接口的实现来扩展。使用BeanPostProcessor自定...【详细内容】
2021-10-26  Tags: 容器  点击:(33)  评论:(0)  加入收藏
今天不做保姆级教程,分享奶爸常用、好用的Docker应用。有了这些Docker,Nas的可玩性会大幅提高,有时候奶爸也在想,刨去官方套件不考虑的话,Nas真的是差不多。如果小伙伴们有需要,后...【详细内容】
2021-09-03  Tags: 容器  点击:(167)  评论:(0)  加入收藏
概述谷歌云使用先进的 Andromeda 网络来实现 VPC 内实例之间的相互访问,以及 Google Kubernetes Engine (GKE) 的 Pod 的跨节点互访,避免了配置静态路由或者 Overlay 网络带来...【详细内容】
2021-08-20  Tags: 容器  点击:(103)  评论:(0)  加入收藏
stack容器#include <iostream>using namespace std;#include <stack>//容器头文件void test(){stack<int>p;p.push(100);p.push(1000);p.push(100);while(!p.empty()){cout<...【详细内容】
2021-08-17  Tags: 容器  点击:(81)  评论:(0)  加入收藏
一、介绍    1、介绍        最近无聊,也没什么事做,没事做总是要给自己找点事情做吧,毕竟人的生活在与折腾。于是,决定自己手动写一个 IOC 的框架。我们知道在 Net...【详细内容】
2021-07-20  Tags: 容器  点击:(80)  评论:(0)  加入收藏
环境:Spring5.3.3Spring容器启动时,创建 DefaultListableBeanFactory 工厂实例化 AnnotationConfigApplicationContext对象public AnnotationConfigApplicationContext(String...【详细内容】
2021-06-10  Tags: 容器  点击:(152)  评论:(0)  加入收藏
对于初学者来说,刚刚接触docker会有点迷,特别是镜像与容器。其实我们可以理解镜像与容器为一对多的关系。下图错误的示范,为什么是错误的呢?因为可以通过一个镜像确实可以启动...【详细内容】
2021-06-09  Tags: 容器  点击:(136)  评论:(0)  加入收藏
前言最近在工作中,接手了不少历史遗留的项目,有一些依赖是使用的docker启动,可以正常使用。但是由于优化服务器资源的缘故,需要将这些依赖迁移到其他服务器,这时候问题出现了。此...【详细内容】
2021-06-02  Tags: 容器  点击:(253)  评论:(0)  加入收藏
虚拟节点(Virtual Node)实现了Kubernetes与弹性容器实例ECI的无缝连接,让Kubernetes集群轻松获得极大的弹性能力,而不必受限于集群的节点计算容量。您可以灵活动态的按需创建ECI...【详细内容】
2021-04-15  Tags: 容器  点击:(230)  评论:(0)  加入收藏
▌简易百科推荐
相信每一个前端在对接 API 时,多多少少一定遇过以下错误: 虽然要解决此问题大部分还是需要后端帮忙,但前端也需要知道为什么会发生、要如何解决。同源政策 (Same Origin Policy...【详细内容】
2021-12-24  前端小智    Tags:同源政策   点击:(6)  评论:(0)  加入收藏
一般的docker镜像为了节省空间,通常是没有安装systemd或者sysvint这类初始化系统的进程。一旦容器的起始进程不稳定将会产生大量的僵尸进程,影响宿主系统的运行。 缺少init的...【详细内容】
2021-12-23  mj谈云技术    Tags:容器   点击:(6)  评论:(0)  加入收藏
作者:maomincoding 来源:前端历劫之路 前言说起文档,我们可能会第一时间会想起很多技术文档,比如Vue.js文档、React.js文档、TypeScript文档,它们都有相似的布局和样式。那么,作为...【详细内容】
2021-12-23  Nodejs开发    Tags:文档   点击:(8)  评论:(0)  加入收藏
作者:damyxu,腾讯 PCG 前端开发工程师iframe是一个天然的微前端方案,但受限于跨域的严格限制而无法很好的应用,本文介绍一种基于 iframe 的全新微前端方案,继承iframe的优点,补足...【详细内容】
2021-12-16  damyxu  腾讯技术工程  Tags:前端   点击:(15)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条