Docker實(shí)踐--部署Nodejs應(yīng)用
這個(gè)例子的目標(biāo)是為了向大家展示如何在Docker的container里運(yùn)行Node.js程序。我會(huì)先創(chuàng)建一個(gè)簡(jiǎn)單的Node.js web
app,來(lái)構(gòu)建一個(gè)鏡像。然后基于這個(gè)Image運(yùn)行一個(gè)container。從而實(shí)現(xiàn)快速部署。
由于網(wǎng)絡(luò)的原因我的Node.js鏡像從國(guó)內(nèi)的鏡像庫(kù)下載,而不是Docker Hub。
先從國(guó)內(nèi)的鏡像網(wǎng)站上pull下一下nodejs鏡像。
docker pull hub.c.163.com/nce2/nodejs:0.12.2
下載完后查看我們的鏡像,找到他的名稱,等會(huì)我們會(huì)用到
創(chuàng)建Node.js 程序
創(chuàng)建package.json,并寫入相關(guān)信息和依賴
vi package.json
{ "name": "webtest", "version": "1.0.0", "description": "Node.js on Docker", "author": "lpxxn", "main": "server.js", "scripts": { "start": "node server.js" }, "dependencies": { "express": "^4.13.3" } }
創(chuàng)建server.js
vi server.js
寫一個(gè)最簡(jiǎn)單web 這個(gè)web基于express框架,返回Hello word.注意我們監(jiān)聽(tīng)的是8888端口
'use strict'; var express = require('express'); var PORT = 8888; var app = express(); app.get('/', function (req, res) { res.send('Hello world\n'); }); app.listen(PORT); console.log('Running on http://localhost:' + PORT);
創(chuàng)建Dockerfile
接下來(lái)主角上場(chǎng)了創(chuàng)建Dockerfile文件 這個(gè)文件是創(chuàng)建鏡像所必須的文件
vi Dockerfile
Docker會(huì)依照Dockerfile的內(nèi)容來(lái)構(gòu)建一個(gè)鏡像。我先給出完整的代碼,再一行一行的給出解釋
FROM hub.c.163.com/nce2/nodejs:0.12.2 # Create app directory RUN mkdir -p /home/Service WORKDIR /home/Service # Bundle app source COPY . /home/Service RUN npm install EXPOSE 8888 CMD [ "npm", "start" ]
我們來(lái)一句一句的解釋
FROM hub.c.163.com/nce2/nodejs:0.12.2
FROM是構(gòu)建鏡像的基礎(chǔ)源鏡像,hub.c.163.com/nce2/nodejs:0.12.2 這個(gè)是鏡像的名稱,也就是我們一開(kāi)始從國(guó)內(nèi)服務(wù)器上拉下來(lái)的那個(gè)Image。如果本地沒(méi)有Docker 會(huì)自己pull鏡像。
# Create app directory RUN mkdir -p /home/Service WORKDIR /home/Service
第一句RUN 用于在Image里創(chuàng)建一個(gè)文件夾,將來(lái)用于保存我們的代碼。
第二句WORKDIR是將我們創(chuàng)建的文件夾做為工作目錄。
# Bundle app source COPY . /home/Service RUN npm install
第一句的COPY是把本機(jī)當(dāng)前目錄下的所有文件拷貝到Image的/home/Service文件夾下。
第二句的RUN 使用npm 安裝我們的app據(jù)需要的所有依賴。
EXPOSE 8888
由于我們的web app監(jiān)聽(tīng)的是8888端口,我們把這個(gè)端口暴露給主機(jī),這樣我就能從外部訪問(wèn)web了。
CMD [ "npm", "start" ]
這個(gè)我相信我不用解釋你也能看出來(lái)他是做什么的。運(yùn)行npm start命令,這個(gè)命令會(huì)運(yùn)行 node service.js來(lái)
啟動(dòng)我們的web app。
構(gòu)建Image
在你Dockerfile文件所在的目錄下運(yùn)行下面的命令來(lái)構(gòu)建一個(gè)Image.
docker build -t mynodeapp .
別忘了最的的那個(gè)點(diǎn)
構(gòu)建完后查看一下我們的鏡像
運(yùn)行鏡像
docker run -d -p 8888:8888 ac5
-d 表明容器會(huì)在后臺(tái)運(yùn)行,-p 表示端口映射,把本機(jī)的8888商品映射到container的8888端口這樣外網(wǎng)就能通過(guò)本機(jī)的8888商品訪問(wèn)我們的web了。
后面的ac5是我們Image的ID因?yàn)榍?個(gè)就已經(jīng)能定位出這個(gè)Image所以我就沒(méi)有把后邊的再寫出來(lái)。
通過(guò)docker ps 查看我們剛運(yùn)行的Container的ID
打印log 7370就是我們的Container ID,和Image ID一樣,你也可以全寫出來(lái),我比較懶就寫前4位,已經(jīng)足夠標(biāo)識(shí)出這個(gè)Container了
docker logs 7350
如果你想到Container里可以執(zhí)行下面的命令,進(jìn)入到里邊后就可以像操作普通的linux 一樣。如果想退出可執(zhí)行exit命令。
測(cè)試
我們先通過(guò)curl 看能不能訪問(wèn)我們的web。
curl -i localhost:8888
也可以通過(guò)瀏覽器來(lái)看一下
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Docker部署項(xiàng)目完全使用指南(小結(jié))
本文主要介紹了Docker部署項(xiàng)目完全使用指南,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03-bash:?docker-compose未找到命令的解決方案
這篇文章主要介紹了-bash:?docker-compose:?未找到命令,需要的朋友可以參考下2023-12-12docker如何刪除<none>/dangling/懸空鏡像
這篇文章主要介紹了docker如何刪除<none>/dangling/懸空鏡像問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Docker部署Nginx設(shè)置環(huán)境變量的實(shí)現(xiàn)步驟
本文主要介紹了Docker部署Nginx設(shè)置環(huán)境變量的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07在docker容器中使用非root用戶執(zhí)行腳本操作
這篇文章主要介紹了在docker容器中使用非root用戶執(zhí)行腳本操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11docker鏡像導(dǎo)入的實(shí)現(xiàn)方法
如果服務(wù)器網(wǎng)絡(luò)不好或者pull不下來(lái)鏡像,只能進(jìn)行導(dǎo)入,本文主要介紹了docker鏡像導(dǎo)入的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09springboot整合docker部署實(shí)現(xiàn)兩種構(gòu)建Docker鏡像方式
這篇文章主要介紹了springboot整合docker部署實(shí)現(xiàn)兩種構(gòu)建Docker鏡像方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04