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

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

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

  • 那么是否可以在一个存储库中写入2个dockerfile?
    主要思想是为nodejs创建1个dockerfile,该文件也正在运行bower安装,npm安装,...
    看起来像这样:
    # 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中正确的/ 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定义创建文件夹,并为每个docker上下文创建一个脚本docker_build.sh,以准备docker上下文(复制所需的所有 Artifact :lib,源代码等),最后进行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/
    

    07-24 09:39
    查看更多