亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Node.js 指南(Docker化Node.js Web應(yīng)用程序)

李世贊 / 3535人閱讀

摘要:化應(yīng)用程序此示例的目的是向你展示如何將應(yīng)用程序放入容器中,該指南旨在用于開發(fā),而不用于生產(chǎn)部署,本指南還假設(shè)你有一個有效的安裝,并且基本了解應(yīng)用程序的結(jié)構(gòu)。

Docker化Node.js Web應(yīng)用程序

此示例的目的是向你展示如何將Node.js應(yīng)用程序放入Docker容器中,該指南旨在用于開發(fā),而不用于生產(chǎn)部署,本指南還假設(shè)你有一個有效的Docker安裝,并且基本了解Node.js應(yīng)用程序的結(jié)構(gòu)。

在本指南的第一部分中,我們將在Node.js中創(chuàng)建一個簡單的Web應(yīng)用程序,然后我們將為該應(yīng)用程序構(gòu)建一個Docker鏡像,最后我們將該鏡像作為容器運(yùn)行。

Docker允許你將具有所有依賴關(guān)系的應(yīng)用程序打包到一個稱為容器的標(biāo)準(zhǔn)化單元中,用于軟件開發(fā),容器是Linux操作系統(tǒng)分離出的基礎(chǔ)版本,鏡像是你加載到容器中的軟件。

創(chuàng)建Node.js應(yīng)用程序

首先,創(chuàng)建一個所有文件都將存在于其中的新目錄,在此目錄中,創(chuàng)建一個描述你的應(yīng)用及其依賴項(xiàng)的package.json文件:

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last ",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}

使用新的package.json文件,運(yùn)行npm install,如果你使用的是npm版本5或更高版本,則會生成一個package-lock.json文件,該文件將被復(fù)制到你的Docker鏡像中。

然后,創(chuàng)建一個使用Express.js框架定義Web應(yīng)用程序的server.js文件:

"use strict";

const express = require("express");

// Constants
const PORT = 8080;
const HOST = "0.0.0.0";

// App
const app = express();
app.get("/", (req, res) => {
  res.send("Hello world
");
});

app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);

在接下來的步驟中,我們將了解如何使用官方Docker鏡像在Docker容器中運(yùn)行此應(yīng)用程序,首先,你需要構(gòu)建應(yīng)用程序的Docker鏡像。

創(chuàng)建Dockerfile

創(chuàng)建一個名為Dockerfile的空文件:

touch Dockerfile

在你喜歡的文本編輯器中打開Dockerfile

我們需要做的第一件事是定義我們想要構(gòu)建的鏡像,在這里,我們將使用Docker Hub提供的最新LTS(長期支持)版本8 node

FROM node:8

接下來,我們創(chuàng)建一個目錄來保存鏡像中的應(yīng)用程序代碼,這將是你的應(yīng)用程序的工作目錄:

# Create app directory
WORKDIR /usr/src/app

這個鏡像已經(jīng)安裝了Node.js和NPM,所以接下來我們需要做的是使用npm二進(jìn)制文件安裝你的應(yīng)用程序依賴項(xiàng),請注意,如果你使用的是npm版本4或更早版本,則不會生成package-lock.json文件。

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm install --only=production

請注意,我們只復(fù)制package.json文件,而不是復(fù)制整個工作目錄,這使我們可以利用緩存的Docker層,bitJudo在這里有一個很好的解釋。

要將應(yīng)用程序的源代碼捆綁在Docker鏡像中,請使用COPY指令:

# Bundle app source
COPY . .

你的應(yīng)用程序綁定到端口8080,因此你將使用EXPOSE指令讓docker守護(hù)程序映射它:

EXPOSE 8080

最后但并非最不重要的是,使用定義你運(yùn)行時的CMD定義運(yùn)行你應(yīng)用程序的命令,這里我們將使用基本的npm start來運(yùn)行node server.js來啟動你的服務(wù)器:

CMD [ "npm", "start" ]

你的Dockerfile現(xiàn)在應(yīng)該如下所示:

FROM node:8

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm install --only=production

# Bundle app source
COPY . .

EXPOSE 8080
CMD [ "npm", "start" ]
.dockerignore文件

在與Dockerfile相同的目錄中創(chuàng)建一個.dockerignore文件,其中包含以下內(nèi)容:

node_modules
npm-debug.log

這樣可以防止將本地模塊和調(diào)試日志復(fù)制到Docker鏡像上,并可能覆蓋鏡像中安裝的模塊。

構(gòu)建你的鏡像

轉(zhuǎn)到具有Dockerfile的目錄,然后運(yùn)行以下命令來構(gòu)建Docker鏡像,使用-t標(biāo)志可以標(biāo)記鏡像,以便以后使用docker images命令更容易找到:

$ docker build -t /node-web-app .

你的鏡像現(xiàn)在將由Docker列出:

$ docker images

# Example
REPOSITORY                      TAG        ID              CREATED
node                            8          1934b0b038d1    5 days ago
/node-web-app    latest     d64d3505b0d2    1 minute ago
運(yùn)行鏡像

使用-d運(yùn)行鏡像以分離模式運(yùn)行容器,使容器在后臺運(yùn)行,-p標(biāo)志將公共端口重定向到容器內(nèi)的私有端口,運(yùn)行你之前構(gòu)建的鏡像:

$ docker run -p 49160:8080 -d /node-web-app

打印應(yīng)用程序的輸出:

# Get container ID
$ docker ps

# Print app output
$ docker logs 

# Example
Running on http://localhost:8080

如果你需要進(jìn)入容器內(nèi)部,你可以使用exec命令:

# Enter the container
$ docker exec -it  /bin/bash
測試

要測試你的應(yīng)用程序,請獲取Docker映射的應(yīng)用端口:

$ docker ps

# Example
ID            IMAGE                                COMMAND    ...   PORTS
ecce33b30ebf  /node-web-app:latest  npm start  ...   49160->8080

在上面的示例中,Docker將容器內(nèi)部的8080端口映射到計(jì)算機(jī)上的端口49160。

現(xiàn)在,你可以使用curl調(diào)用你的應(yīng)用程序(如果需要,請通過以下方式安裝:sudo apt-get install curl):

$ curl -i localhost:49160

HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 12
ETag: W/"c-M6tWOb/Y57lesdjQuHeB1P/qTV0"
Date: Mon, 13 Nov 2017 20:53:59 GMT
Connection: keep-alive

Hello world

我們希望本教程可以幫助你在Docker上啟動并運(yùn)行一個簡單的Node.js應(yīng)用程序。

你可以在以下位置找到有關(guān)Docker和Node.js的更多信息:

官方Node.js Docker鏡像

Node.js Docker最佳實(shí)踐指南

官方Docker文檔

Stack Overflow上的Docker標(biāo)記

Docker Subreddit

上一篇:輕松分析Node.js應(yīng)用程序 下一篇:遷移到安全的Buffer構(gòu)造函數(shù)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/99193.html

相關(guān)文章

  • Node.js 指南(目錄)

    Node.js 指南 Node.js?是基于Chrome的V8 JavaScript引擎構(gòu)建的JavaScript運(yùn)行時。 常規(guī) 關(guān)于Node.js 入門指南 輕松分析Node.js應(yīng)用程序 Docker化Node.js Web應(yīng)用程序 遷移到安全的Buffer構(gòu)造函數(shù) Node.js核心概念 阻塞與非阻塞概述 Node.js事件循環(huán)、定時器和process.nextTick() 不要阻塞事...

    未東興 評論0 收藏0
  • AI開發(fā)書籍分享

    摘要:編程書籍的整理和收集最近一直在學(xué)習(xí)深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后也找了很多的書和文章,隨著不斷的學(xué)習(xí),也整理了下自己的學(xué)習(xí)筆記準(zhǔn)備分享出來給大家后續(xù)的文章和總結(jié)會繼續(xù)分享,先分享一部分的 編程書籍的整理和收集 最近一直在學(xué)習(xí)deep learning深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后...

    huayeluoliuhen 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<