如何使用Angular作为前端和Python作为后端来对全栈Web应用程序进行Docker化?

问题描述 投票:0回答:1

[如何在单一文件中将Angular作为前端和Python作为后端来对一个全栈Web应用进行docker化?我一直在分别对前端和后端进行docker化。如果可能的话,我如何将两者一起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化为一个文件(应用程序)。

python angular docker
1个回答
0
投票

这个问题似乎很容易解释,但是根据您的评论,我会提供一些指导原则。

我想将两个文件一起泊坞成一个文件(应用程序)仅在可能的情况下。

该容器被设计为每个容器运行一个进程,通常称为“经验法则,每个容器单个进程”。这并不意味着不可能,但是最好从第一天开始就遵循最佳做法。

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

dockerfile_best-practices

现在是您的第二个问题

我如何将两者一起泊坞成一个文件(应用程序),如果有可能?

最好将其放在单独的容器中进行泊坞,并使用docker-compose创建网络和服务到服务的通信。考虑使用docker-compose一个文件(就像您需要一个应用程序一样),这将使两个文件都在同一网络中。

例如

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"

您还可以添加依赖项来维持秩序,

depends_on

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

docker-compose up以依赖顺序启动服务。在里面以下示例,db和redis在网络之前启动。

所以我建议您探索docker-compose

通过执行此Web应用程序和后端应用程序可以使用容器名称相互调用,例如前端应用程序调用后端端点,例如http://backend-app:3000/api/v1/login

© www.soinside.com 2019 - 2024. All rights reserved.