首页 > 其他分享 >docker 一个容器启动多个服务

docker 一个容器启动多个服务

时间:2022-09-26 20:12:29浏览次数:51  
标签:容器 启动 redis sh 进程 docker

目录

docker 一个容器启动多个服务

docker官方并不推荐一个容器启动多个进程,以下是我的总结

  • 启动多个进程只能用脚本作为容器的主进程,真正运行的服务都是2号进程或者3号进程。
  • 只有主进程脚本退出,整个容器才会退出,像2号,3号甚至4号进程都是后台运行,退出并不会影响容器的启动,除了问题排查很费劲

但是公司现在有个需求,要一个容器启动多个服务,只要有一个服务退出容器就退出。有这样的需求该怎么办呢?没办法,该做还是得做,谁让人家给钱了呢

环境准备

我这里是例子,可以根据自己需求准备,在开始前我们需要想好以下几步:

  • 有几个服务运行,怎么启动
  • 试想2号进程服务噶了该怎么让容器退出
  • dockerfile怎么处理

开始试验

我准备启动nginx和redis两个服务,写两个脚本,一个restart启动脚本,一个check检查服务状态的脚本

Dockerfile

//Dockerfile文件如下,centos7:v01是我自己打的镜像,里面装好了nginx和redis,基础镜像就是centos官方的镜像centos:7.8.2003,你们可以自己下载镜像,然后在里面装好nginx,redis
FROM centos7:v01
COPY ./restart.sh  /restart.sh
COPY ./check.sh  /check.sh
RUN  chmod 755 /restart.sh  /check.sh
CMD  "/restart.sh"

restart.sh

#!/bin/bash
/usr/sbin/nginx &
/usr/bin/redis-server &
/check.sh

check.sh

做运维的同学应该不陌生,一个很简单的while嵌套if语句,如果nginx和redis的进程数为0,就打印stop并且退出,中间会sleep1-2秒,否则对机器负载压力加重,没必要。而且尴尬的是过于频繁的去过去计算,容易计算获取到进程数为0,让脚本任务服务挂了,自己也跟着退出了

#/bin/bash
num=1;while (($num==1));do PID1=`ps -ef | grep nginx| grep -v color| wc -l`;sleep 1;PID2=`ps -ef | grep mysql | grep -v color| wc -l`;sleep 1; if [ $PID1 -eq 0 ] || [ $PID2 -eq 0 ];sleep 1;then echo "stop" ;exit 1;else echo $PID1,$PID2;fi;done

测试

//使用Dockerfile打个镜像,把脚本打进去
docker build -t centos:v02 .

//启动容器
docker run -itd --name redisnginx -p 6379:6379  -p 80:80 centos:v02

//进入容器杀死一个进程
docker exec -it redisnginx bash
ps -ef | grep redis |grep -v color| awk '{print $2}' |xargs kill -9

//打印日志
docker logs -f redisnginx

通过图片我们可以看到,杀死了3号进程redis,脚本检查后打印stop然后退出了,如果不想退出,删除掉chenck部分的检查逻辑即可
image

标签:容器,启动,redis,sh,进程,docker
From: https://www.cnblogs.com/liwenchao1995/p/16732217.html

相关文章

  • nginx简易安装启动!
    使用3A服务器搭建的centos系统安装nginx,教程在我的往期博客中,最新教程yum方式如下!添加CentOS7Nginxyum资源库rpm-Uvh http://nginx.org/packages/centos/7/noarch......
  • Openstack+Ceph 宿主机意外重启导致虚拟机无法启动的情况
    由于宿主机意外重启,导致此台宿主机上的所有虚拟机都无法启动   控制台显示如上如果是windows主机的话,会显示蓝屏,也是无法进入系统摸索半天,发现应该是ceph权限问题......
  • 阿里云 ACK 容器服务生产级可观测体系建设实践
    简介: 随着容器被越来越对企业接纳与落地,可观测成为重点。那么,让我们深入了解阿里云ACK容器服务生产级可观测体系建设实践,为自身业务可观测提供参考~作者:冯诗淳......
  • 传统部署HadoopSpark与容器化参考
    hadoop-spark搭建过程参考网上的文档与解决问题的文章地址https://www.cnblogs.com/luo630/p/13271637.htmlhttps://www.cnblogs.com/dintalk/p/12234718.htmlhttps:......
  • 阿里云容器服务 ACK 产品技术动态(202208)
    点击此处即可查看容器服务 ACK 产品详情!......
  • 并发容器
    并发容器1.概述为了线程池做准备,线程池里有一个参数就是用并发容器来做你工作任务的容器。容器分类从物理结构来说,数据结构就两种数组链表从逻辑结构来说,就......
  • ansible 安装docker redis
    1、编辑redis.conf配置文件为了后期修改配置,先写一个配置。后期一般要修改配置的,建议先写一个【#库的数量,默认是16databases32】2、编辑剧本vimredis.yml【 #......
  • Tomcat10升级后启动报错
    10的版本更新导致原有的jar不兼容官方给出了更新工具https://tomcat.apache.org/download-migration.cgi直接下载到本地解压打开lib文件夹,将要升级的war包放到该目录......
  • docker部署kafka
    version:"3"services:zookeeper:image:'bitnami/zookeeper:latest'ports:-'2181:2181'environment:-ALLOW_ANONYMOUS_LOGIN=yes......
  • Linux的启动过程
    接通电源后BIOS开机自检,对硬件进行检测加载MBR(主动引导记录),从磁盘调入boot独立程序,boot把自身复制到高位地址的内存,从而为操作系统释放低位地址的内存。MBR包括三部分......