溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境

發(fā)布時間:2022-03-31 16:45:35 來源:億速云 閱讀:451 作者:iii 欄目:編程語言

這篇文章主要講解了“Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境”吧!

希望實現(xiàn)的效果:

1、依然在windows下編輯源代碼,在docker容器中運行代碼,最后在windows的瀏覽器中看到運行結(jié)果,方便后續(xù)debug。

2、可以將我開發(fā)完成的程序和運行環(huán)境一起打包制作成docker的image,移交image給小伙伴運行或者直接發(fā)布到服務(wù)器上。

安裝與啟動

docker引擎核心是運行在linux操作系統(tǒng)上的linux容器。所以要在windows上使用docker容器,先要提供linux運行環(huán)境。

去docker官網(wǎng)下載msi安裝程序,若你的系統(tǒng)版本(例如64bit windows 10 pro, enterprise and education)支持hyper-v虛擬技術(shù),那么不需要使用額外的虛擬機(virtualbox),安裝程序會自動為你安裝完成docker(docker for windows)。

the hyper-v package must be enabled for docker for windows to work. the docker for windows installer will enable it for you, if needed. (this requires a reboot). if your system does not satisfy these requirements, you can install docker toolbox, which uses oracle virtual box instead of hyper-v.

若不能使用hyper-v虛擬技術(shù),docker項目組也提供了docker toolbox工具,可以很方便的在windows環(huán)境下安裝docker。

更詳細(xì)內(nèi)容參考docker官方文檔-toolbox。

本文中的執(zhí)行系統(tǒng)為win7,故使用docker toolbox。

安裝過程會附帶安裝oracle vm virtualbox虛擬機,如下圖:

Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境

kitematic為docker的gui管理工具,打開docker terminal可以快速地啟動docker。

Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境

可以發(fā)現(xiàn)此時docker給default machine分配了一個ip:192.168.99.100。我們可以直接在該終端下執(zhí)行docker命令。

由于在windows中運行docker多加了一層虛擬機,有幾個概念需要了解:

  • docker主機指的是linux虛擬機,也就是說,此時docker主機(即linux虛擬機)的ip地址為192.168.99.100。

  • 與一般的ssh訪問虛擬機一樣,我們也可以通過該ip用ssh登錄到docker主機去執(zhí)行命令。(用戶名:docker;密碼:tcuser)

  • 如要用root權(quán)限去執(zhí)行l(wèi)inux命令(如mount),則需要打開virtualbox。

Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境

Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境

搭建image

新安裝好的docker主機中沒有任何image(docker images 查看已有的image)。運行node應(yīng)用需要搭建node環(huán)境鏡像,可以從docker hub上pull輕量級的linux鏡像作為基礎(chǔ)鏡像(如centos),在上面手動安裝node;也可以直接pull一個已安裝了node的鏡像(docker pull 拉取鏡像)。從docker hub下載鏡像可能非常慢,可以借助國內(nèi)的云服務(wù)商下載(如)。

現(xiàn)在假設(shè)我們pull了一個不包含node環(huán)境的centos鏡像。

$ docker run -it centos bash

啟動一個容器,并進(jìn)入容器的bash進(jìn)行交互式操作。采用與centos下一樣的方式安裝node。安裝完成后exit退出容器。請放心,如果不使用docker rm或者docker run時不增加--rm參數(shù),即使退出容器,容器本身及其中的修改不會消失??梢杂胐ocker ps -a查看所有容器,docker ps查看正在運行的容器。

$ docker commit <container_id> <image>

提交之前修改的容器到新的image。該鏡像就是已經(jīng)安裝了node環(huán)境的鏡像(命名為nodejs)。

在后續(xù)的開發(fā)中我們可以用docker run -it nodejs bash啟動容器。

在windows和虛擬機之間共享文件

我們現(xiàn)在需要在docker容器中運行源代碼,而docker容器是在docker主機中的,所以首先,我們需要先保證docker主機(即linux虛擬機)能訪問到windows中的源代碼文件。

打開virtualbox,點擊“設(shè)置”->“共享文件夾”,指定路徑和名稱后勾選“自動掛載”和“固定分配”?!白詣訏燧d”可以使得虛擬機下次啟動時自動掛載文件夾,否則每次啟動都需要重新手動掛載。

 Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境

如果順利,重啟虛擬機輸入mount命令,可以看到共享文件夾掛載到了哪里,進(jìn)入該目錄就能看到與windows下同步的文件。

Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境

Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境  

如果自動掛載遇到問題,取消這個選項,使用以下命令手動掛載:

mount -t vboxsf docker_share <mount_point>

在docker容器中運行node代碼

