Запустите два сервисных узла и Python внутри докера - PullRequest
1 голос
/ 06 июня 2019
FROM python:3.5 AS python-build
ADD . /test
WORKDIR /test
RUN pip install -r requirements.txt  &&\
    pip install oauth2client

FROM node:10-alpine AS node-build
WORKDIR /test
COPY --from=python-build ./test ./
WORKDIR /test/app/static
RUN npm cache verify && npm install && npm install sass -g &&\
    sass --no-source-map scss/layout/_header.scss:css/layout/_header.css &&\
    sass --no-source-map scss/layout/_footer.scss:css/layout/_footer.css &&\
    sass --no-source-map scss/layout/_side_menu.scss:css/layout/_side_menu.css &&\ 
    sass --no-source-map scss/layout/_error_component.scss:css/layout/_error_component.css &&\ 
    sass --no-source-map scss/components/_input_box.scss:css/components/_input_box.css &&\
    sass --no-source-map scss/components/_button.scss:css/components/_button.css &&\
    sass --no-source-map scss/components/_loading_mask.scss:css/components/_loading_mask.css &&\ 
    sass  --no-source-map scss/components/_template_card.scss:css/components/_template_card.css &&\
    sass --no-source-map scss/pages/_onboarding_app.scss:css/pages/_onboarding_app.css &&\
    sass  --no-source-map scss/pages/_choose.scss:css/pages/_choose.css &&\
    sass --no-source-map scss/pages/_adapt.scss:css/pages/_adapt.css &&\
    sass --no-source-map scss/pages/_express.scss:css/pages/_express.css &&\
    sass --no-source-map scss/pages/_experience.scss:css/pages/_experience.css &&\ 
    sass --no-source-map scss/pages/_features.scss:css/pages/_features.css &&\
    sass --no-source-map scss/pages/_request_demo.scss:css/pages/_request_demo.css &&\ 
    npm run build
WORKDIR /test/node-src
RUN npm install express


FROM python:3.5-slim
COPY --from=python-build /root/.cache /root/.cache
WORKDIR /test
COPY --from=node-build ./test ./
RUN apt-get update -yq \
    && apt-get install curl -yq \
    && curl -sL https://deb.nodesource.com/setup_10.x | bash \
    && pip install -r requirements.txt
WORKDIR /test/node-src
EXPOSE 3000
CMD ["node", "server.js"] #RUN NODE SERVICE INSIDE NODE/SRC
WORKDIR /test
EXPOSE 9595
CMD [ "python3", "./run.py" ] #RUN PYTHON SERVICE INSIDE /TEST

Я пытаюсь запустить два сервиса внутри одного узла контейнера и python, но работает только один. Я хочу запустить оба сервиса в одном контейнере на kubernetes.

РЕДАКТИРОВАТЬ: 1

FROM python:3.5 AS python-build
ADD . /test
WORKDIR /test
RUN pip install -r requirements.txt  &&\
    pip install oauth2client

FROM node:10-alpine AS node-build
WORKDIR /test
COPY --from=python-build ./test ./
WORKDIR /test/app/static
RUN npm cache verify && npm install && npm install sass -g &&\
    sass --no-source-map scss/layout/_header.scss:css/layout/_header.css &&\
    sass --no-source-map scss/layout/_footer.scss:css/layout/_footer.css &&\
    sass --no-source-map scss/layout/_side_menu.scss:css/layout/_side_menu.css &&\ 
    sass --no-source-map scss/layout/_error_component.scss:css/layout/_error_component.css &&\ 
    sass --no-source-map scss/components/_input_box.scss:css/components/_input_box.css &&\
    sass --no-source-map scss/components/_button.scss:css/components/_button.css &&\
    sass --no-source-map scss/components/_loading_mask.scss:css/components/_loading_mask.css &&\ 
    sass  --no-source-map scss/components/_template_card.scss:css/components/_template_card.css &&\
    sass --no-source-map scss/pages/_onboarding_app.scss:css/pages/_onboarding_app.css &&\
    sass  --no-source-map scss/pages/_choose.scss:css/pages/_choose.css &&\
    sass --no-source-map scss/pages/_adapt.scss:css/pages/_adapt.css &&\
    sass --no-source-map scss/pages/_express.scss:css/pages/_express.css &&\
    sass --no-source-map scss/pages/_experience.scss:css/pages/_experience.css &&\ 
    sass --no-source-map scss/pages/_features.scss:css/pages/_features.css &&\
    sass --no-source-map scss/pages/_request_demo.scss:css/pages/_request_demo.css &&\ 
    npm run build
WORKDIR /test/node-src
RUN npm install express


FROM python:3.5-slim
COPY --from=python-build /root/.cache /root/.cache
WORKDIR /test
COPY --from=node-build ./test ./
RUN apt-get update -yq \
    && apt-get install curl -yq \
    && curl -sL https://deb.nodesource.com/setup_10.x | bash \
    && pip install -r requirements.txt
WORKDIR /test/node-src
RUN npm install pm2 -g
EXPOSE 3000
CMD pm2 start server.js #RUN NODE SERVICE INSIDE NODE/SRC
WORKDIR /test
EXPOSE 9595
CMD [ "python3", "./run.py" ] #RUN PYTHON SERVICE INSIDE /TEST

Я также попробовал службу pm2 для узла.

1 Ответ

2 голосов
/ 07 июня 2019

то, что вы пытаетесь достичь, не рекомендуется.как правило, контейнер докера должен запускать один сервис.в результате в Docker нет встроенного способа заставить это работать, хотя все еще возможно, используя скрипт-обертку или такие инструменты, как supervisord , вы можете управлять несколькими службами внутри контейнера-

или что касается документов : (я выбрал опцию supervisord, так как для меня она выглядит более чистой и управляемой, чем сценарий оболочки)

ИспользоватьМенеджер процессов, как руководитель.Это подход средней тяжести, который требует, чтобы вы упаковали супервизор и его конфигурацию в образе (или основали свой образ на том, который включает супервизор) вместе с различными приложениями, которыми он управляет.Затем вы запускаете супервизор, который управляет вашими процессами за вас.Вот пример Dockerfile, использующий этот подход, который предполагает, что предварительно записанные файлы supervisord.conf, my_first_process и my_second_process находятся в том же каталоге, что и ваш Dockerfile.

FROM ubuntu:latest
RUN apt-get update && apt-get install -y supervisor
RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY my_first_process my_first_process
COPY my_second_process my_second_process
CMD ["/usr/bin/supervisord"]

https://docs.docker.com/config/containers/multi-service_container/

то, что вы в настоящее время используете в Dockerfile, называется многостраничная сборка , что на не то, что вы действительно хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...