@medoedoff

Запуск сервисов в docker container?

Всем привет, катаю свой образ nginx + php. Я только начал изучать docker. Создал свой docker образ с nginx + php, прописал все конфигурации. Запускаю docker образ командой
docker run -p 8080:80 -ti nginx-php-1 bash
запускаю там сервисы nginx и php, захожу через хоста на 127.0.0.1:8080, страница с phpinfo отрисовывается все работает.
Теперь, через dockerfile я хочу чтобы эти сервисы запускались автоматически и контейнер работал в фоновом режиме. Файл dockerfile
FROM nginx-php-1

MAINTAINER I am

CMD /etc/init.d/php7.2-fpm start && /etc/init.d/nginx start


делаю билд образа, пытаюсь запустить, но не запускается, помогите пожалуйста, как правильно запустить сервисы чтобы контейнер работал.
  • Вопрос задан
  • 4621 просмотр
Решения вопроса 1
ivankomolin
@ivankomolin
Так делать в корне неправильно.
Docker контейнер жив, пока жив запущенный в нем первый процесс.
Теоретически запустить можно несколько процессов, но только от первого. И когда первый процесс будет завершен, контейнер прекратит свою работу.

Для того чтобы запустить оба сервиса, можно использовать например supervisor.
Запустить его как первый процесс, а nginx и fpm уже запустит сам supervisor и заодно будет контролировать их работу.
Подробнее о запуске нескольких сервисов в одном контейнере написано тут:
https://docs.docker.com/config/containers/multi-se...

Но есть еще более правильный способ - каждый сервис запустить в отдельном контейнере.
Для этого копайте в сторону docker-compose
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
saboteur_kiev
@saboteur_kiev
software engineer
IMHO формат CMD не такой, как у RUN, добавить в него две команды проблематично.

Лучше добавьте в контейнер шелл скрипт, который будет выполнять запуск fpm и nginx, а в CMD пропишите:

CMD [ "/etc/init.d/myscript" , "start"]
Ответ написан
Комментировать
@q2digger
никого не трогаю, починяю примус
возьмите Dockerfile официального nginx-а и посмотрите как это делается правильно.
https://github.com/nginxinc/docker-nginx/blob/mast...

Вкратце. nginx там запускается как процесс, а не как сервис.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы