Dockerize你的Angular NodeJS应用程序

lvt*_*llo 3 nginx node.js angularjs 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" ]
Run Code Online (Sandbox Code Playgroud)

还有一个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
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

Cam*_*lva 5

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

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

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

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

project_root/
|----src/
|----docker/
|----|----angular/
|----|----|-----Dockerfile
|----|----|-----docker_build.sh
|----|----nodejs/
|----|----|-----Dockerfile
|----|----|-----docker_build.sh       
Run Code Online (Sandbox Code Playgroud)

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/
Run Code Online (Sandbox Code Playgroud)