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服务。
分析解答
你想要实现它不是一个推荐的设计。通常,docker容器应该运行单个服务。因此,在docker中没有 built-in 方式可以使其工作,尽管仍然可以使用包装脚本或supervisord等工具,您可以管理 container-内的多个服务
或者对于文档 :(我选择了supervisord选项,因为对我来说它看起来比包装脚本方式更干净和易于管理)
使用像supervisord这样的流程管理器。这是适度的 heavy-weight 方法要求你到package supervisord及其 您的image中的配置(或将您的image基于包含的image) supervisord),以及它管理的不同应用程序。然后 你启动supervisord,为你管理你的流程。这是 使用这种方法的示例Dockerfile,假定 pre-written 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中使用的是多级构建,这是你真正想要的不。