首先在windows的共享文件夾下編輯測試代碼app.js:

var http = require('http');
  http.createserver(function (req, res) {
   res.writehead(200, {'content-type': 'text/plain'});
   res.end('hello world\n');
  }).listen(1337); 
console.log('server running at http://0.0.0.0:1337/');

可以在docker主機中看到該文件。

用nodejs鏡像啟動一個容器,我們希望這個容器能訪問docker主機中的文件作為源代碼,還希望能在windows下訪問運行后的執(zhí)行端口查看結(jié)果。用以下命令啟動容器:

$ docker run -v /docker_share:/app -p 1337:1337 -it nodejs bash

-v 主機目錄:容器數(shù)據(jù)卷目錄 使得主機目錄被掛載到容器中,可被容器訪問。

-p 主機端口:容器端口使得容器端口被映射到主機上,可以被容器外部訪問到。

注: 重復(fù)多個-p命令可以映射多個端口。

(docker 0.11版本以上可以使用--net=host參數(shù)使得容器中的所有端口映射在docker主機上。故也可使用:)

$ docker run -v /docker_share:/app --net=host -it nodejs bash

進(jìn)入容器中對應(yīng)的數(shù)據(jù)卷目錄,執(zhí)行node app.js

 Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境

windows下通過瀏覽器訪問192.168.99.100:1337可看到結(jié)果

Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境 

至此,基本的node應(yīng)用已經(jīng)能在docker下跑起來啦~

進(jìn)一步的開發(fā)工作

1. npm install

一般在node工程中都會存在node_modules依賴需要用npm install安裝。在docker下,期望運行應(yīng)用的容器中,同樣可以執(zhí)行該命令。但注意增加--no-bin-links指令來避免創(chuàng)建軟連接。

npm install --no-bin-links

2. 關(guān)聯(lián)其他服務(wù)與容器互聯(lián)

許多node應(yīng)用都會關(guān)聯(lián)啟用redis、mysql等服務(wù)。直接地,我們可以像在windows下一樣打開同一個容器的多個終端分別運行服務(wù)或執(zhí)行代碼。用以下命令進(jìn)入一個正在運行的容器:

$ docker exec -it <container> bash

更優(yōu)雅地,我們將不同的服務(wù)運行在不同的容器上,然后使用--link name:alias容器互聯(lián)的方式將他們關(guān)聯(lián)起來。

3. 實時響應(yīng)代碼變化

在開發(fā)過程中,如果每次修改代碼都需要結(jié)束node進(jìn)程然后重啟必然會很麻煩。可以使用工具實現(xiàn)監(jiān)控代碼變化并自動重啟進(jìn)程的效果,這樣一來只需要在瀏覽器下刷新就可以看到新的運行效果。

安裝nodemon:

npm install -g nodemon

依然以app.js為例,在容器中運行app.js時使用命令:

nodemon -l app.js

注:如果不在容器下運行,使用nodemon app.js即可,而在容器中,需要使用-l或--legacy-watch參數(shù)打開chokidar輪詢,才能監(jiān)聽到掛載目錄中文件的改變。

Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境

Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境

 嘗試更改app.js內(nèi)容,保存后可以發(fā)現(xiàn)nodemon自動重啟了:

Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境 

刷新瀏覽器看到修改后的結(jié)果:

Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境 

關(guān)于nodemon,更詳細(xì)的使用參見github-nodemon。

打包源碼和環(huán)境為image

在工程目錄下編輯dockerfile和.dockerignore文件。dockerfile:

from nodejs

# create app directory
run mkdir -p /usr/src/app
workdir /usr/src/app

# install app dependencies
copy package.json /usr/src/app/
run npm install

# bundle app source
copy . /usr/src/app

expose 8080
cmd [ "npm", "start" ]

from指定基礎(chǔ)鏡像,接下來列出基于基礎(chǔ)鏡像需要做的操作命令,搭建起新的image環(huán)境(包括復(fù)制源碼和執(zhí)行npm install)可以參考。

.dockerignore:

node_modules
npm-debug.log

在build新鏡像時忽略其中的文件。

在docker主機中的工程目錄下(dockerfile所在目錄)使用命令:

$ docker build -t <imagename> . //注意末尾的點不可省去

可得到自行build的鏡像。該鏡像會自動添加到你的docker主機下,你可以直接啟動新鏡像的容器運行代碼(鏡像內(nèi)就包含代碼,所以無需重復(fù)掛載到數(shù)據(jù)卷,不過就不能在windows下修改了)。

感謝各位的閱讀,以上就是“Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Windows下怎么運用Docker部署Node.js開發(fā)環(huán)境這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI