容器内部运行多个进程(服务)

  1. 容器的哲学是一个进程(服务)一个容器
    • 但是一个容器多个进程(服务)是可以实现的,比如: ELK的容器,就把3个进程塞在了一个容器里
  2. 常见的实现方式
    • 参考: 如何科学的在Docker Container中运行多个服务
    • 参考未提及的:
      • 使用supervisor在Docker同时启动多个服务
      • PouchContainer
      • 补充用脚本启动的一种方式,这里不必用到while true; do sleep 10;done这样
        	#!/bin/bash
        	# 一共2个进程,其中一个进程后台,另一个进程作为前台进程撑起整个容器
        	nohup /skygram/http8001 &
        	/skygram/http8002
        
        • 对应的Dockerfile
          		FROM ubuntu:18.04
          		RUN groupadd -r -g 999 skygram && useradd -r -g skygram -u 999 skygram
          		RUN mkdir /skygram
          		RUN chown -R skygram:skygram /skygram
          		COPY sources.list /etc/apt/sources.list
          		RUN set -x \
          		&& apt update \
          		&& apt install -y gosu \
          		&& apt clean \
          		&& rm -rf /var/lib/apt/lists/* \
          		&& gosu nobody true \
          		&& set +x
          		
          		COPY http8001 /skygram
          		COPY http8002 /skygram
          		RUN chown -R skygram:skygram /skygram/http8001
          		RUN chown -R skygram:skygram /skygram/http8002
          		COPY start_gosu.sh /skygram
          		RUN chown -R skygram:skygram /skygram/start_gosu.sh
          		ENTRYPOINT ["gosu", "skygram", "/skygram/start_gosu.sh"]
            ```
          
  3. 比较好的方式
    使用ELK里使用的baseimage镜像,理由在2.1的那篇文章有讲到
  4. 需要深入了解的
    1. init进程: https://www.jianshu.com/p/43e7faf8e1a5
    2. baseimage的用法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章