GNU/Linux >> Znalost Linux >  >> Linux

Automaticky spouštět služby v kontejneru Docker

EDIT:Od původního zveřejnění této odpovědi jsem se o Dockeru hodně naučil. "Automatické spouštění služeb v kontejnerech Docker" není pro Docker dobrý vzor použití. Místo toho použijte něco jako fleet, Kubernetes nebo dokonce Monit/SystemD/Upstart/Init.d/Cron k automatickému spouštění služeb, které se spouštějí uvnitř kontejnerů Docker.

PŮVODNÍ ODPOVĚĎ:Pokud kontejner spouštíte příkazem /bin/bash , pak to můžete provést způsobem uvedeným zde:https://stackoverflow.com/a/19872810/2971199

Pokud tedy kontejner začínáte s docker run -i -t IMAGE /bin/bash a pokud chcete automaticky spouštět apache2 při spuštění kontejneru, upravte /etc/bash.bashrc do kontejneru a přidejte /usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd.conf (nebo jakýkoli váš příkaz start apache2) na nový řádek na konec souboru.

Uložte změny obrázku a restartujte jej pomocí docker run -i -t IMAGE /bin/bash a po připojení zjistíte, že běží apache2.


Myslím, že nemůžeš. Co můžete udělat, je vytvořit obrázek pomocí Dockerfile a definovat v něm CMD, který bude spuštěn při spuštění kontejneru. Základy najdete v dokumentaci k builderu (https://docs.docker.com/reference/builder/) a v tématu Automatické spouštění služby v kontejneru dockeru, kde najdete informace, jak službu udržet v chodu.

Nemusíte to automatizovat pomocí Dockerfile. Obraz můžete také vytvořit pomocí ručního odevzdání a spustit jej z příkazového řádku. Poté zadáte příkaz, který by měl spustit (což je přesně to, co Dockerfile CMD skutečně dělá). Tímto způsobem můžete také přepsat CMD Dockerfiles:bude spuštěn pouze nejnovější CMD, což je příkaz příkazového řádku, pokud kontejner spustíte pomocí jednoho. Základní docker run -i -t base /bin/bash příkladem je příkaz z dokumentace. Pokud bude váš příkaz příliš dlouhý, můžete samozřejmě vytvořit pohodlný skript.


Možnost, kterou byste mohli použít, by bylo použití správce procesů, jako je Supervisord, ke spuštění více procesů. Někdo to dokázal pomocí sshd a mongodb:https://github.com/justone/docker-mongodb


Linux
  1. Vysvětlení výstupu příkazu „docker stats“.

  2. příkaz docker nebyl nalezen

  3. Předat hostitelský port do kontejneru dockeru

  1. Prozkoumání systému souborů kontejneru Docker

  2. Docker v Dockeru nemůže připojit svazek

  3. Přesměrování výstupu příkazu v dockeru

  1. Úvod do Dockeru

  2. Jak spustit příkaz na spuštěném kontejneru Docker

  3. Jak opustit kontejner Docker