容器內部運行多個進程(服務)

  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的用法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章