Docker
Flera processer i en behållarinstans
Sök…
Anmärkningar
Vanligtvis bör varje behållare vara värd för en process. Om du behöver flera processer i en behållare (t.ex. en SSH-server för att logga in på din kända containerinstans) kan du få idén att skriva ditt eget skalskript som startar dessa processer. I så fall var du tvungen att ta hand om SIGNAL
hanteringen själv (t.ex. omdirigera en fångad SIGINT
till barnets processer i ditt manus). Det är egentligen inte det du vill ha. En enkel lösning är att använda supervisord
som behållarens rotprocess som tar hand om SIGNAL
hantering och dess barns processer livstid.
Men kom ihåg att detta inte är "dockningsvägen". För att uppnå detta exempel på docker-sättet loggar du in i docker host
(maskinen som containern körs på) och kör docker exec -it container_name /bin/bahs
. Detta kommando öppnar ett skal inuti behållaren som ssh skulle göra.
Dockerfile + supervord.conf
För att köra flera processer, t.ex. en Apache-webbserver tillsammans med en SSH-demon i samma behållare, kan du använda supervisord
.
Skapa din supervisord.conf
konfigurationsfil som:
[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D
[program:apache2]
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"
Dockerfile
en Dockerfile
som:
FROM ubuntu:16.04
RUN apt-get install -y openssh-server apache2 supervisor
RUN mkdir -p /var/lock/apache2 /var/run/apache2 /var/run/sshd /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
CMD ["/usr/bin/supervisord"]
Då kan du bygga din bild:
docker build -t supervisord-test .
Efteråt kan du köra det:
$ docker run -p 22 -p 80 -t -i supervisord-test
2016-07-26 13:15:21,101 CRIT Supervisor running as root (no user in config file)
2016-07-26 13:15:21,101 WARN Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing
2016-07-26 13:15:21,112 INFO supervisord started with pid 1
2016-07-26 13:15:21,113 INFO spawned: 'sshd' with pid 6
2016-07-26 13:15:21,115 INFO spawned: 'apache2' with pid 7
...