成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何運(yùn)行多進(jìn)程Docker容器?

云計(jì)算
通常,Docker容器適合運(yùn)行單個(gè)進(jìn)程,但是很多時(shí)候我們需要在Docker容器中運(yùn)行多個(gè)進(jìn)程。這時(shí)有兩種不同方法來運(yùn)行多進(jìn)程容器:使用shell腳本或者supervisor,兩種方法都很簡(jiǎn)單,各有優(yōu)劣,只是有一些值得注意的細(xì)節(jié)。

 一般來說,Docker容器比較適合運(yùn)行單個(gè)進(jìn)程。例如,項(xiàng)目"使用多個(gè)Docker容器運(yùn)行Kubernetes",Kubernetes的各個(gè)組件分別運(yùn)行在各個(gè)容器之中,每個(gè)容器只運(yùn)行單個(gè)進(jìn)程。

然而,很多時(shí)候我們需要在Docker容器中運(yùn)行多個(gè)進(jìn)程。例如,項(xiàng)目"使用單個(gè)Docker容器運(yùn)行Kubernetes",kubernetes的各個(gè)組件均運(yùn)行在同一個(gè)容器中,該容器中運(yùn)行了多個(gè)進(jìn)程。那么,如何運(yùn)行多進(jìn)程Docker容器?

一種方法是使用Shell腳本,另一種方法是使用進(jìn)程管理工具Supervisor。kiwenlau/kubernetes-shell和kiwenlau/kubernetes-supervisor分別采用了這兩種方法,用于啟動(dòng)多個(gè)進(jìn)程來運(yùn)行Kubernetes的各個(gè)組件,從而實(shí)現(xiàn)"使用單個(gè)Docker容器運(yùn)行Kubernetes"。下面我將分別介紹兩種不同方法。

使用Shell腳本運(yùn)行多進(jìn)程Docker容器

這個(gè)方法大家應(yīng)該會(huì)比較熟悉,使用Shell腳本依次啟動(dòng)Kubernetes的各個(gè)組件即可。以下為start-kubernetes.sh

  1. !/bin/bashstart docker daemondocker daemon > /var/log/docker.log 2>&1 & 
  2. start etcdetcd --data-dir=/var/etcd/data > /var/log/etcd.log 2>&1 & 
  3. wait for ectd to setupsleep 5  
  4. start apiserverkube-apiserver --service-cluster-ip-range=10.0.0.1/24 --insecure-bind-address=0.0.0.0 --etcd_servers=http://127.0.0.1:4001 > /var/log/kube-apiserver.log 2>&1 & 
  5. wait for apiserver to setupsleep 5 
  6. start controller manager, sheduler, kubelet and proxykube-controller-manager --master=http://0.0.0.0:8080 > /var/log/kube-controller-manager.log 2>&1 & 
  7. kube-scheduler --master=http://0.0.0.0:8080 > /var/log/kube-scheduler.log 2>&1 & 
  8. kubelet --api_servers=http://0.0.0.0:8080 --address=0.0.0.0 --cluster_dns=10.0.0.10 --cluster_domain="kubernetes.local" --pod-infra-container-image="kiwenlau/pause:0.8.0" > /var/log/kubelet.log 2>&1 & 
  9. kube-proxy --master=http://0.0.0.0:8080 > /var/log/kube-proxy.log 2>&1 & 
  10. just keep this script runningwhile [[ true ]]; do 
  11. sleep 1 
  12. done 

然后在Dockerfile中,將start-kubernetes.sh指定為Docker容器默認(rèn)執(zhí)行的命令即可:

  1. CMD ["start-kubernetes.sh"

需要注意的一點(diǎn)在于,start-kubernetes.sh腳本將作為Docker容器的1號(hào)進(jìn)程運(yùn)行,必須始終保持運(yùn)行。因?yàn)镈ocker容器僅在1號(hào)進(jìn)程運(yùn)行時(shí)保持運(yùn)行,換言之,Docker容器將在1號(hào)進(jìn)程退出后Exited。由于Kubernetes的各個(gè)組件都以后臺(tái)進(jìn)程方式執(zhí)行,我在腳本末尾添加了死循環(huán),以保持start-kubernetes.sh腳本始終處于運(yùn)行狀態(tài)。

  1. just keep this script runningwhile [[ true ]]; do  
  2. sleep 1  
  3. done 

使用supervisor運(yùn)行多進(jìn)程Docker容器

Supervisor是進(jìn)程管理工具。這時(shí),需要編寫supervisor的配置文件kubernetes.conf:

  1. [supervisord]  
  2. nodaemon=true  
  3. [program:etcd] 
  4. command=etcd --data-dir=/var/etcd/data 
  5. autorestart=true  
  6. stdout_logfile=/var/log/etcd.stdout.log 
  7. stderr_logfile=/var/log/etcd.stderr.log 
  8. [program:kube-apiserver] 
  9. command=kube-apiserver --service-cluster-ip-range=10.0.0.1/24 --insecure-bind-address=0.0.0.0 --etcd_servers=http://127.0.0.1:4001 
  10. autorestart=true 
  11. stdout_logfile=/var/log/kube-apiserver.stdout.log 
  12. stderr_logfile=/var/log/kube-apiserver.stderr.log 
  13. [program:kube-controller-manager] 
  14. command=kube-controller-manager --master=http://0.0.0.0:8080 
  15. autorestart=true 
  16. stdout_logfile=/var/log/controller-manager.stdout.log 
  17. stderr_logfile=/var/log/controller-manager.stderr.log 
  18. [program:kube-scheduler] 
  19. command=kube-scheduler --master=http://0.0.0.0:8080 
  20. autorestart=true 
  21. stdout_logfile=/var/log/kube-scheduler.stdout.log 
  22. stderr_logfile=/var/log/kube-scheduler.stderr.log 
  23. [program:kubelet] 
  24. command=kubelet --api_servers=http://0.0.0.0:8080 --address=0.0.0.0 --cluster_dns=10.0.0.10 --cluster_domain="kubernetes.local" --pod-infra-container-image="kiwenlau/pause:0.8.0" 
  25. autorestart=true 
  26. stdout_logfile=/var/log/kubelet.stdout.log 
  27. stderr_logfile=/var/log/kubelet.stderr.log 
  28. [program:kube-proxy] 
  29. command=kube-proxy --master=http://0.0.0.0:8080 
  30. autorestart=true 
  31. stdout_logfile=/var/log/kube-proxy.stdout.log 
  32. stderr_logfile=/var/log/kube-proxy.stderr.log 
  33. [program:docker] 
  34. command=docker daemon 
  35. autorestart=true 
  36. stdout_logfile=/var/log/docker.stdout.log 
  37. stderr_logfile=/var/log/docker.stderr.log 

可知,將Kubernetes的各個(gè)組件的啟動(dòng)命令設(shè)為command即可。autorestart參數(shù)設(shè)為true,意味著supervisor將負(fù)責(zé)重啟意外退出的組件。stdout_logfile和stderr_logfile參數(shù)則可以用于設(shè)置命令的標(biāo)準(zhǔn)輸出文件和標(biāo)準(zhǔn)錯(cuò)誤輸出文件。

