Nodejs on Docker
nodejs-docker-webapp(zh-CN 翻譯文檔)
copyright ? 2016 xgqfrms
dockerizing a Node.js web app
Dockerizing a Node.js web app
這個例子的目的是告訴你如何把一個Node.js應用程序放入到Docker容器。 該指南旨在用于開發,而不是用于生產部署。 該指南還假定你有安裝Docker的經驗,且對Node.js應用程序是如何構建的,有一個基本的了解.
在本指南的第一部分,我們將用Node.js創建一個簡單的Web應用程序, 然后我們將為該應用程序建立一個Docker映像, 最后我們將運行這個鏡像作為一個容器。
Docker允許你把一個應用和它的所有依賴打包成一個標準化單元,稱為一個容器(container),用于軟件開發. 每一個容器(container)都是一個精簡到基本版本的Linux操作系統。 鏡像(image)是你加載到一個容器中的軟件。
創建 Node.js 應用程序
首先,創建一個新目錄,所有文件將會位于其中。 在此目錄中,創建一個package.json文件,描述你的應用程序及其依賴:
{ ??"name":?"docker_web_app", ??"version":?"1.0.0", ??"description":?"Node.js?on?Docker", ??"author":?"First?Last?
然后,創建一個server.js文件,用來定義了一個使用Express.js框架的Web應用程序:
'use?strict'; const?express?=?require('express'); //?Constants const?PORT?=?8080; //?App const?app?=?express(); app.get('/',?function?(req,?res)?{ ??res.send('Hello?world\n'); }); app.listen(PORT); console.log('Running?on?http://localhost:'?+?PORT);
在接下來的步驟中,我們將看看你如何在一個Docker容器內運行這個應用程序,使用官方Docker鏡像. 首先,你需要為你的應用程序構建一個Docker鏡像。
創建一個 Dockerfile
創建一個名為Dockerfile一個空文件:
$?touch?Dockerfile
在你喜歡的文本編輯器中打開Dockerfile
我們需要做的第一件事就是定義要從什么鏡像構建我們想要構建的。 這里我們將使用最新的LTS(長期支持)版argon?,可用于Docker Hub的node:
FROM?node:argon
接下來,我們創建一個目錄用于在鏡像中保存應用程序的代碼, 這將是你的應用程序的工作目錄:
#?Create?app?directoryRUN?mkdir?-p?/usr/src/appWORKDIR?/usr/src/app
此鏡像自帶的Node.js和NPM已經安裝了,所以接下來我們需要做的就是使用npmbinary,來安裝你的應用程序的依賴:
#?Install?app?dependenciesCOPY?package.json?/usr/src/app/RUN?npm?install
要打包在Docker鏡像內的你的應用程序的源代碼,使用COPY指令:
#?Bundle?app?sourceCOPY?.?/usr/src/app
你的應用程序綁定到8080端口,所以你將使用EXPOSE指令把它映射,由docker守護程序(daemon):
EXPOSE?8080
最后但同樣重要,用CMD定義運行你的應用程序的命令,它定義了你的運行時。 在這里,我們將使用基礎的npm start這將運行node server.js來啟動你的服務器:
CMD?[?"npm",?"start"?]
PS:(npm start === node server.js)
"scripts":?{ ????"start":?"node?server.js" ??}
現在你的Dockerfile應該看起來像這樣的:
FROM?node:argon#?Create?app?directoryRUN?mkdir?-p?/usr/src/appWORKDIR?/usr/src/app#?Install?app?dependenciesCOPY?package.json?/usr/src/app/RUN?npm?install#?Bundle?app?sourceCOPY?.?/usr/src/appEXPOSE?8080CMD?[?"npm",?"start"?]
構建你的鏡像
進入到Dockerfile所在的目錄并運行以下命令來構建Docker鏡像。?-t標志可以讓你標記你的鏡像,以便更容易發現以后使用docker images命令:
$?docker?build?-t?
你的鏡像現在將會被Docker列出:
$?docker?images#?ExampleREPOSITORY??????????????????????TAG????????ID??????????????CREATEDnode????????????????????????????argon??????539c0211cd76????3?weeks?ago
運行鏡像
運行你的鏡像,帶有-d容器將運行在獨立模式下,讓容器在后臺運行。-p標志,將一個公共端口重定向到容器內的一個私有端口。運行你之前構建的鏡像:
$?docker?run?-p?49160:8080?-d?
打印你的應用程序的輸出:
#?Get?container?ID$?docker?ps#?Print?app?output$?docker?logs?
如果你需要進容器內可以使用exec命令:
#?Enter?the?container$?docker?exec?-it?
測試
要測試你的應用程序,獲取的你的應用程序的Docker映射端口:
$?docker?ps#?ExampleID????????????IMAGE????????????????????????????????COMMAND????...???PORTS ecce33b30ebf??
在上面的例子中,Docker將容器的內部的8080端口映射到你的機器上的49160端口。
現在你可以使用curl調用你的應用程序(如果需要的話,安裝命令:sudo apt-get install curl):
$?curl?-i?localhost:49160HTTP/1.1?200?OK X-Powered-By:?Express Content-Type:?text/html;?charset=utf-8Content-Length:?12Date:?Sun,?02?Jun?2013?03:53:22?GMT Connection:?keep-alive Hello?world
我們希望該教程幫助了你在Docker上啟動和運行一個簡單的Node.js應用程序。
你可以找到有關的Docker和Node.js on Docker更多信息,在以下的地方:
官方 Node.js Docker 鏡像
Node.js Docker 最佳實踐指南
官方 Docker 文檔
Docker Tag on StackOverflow
Docker Subreddit
Docker for Windows
Docker Hub
cloud docker
本文轉載自異步社區
原文鏈接:https://www.epubit.com/articleDetails?id=NC7E3EF91C0300001D496165012501297
Web應用防火墻 WAF
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。