如何将Angular作为前端,Python作为后端的全栈web应用程序dockerize?

如何将Angular作为前端,Python作为后端的全栈web应用程序dockerize?,python,angular,docker,Python,Angular,Docker,如何将Angular作为前端,Python作为后端的全栈web应用程序停靠在一个文件中?我已经分别对接了前端和后端。如果可能的话,我如何将两者合并到一个文件(应用程序)中 前端示例docker代码 FROM nginx:1.13.3-alpine ## Remove default nginx website RUN rm -rf /usr/share/nginx/html/* ## From 'builder' stage copy over the artifacts in dist fol

如何将Angular作为前端,Python作为后端的全栈web应用程序停靠在一个文件中?我已经分别对接了前端和后端。如果可能的话,我如何将两者合并到一个文件(应用程序)中

前端示例docker代码

FROM nginx:1.13.3-alpine
## Remove default nginx website
RUN rm -rf /usr/share/nginx/html/*
## From 'builder' stage copy over the artifacts in dist folder to default nginx public folder
COPY /dist /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]
FROM python:3
ADD main.py /
pip install all dependencies 
CMD [ "python", "./main.py" ]
后端示例docker代码

FROM nginx:1.13.3-alpine
## Remove default nginx website
RUN rm -rf /usr/share/nginx/html/*
## From 'builder' stage copy over the artifacts in dist folder to default nginx public folder
COPY /dist /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]
FROM python:3
ADD main.py /
pip install all dependencies 
CMD [ "python", "./main.py" ]

只有在可能的情况下,我才想将两者合并到一个文件(应用程序)中。

这个问题似乎很难解释,但根据您的评论,我将提供一些指导

我想将两者合并到一个文件(应用程序)中 只要有可能

容器设计为每个容器运行一个进程,通常称为“经验法则,每个容器运行一个进程”。这并不意味着不可能,但最好从第一天开始就采用最佳实践

每个容器应该只有一个问题。将应用程序解耦到多个容器中可以更轻松地水平扩展和重用容器。例如,web应用程序堆栈可能由三个单独的容器组成,每个容器都有自己独特的映像,以解耦的方式管理web应用程序、数据库和内存缓存。将每个容器限制为一个进程是一个很好的经验法则

现在来回答你的第二个问题

我如何将两者合并到一个文件中 (应用),如果可能的话

最好将其固定在单独的容器中,并使用创建网络和服务对服务通信。考虑到DOCKER编写一个文件(比如你需要一个应用程序),这将使你的两个组件在同一个网络中。 比如说

version: "3.7"
services:
  web-app:
    build:
      context: ./web-app
      dockerfile: Dockerfile-nginx
    ports:
      - "8080:80"
  backend-app:
    build:
      context: ./backend-app
      dockerfile: Dockerfile-python
    ports:
      - "3000:3000"

您还可以添加dependcey来维护订单

取决于

表示服务之间的依赖关系,服务依赖关系导致 以下行为:

docker compose up按依赖顺序启动服务。在 下面的示例中,db和redis是在web之前启动的

因此,我建议进行探索


通过这样做,web应用程序和后端应用程序可以使用容器名称相互调用,就像前端应用程序调用后端端点一样
http://backend-app:3000/api/v1/login

您也必须让Python为Angular build生成的静态资产提供服务。不要让它们成为一个,docker的经验法则是“每个contianer一个进程”,对于angular,您需要nginx,因为anualr只是静态页面,您需要服务器来为这些页面提供服务