Dockerize你的Angular NodeJS应用程序

时间:2016-01-14 14:28:16

标签: angularjs node.js nginx docker

我们有一个前端应用程序。 它是用Angular(html + css + javascript)编写的,需要由webserver(nginx)托管。 Angular正在与将与后端通信的NodeJs服务器进行通信。

现在我们必须在Docker中运行它。

  • 我们想要使用2个Docker容器:一个使用nodejs,另一个使用nginx并让它们一起工作

那么可以在一个存储库中编写2个dockerfiles吗? 主要的想法是为nodejs提供1个dockerfile,它还运行bower install,npm install,... 这将是这样的:

# Create app directory
RUN mkdir -p /usr/src/www
WORKDIR /usr/src/www

RUN npm install -g bower
RUN npm install -g gulp

# Install app dependencies
COPY . /usr/src/www/
RUN bower install
RUN npm install
RUN gulp build

EXPOSE port
CMD [ "node", "server.js" ]

还有一个dockerfile,我们在其中运行一个nginx-webserver,但也包含一个nginx.conf,所以它可以指向我们node.js-container中的right / dist文件夹 nginx的dockerfile如下所示:

# Set nginx base image
FROM nginx

# Copy custom configuration file from the current directory
COPY nginx.conf /etc/nginx/nginx.conf

nginx.conf

的一个例子
location ~* /dist {
            proxy_pass http://nodejs:port;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;

2 个答案:

答案 0 :(得分:5)

在我看来,使用2个泊坞容器是最佳选择,每个容器设计的单一责任值得遵循。

每个项目必须创建多个容器非常常见:

  • 数据库
  • 后端服务器
  • 前端服务器

一种方法是为docker定义和每个docker上下文创建一个文件夹,创建一个脚本docker_build.sh,用于准备docker上下文(复制所需的所有工件:libs,源代码等),最后创建docker建立。

project_root/
|----src/
|----docker/
|----|----angular/
|----|----|-----Dockerfile
|----|----|-----docker_build.sh
|----|----nodejs/
|----|----|-----Dockerfile
|----|----|-----docker_build.sh       

docker_build.sh的一个例子

#!/bin/bash

# create temp directory for building
mkdir DockerBuildTempPath/

# copy files to temp directory
cp -arv Dockerfile DockerBuildTempPath/
cp -arv ../../src/ DockerBuildTempPath/
# ... etc

cd DockerBuildTempPath

#build image
docker build -t myapp .

# remove temp directory
cd ..
rm -r ./DockerBuildTempPath/

答案 1 :(得分:0)

尝试使用jwilder / nginx-proxy(https://github.com/jwilder/nginx-proxy)。我目前正在使用它来托管一个主Docker Nginx,代理我所有其他的docker服务。