Dockerize您的Angular NodeJS应用程序

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

现在我们必须在Docker中运行这个。

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

那么是否可以在一个仓库中编写2个dockerfiles? 主要思想是有一个nodejs的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-web服务器,但是也会包含一个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个码头集装箱是我认为最好的选择,每个集装箱设计的单一责任是值得遵循的。

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

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

一种方法是为docker定义创建一个文件夹,并为每个docker_build.sh上下文创建一个docker_build.sh脚本,准备docker_build.sh上下文(复制所需的所有工件: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/ 

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