然后在Dockerfile中,將supervisord指定為Docker容器默認(rèn)執(zhí)行的命令即可:

  1. CMD ["supervisord""-c""/etc/supervisor/conf.d/kubernetes.conf"

此時(shí), supervisord是Docker容器中的1號(hào)進(jìn)程,也需要始終保持運(yùn)行狀態(tài)。nodaemon設(shè)為true時(shí),表示supervisor保持前臺(tái)運(yùn)行而非在后臺(tái)運(yùn)行。若supervisor在后臺(tái)運(yùn)行,則Docker容器也會(huì)在執(zhí)行supervisord命令后立即Exited.

  1. [supervisord] 
  2. nodaemon=true 

總結(jié)

使用Shell腳本運(yùn)行多進(jìn)程Docker容器,優(yōu)勢(shì)是大家比較熟悉。由于需要保持Docker容器的1號(hào)進(jìn)程始終運(yùn)行,這一點(diǎn)比較容易出錯(cuò)。若要實(shí)現(xiàn)進(jìn)程意外退出后自動(dòng)重啟的話,使用shell腳本比較麻煩。

使用supervisor運(yùn)行多進(jìn)程Docker容器,非常方便。另外,保持1號(hào)進(jìn)程保持運(yùn)行,以及進(jìn)程意外退出后自動(dòng)重啟,實(shí)現(xiàn)起來都很簡(jiǎn)單。

使用多個(gè)Docker容器運(yùn)行Kubernetes

GitHub地址

  1. kiwenlau/single-kubernetes-docker 

下圖顯示了我在Ubuntu主機(jī)上運(yùn)行單機(jī)版Kubernetes的架構(gòu)。可知,我一共運(yùn)行了7個(gè)容器,分別運(yùn)行Kubernetes的各個(gè)組件。

 

single-kubernetes-docker.png

 

使用單個(gè)Docker容器運(yùn)行Kubernetes

GitHub地址:

  1. kiwenlau/kubernetes-shell 
  2. kiwenlau/kubernetes-supervisor 

該項(xiàng)目中,我將kubernetes的所有組件:etcd, controller manager, apiserver, scheduler, kubelet, proxy以及docker daemon均運(yùn)行在同一個(gè)Docker容器之中。

容器啟動(dòng)時(shí),各個(gè)組件由shell腳本或者supervisor啟動(dòng)。

 

kubernetes-shell-supervisor.png

 

參考

1. Using Supervisor with Docker

2. How To Install and Manage Supervisor on Ubuntu and Debian VPS

3. 基于Docker搭建單機(jī)版Kuberntes

4. kiwenlau/single-kubernetes-docker

責(zé)任編輯:xinxiaoliang 來源: DockOne
相關(guān)推薦

2009-04-21 09:12:45

Java多進(jìn)程運(yùn)行

2017-06-30 10:12:46

Python多進(jìn)程

2020-09-19 18:03:42

Docker

2014-10-11 11:30:43

CentOSDocker

2019-06-26 08:00:39

Docker容器運(yùn)行命令

2010-07-15 12:51:17

Perl多進(jìn)程

2021-09-10 21:25:43

Redis分布式

2018-07-12 10:33:50

Docker容器內(nèi)存

2012-08-08 09:32:26

C++多進(jìn)程并發(fā)框架

2024-03-29 06:44:55

Python多進(jìn)程模塊工具

2021-10-12 09:52:30

Webpack 前端多進(jìn)程打包

2022-12-27 09:07:23

Docker容器程號(hào)

2024-08-26 08:39:26

PHP孤兒進(jìn)程僵尸進(jìn)程

2021-12-12 22:20:47

Docker開發(fā)容器

2019-07-01 09:33:58

DockerNginx操作系統(tǒng)

2019-02-26 11:15:25

進(jìn)程多線程多進(jìn)程

2021-02-25 11:19:37

谷歌Android開發(fā)者

2022-03-09 17:01:32

Python多線程多進(jìn)程

2020-11-18 09:06:04

Python

2022-05-06 07:20:38

Docker容器鏡像
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久不射电影网 | 亚洲成人精品一区 | av永久免费 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 国产精华一区 | 成人区精品一区二区婷婷 | 日韩av大片免费看 | 一区二区小视频 | 国内精品久久久久 | 伊人免费观看视频 | 国产清纯白嫩初高生在线播放视频 | 99精品免费视频 | 成人免费日韩 | 日韩在线欧美 | 亚洲入口 | 99福利视频 | 精品9999| 日一区二区| 免费国产一区二区 | 日韩成人影院在线观看 | 欧美在线精品一区 | av黄色片 | 黄色综合 | 午夜精品一区二区三区在线视频 | 欧美成人精品一区二区男人看 | 成人精品一区 | 久久一区二区三区四区 | 亚洲一区二区三区免费在线观看 | 国产精品免费视频一区 | 成人精品| 在线成人免费观看 | 51ⅴ精品国产91久久久久久 | 亚洲高清av | 亚洲一区精品在线 | 不卡欧美 | 天堂综合网久久 | 91精品午夜窝窝看片 | 欧美日韩亚洲一区 | 69av在线视频 | 男女羞羞视频在线看 | 中文字幕日韩专区 |