gpt4 book ai didi

javascript - 编写正确的 Dockerfile

转载 作者:行者123 更新时间:2023-12-02 20:56:19 29 4
gpt4 key购买 nike

我使用 Javascript(使用 D3.js)、JQuery、CSS 创建了一个应用程序,但没有使用 Node.js。这是典型的“index.html”浏览器运行界面。我一直在阅读 Docker 教程并试图弄清楚如何将我的应用程序设置为服务器,但我没有成功完成它,只能找到使用带有 Node.js 的应用程序的教程。对于我的一生,我无法弄清楚我做错了什么,但我想知道问题(或其中一个问题)是否存在于我的 Dockerfile 中。另外,我是否需要使用 Node.js 才能使所有这些工作?我的应用程序包含以下内容:
名为 的目录竞技场任务 .在这个目录中,我有我的 index.html、我的名为 arena.js 的主要 javascript 文件和我的 CSS 文件。我的其他必要文件(如图像等)位于同一目录中的另外两个文件夹中,称为 。数据 脚本 .
那么现在,我将如何编写我的 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 使用 - 它在其中存储已安装的包列表。
对于您的情况,我认为不需要节点。所以你可以创建简单的图像,然后你将需要简单的网络服务器——它可以通过 http 为你的网络请求提供 html/css/js 文件。我知道的最简单的是nginx。
同样在 Dockerfile 中,您需要将所有资源复制到您正在构建的镜像中。
这就是COPY package.json .正在做。但在你的情况下,你必须复制整个 app文件夹到一些 app docker 图像中的文件夹。 (假设 app 是一个包含所有文件的文件夹)
所以我们将有步骤

  • Dockerfile 应该看起来像这样:
  • FROM ubuntu

    RUN apt-get install -y nginx

    COPY app app

    COPY startup.sh /startup.sh

    COPY ./nginx-default /etc/nginx/sites-available/default
    不需要默认命令,因为您将在 docker run 期间启动其他内容。
  • nginx-default是 nginx 作为网络服务器的配置:

  • 它应该看起来像这样:
    server {
    listen 8080;
    server_name localhost;

    root /app
    }
    nginx 非常灵活——如果你需要它的东西,请用谷歌搜索它。
  • docker 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 镜像的陷阱,但不像终止。但您可以出于测试目的省略它。
  • 最后,构建图像( docker build -t {your-image-name} . )并启动图像,使用如下内容:docker run -p 8080:8080 {your-image-name} bash /startup.sh

  • 这应该工作:),虽然很可能你会遇到一些错误,因为我是从头开始写的。 (就像您可能需要 nginx 的其他东西,或者在 ubuntu 后期镜像中默认未安装 sudo)。

    关于javascript - 编写正确的 Dockerfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62785756/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com