Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 编写正确的Dockerfile_Javascript_Docker_Server_Dockerfile_Docker Toolbox - Fatal编程技术网

Javascript 编写正确的Dockerfile

Javascript 编写正确的Dockerfile,javascript,docker,server,dockerfile,docker-toolbox,Javascript,Docker,Server,Dockerfile,Docker Toolbox,我使用Javascript(带有D3.js)、JQuery、CSS创建了一个应用程序,但没有使用Node.js。这是典型的“index.html”浏览器运行界面。我一直在阅读Docker教程,并试图找出如何将我的应用程序设置为服务器,但我没有运气完成它,只能找到使用带有Node的应用程序的教程。就我的一生而言,我无法找出我做错了什么,但我想知道问题(或其中之一)是否在我的Dockerfile中。此外,我是否需要使用Node.js才能使所有这些都正常工作?我的应用程序由以下部分组成: 一个名为竞技

我使用Javascript(带有D3.js)、JQuery、CSS创建了一个应用程序,但没有使用Node.js。这是典型的“index.html”浏览器运行界面。我一直在阅读Docker教程,并试图找出如何将我的应用程序设置为服务器,但我没有运气完成它,只能找到使用带有Node的应用程序的教程。就我的一生而言,我无法找出我做错了什么,但我想知道问题(或其中之一)是否在我的Dockerfile中。此外,我是否需要使用Node.js才能使所有这些都正常工作?我的应用程序由以下部分组成:

一个名为竞技场任务的目录。在这个目录中,我有index.html、名为arena.js的主javascript文件和CSS文件。我的其他必要文件(如图像等)位于同一目录下名为datascripts的另外两个文件夹中

那么现在,我该如何编写Dockerfile,以便使用Docker构建它并将其发布到服务器?我尝试了以下Docker的示例Dockerfile:

FROM node:current-slim

WORKDIR /usr/src/app
COPY package.json .
RUN npm install

EXPOSE 8080
CMD [ "npm", "start" ]

COPY . .
但老实说,我不太确定如何进行更改以适应我的计划。我不知道是否需要package.json,因为如果需要,那么我不需要使用Node吗?我不在我的应用程序中使用任何节点模块或项目依赖项。我需要吗?我的问题不仅仅是一个不正确的Dockerfile吗

很抱歉,这个问题到处都是,但我对服务器端领域还真的很陌生。谢谢你的帮助!如果我能提供任何澄清,请告诉我。

让我们澄清几件事: node和npm是您需要它们的时候,就像您正在使用一些npm包一样。
package.json
-由npm使用-它在其中存储已安装的包列表

对于你的情况,我不认为需要节点。所以你可以创建一个简单的图像,然后你需要一个简单的web服务器,它可以通过http为你的web请求提供html/css/js文件。我知道最简单的是nginx

在Dockerfile中,您还需要将所有资源复制到正在构建的映像中。 这就是
COPY package.json.
所做的。但在您的情况下,您必须将整个
app
文件夹复制到docker图像中的某个
app
文件夹中。(假设应用程序是一个包含所有文件的文件夹)

所以我们要有步骤

  • Dockerfile应该如下所示:
  • 不需要使用默认命令,因为您将在docker运行期间启动其他命令

  • nginx default
    是nginx用作web服务器的配置:
  • 它应该是这样的:

    server {
      listen 8080;
      server_name localhost;
    
      root /app
    }
    
    nginx非常灵活-如果您需要从中获得一些东西,请使用googleit

  • docker image应始终执行某些操作,否则image将停止(某些阻塞过程)
  • 我知道的最简单的方法是创建startup.sh文件,第一步启动nginx,然后执行无限循环:

    exit_script() {
      trap - SIGINT SIGTERM # clear the trap
      sudo service nginx stop
      exit 1
    }
    
    sudo service nginx start
    
    while sleep 20; do
      CURRENT_TIME=$(date +"%T")
      echo "app is running: $CURRENT_TIME"
    done
    
    exit_script
    -是一个陷阱,有助于快速停止docker映像,但与terminate不同。但出于测试的目的,您可以忽略这一点

  • 最后,构建映像(
    docker build-t{your image name}.
    )并使用如下方式启动映像:
    docker run-p8080:8080{your image name}bash/startup.sh
  • 这应该行得通:),不过很可能你会遇到一些错误,因为我是从头开始写的。(就像你可能需要nginx的其他东西,或者默认情况下ubuntu最新图像中没有安装sudo一样)。

    让我们澄清一些事情: node和npm是您需要它们的时候,就像您正在使用一些npm包一样。
    package.json
    -由npm使用-它在其中存储已安装的包列表

    对于你的情况,我不认为需要节点。所以你可以创建一个简单的图像,然后你需要一个简单的web服务器,它可以通过http为你的web请求提供html/css/js文件。我知道最简单的是nginx

    在Dockerfile中,您还需要将所有资源复制到正在构建的映像中。 这就是
    COPY package.json.
    所做的。但在您的情况下,您必须将整个
    app
    文件夹复制到docker图像中的某个
    app
    文件夹中。(假设应用程序是一个包含所有文件的文件夹)

    所以我们要有步骤

  • Dockerfile应该如下所示:
  • 不需要使用默认命令,因为您将在docker运行期间启动其他命令

  • nginx default
    是nginx用作web服务器的配置:
  • 它应该是这样的:

    server {
      listen 8080;
      server_name localhost;
    
      root /app
    }
    
    nginx非常灵活-如果您需要从中获得一些东西,请使用googleit

  • docker image应始终执行某些操作,否则image将停止(某些阻塞过程)
  • 我知道的最简单的方法是创建startup.sh文件,第一步启动nginx,然后执行无限循环:

    exit_script() {
      trap - SIGINT SIGTERM # clear the trap
      sudo service nginx stop
      exit 1
    }
    
    sudo service nginx start
    
    while sleep 20; do
      CURRENT_TIME=$(date +"%T")
      echo "app is running: $CURRENT_TIME"
    done
    
    exit_script
    -是一个陷阱,有助于快速停止docker映像,但与terminate不同。但出于测试的目的,您可以忽略这一点

  • 最后,构建映像(
    docker build-t{your image name}.
    )并使用如下方式启动映像:
    docker run-p8080:8080{your image name}bash/startup.sh

  • 这应该行得通:),不过很可能你会遇到一些错误,因为我是从头开始写的。(就像你可能需要nginx的其他东西,或者默认情况下ubuntu最新映像中没有安装sudo)。

    你是部署一个节点服务器还是一个静态网站?如果你所有的资产都是静态的,不需要编译,我想你可以只使用
    apache
    nginx
    映像。@see Sharper yep,非常清楚。每个用户都将看到同一事物的变化(例如,来自同一组图像的随机图片),并能够以相同的方式与之交互。您是部署节点服务器还是仅部署静态网站?如果您的所有资产都是静态的,并且不需要