美好的一天,
我知道这是不好的做法,我应该每个容器有一个应用程序,但是有没有办法让我在同一个容器中同时运行两个服务,我将如何为它编写 Dockerfile?
我当前用于 Flask(后端)应用程序的 Dockerfile:
FROM python:3.6.9-slim-buster
WORKDIR /app/flask_backend
ENV PYTHONPATH "${PYTHONPATH}:/app"
COPY ./flask_backend ./
COPY requirements.txt .
RUN pip install -r requirements.txt
CMD python3 app/webapp/app.py
Run Code Online (Sandbox Code Playgroud)
我的 React(前端)Dockerfile:
FROM node:12.18.0-alpine as build
WORKDIR /app/react_frontend
ENV PATH /app/node_modules/.bin:$PATH
ENV NODE_OPTIONS="--max-old-space-size=8192"
COPY ./react_frontend/package.json ./
COPY ./react_frontend/package-lock.json ./
RUN npm ci
RUN npm install react-scripts@3.4.1 -g
RUN npm install serve -g
COPY ./react_frontend ./
CMD ["serve", "-s", "build", "-l", "3000"]
Run Code Online (Sandbox Code Playgroud)
我尝试在同一个 Docker 容器中启动两个应用程序是为了合并两个 Dockerfile,但生成的容器没有来自第一个 Dockerfile 的数据,我不确定如何继续。
我合并的 Dockerfile:
FROM python:3.6.9-slim-buster
WORKDIR /app/flask_backend
ENV PYTHONPATH "${PYTHONPATH}:/app"
COPY ./flask_backend ./
COPY requirements.txt .
RUN pip install -r requirements.txt
CMD python3 app/webapp/app.py
FROM node:12.18.0-alpine as build
WORKDIR /app/react_frontend
ENV PATH /app/node_modules/.bin:$PATH
ENV NODE_OPTIONS="--max-old-space-size=8192"
COPY ./react_frontend/package.json ./
COPY ./react_frontend/package-lock.json ./
RUN npm ci
RUN npm install react-scripts@3.4.1 -g
RUN npm install serve -g
COPY ./react_frontend ./
CMD ["serve", "-s", "build", "-l", "3000"]
Run Code Online (Sandbox Code Playgroud)
我是Docker的初学者,因此我预见到使用这种方法会出现几个问题,例如两个应用程序之间的通信(Backend使用端口5000)。任何指导将不胜感激!
一个作出反应的应用程序通常不会有一个服务器本身(的发展,仅泊坞窗设置除外)。相反,您可以运行 Webpack 之类的工具将其编译为静态文件,然后您可以将其提供给浏览器,然后浏览器运行它们。
在您的主机系统上,您会运行类似
yarn build
Run Code Online (Sandbox Code Playgroud)
产生一个dist目录;然后将其复制到 Flask静态目录中。
如果您完全提前执行此操作,那么您可以在 Python 虚拟环境中运行您的应用程序,这将更容易开发和测试设置,并且您显示的 Dockerfile 不会更改。
如果您想完全在 Docker 中构建它(例如,为了利用更 Docker 原生的自动构建系统),多阶段构建在这里非常匹配。您可以使用第一阶段来构建前端应用程序,然后COPY在第二阶段将其构建到最终应用程序中。这看起来大致如下:
yarn build
Run Code Online (Sandbox Code Playgroud)
这种方法与使用绑定挂载覆盖 Docker 镜像内容的设置不兼容。非 Docker 主机 Node 和 Python 设置将是一个更容易的开发环境,并且对于这种特定设置,不太可能与 Docker 设置有很大不同。
| 归档时间: |
|
| 查看次数: |
2662 次 |
| 最近记录: |