如何通过Web服务器公开Docker容器中的文件

时间:2019-07-15 15:26:35

标签: docker

我有一个网站,该网站的前端使用angular并有一个NodeJs后端。后端服务于有角度的文件并处理客户端调用。

与现在一样,它们都是软件包,并作为一个docker映像进行部署。意思是,如果我更改前端,则还需要构建后端以创建新映像。因此,将它们分开是有意义的。

但是,如果我为后端和前端创建映像,那么后端如何为前端容器中的文件提供服务?

这是正确的方法吗?

我想我想将前端包含在docker映像中,所以我可以轻松进行回滚之类的操作(例如,对于docker卷是不可能的)!

2 个答案:

答案 0 :(得分:1)

是的!容器化它们以拥有自己的容器是路要走!这使我们能够更快地部署/交付,并且使构建管道分离,从而使每个参与人员的步骤都更加清晰。

我不会为后端提供前端文件而烦恼。我通常使用网络服务器(例如nginx:alpine)创建前端映像,因为前端和后端可以分别部署到不同的机器或系统上。并且不要忘记使用multi-stage builds来最小化图像大小。

但是,如果您必须这样做,我想您可以使用docker-compose将它们放在一个网络中,然后将这些静态文件的请求从后端转发到前端Web服务器。 (只有一些技巧,这里必须有更好的方法来处理更高级的人:P)

答案 1 :(得分:1)

我有类似的东西,一个在一个docker容器中运行的Emberjs连接到在其自己的容器中运行的nodejs(更不用说在第三个容器上运行的DB)。一切都很好。

我建议您使用docker-compose创建容器,这会自动创建网络,以便两个容器都可以使用:。

相互通信。

我还对其进行了设置,以便将代码从计算机中的文件夹映射到容器中的文件夹。这使我可以轻松更改内容,使用Git等...

以下是我的docker-compose文件的一个片段:

version: "3"

services:
....
  ember_gui:
    image: danlynn/ember-cli
    container_name: ember_dev
    depends_on:
      - node_server
    volumes:
      - ./Ember:/myapp
    command: ember server
    ports:
      - "4200:4200"
      - "7020:7020"
      - "7357:7357"

在这里,我创建一个ember_gui服务,该服务基于来自docker hub的现有映像创建一个名为ember_dev的容器。然后,它告诉docker该容器依赖于另一个需要首先编译的容器,我没有在代码段中显示该容器,而是在同一docker-compose文件(node_server)中定义的。之后,将./Ember目录映射到容器中的/myapp文件夹,以便我可以共享代码。最后,我启动了ember服务器并打开了一些端口

相关问题