亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

詳解Windows下運用Docker部署Node.js開發環境

2024-09-01 13:50:18
字體:
來源:轉載
供稿:網友

開始

在windows下部署nodejs開發環境著實遍地坑,每遇到一個問題都要去google原因再試圖解決。而且如果你想把你寫好的應用交給別人跑跑看,他可能同樣需要折騰很久才能真正在他的環境下運行起來。被坑了好些時日最終還是放棄,轉戰Docker。

文章開頭先明確一下我們希望實現的效果:

1、依然在Windows下編輯源代碼,在Docker容器中運行代碼,最后在Windows的瀏覽器中看到運行結果,方便后續debug。

2、可以將我開發完成的程序和運行環境一起打包制作成Docker的image,移交image給小伙伴運行或者直接發布到服務器上。

安裝與啟動

Docker引擎核心是運行在Linux操作系統上的Linux容器。所以要在Windows上使用Docker容器,先要提供Linux運行環境。

去Docker官網下載msi安裝程序,若你的系統版本(例如64bit Windows 10 Pro, Enterprise and Education)支持Hyper-V虛擬技術,那么不需要使用額外的虛擬機(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虛擬技術,Docker項目組也提供了Docker ToolBox工具,可以很方便的在Windows環境下安裝Docker。

更詳細內容參考Docker官方文檔-toolbox。

本文中的執行系統為Win7,故使用Docker toolbox。

安裝過程會附帶安裝Oracle VM VirtualBox虛擬機,如下圖:

docker部署node,docker部署nodejs,docker,nodejs

Kitematic為Docker的GUI管理工具,打開Docker Terminal可以快速地啟動Docker。

docker部署node,docker部署nodejs,docker,nodejs

可以發現此時Docker給default machine分配了一個IP:192.168.99.100。我們可以直接在該終端下執行Docker命令。

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

  • Docker主機指的是Linux虛擬機,也就是說,此時Docker主機(即Linux虛擬機)的IP地址為192.168.99.100。
  • 與一般的ssh訪問虛擬機一樣,我們也可以通過該IP用ssh登錄到Docker主機去執行命令。(用戶名:docker;密碼:tcuser)
  • 如要用root權限去執行Linux命令(如mount),則需要打開VirtualBox。

docker部署node,docker部署nodejs,docker,nodejs

docker部署node,docker部署nodejs,docker,nodejs

搭建Image

新安裝好的Docker主機中沒有任何image(docker images 查看已有的image)。運行node應用需要搭建node環境鏡像,可以從Docker Hub上pull輕量級的Linux鏡像作為基礎鏡像(如CentOS),在上面手動安裝node;也可以直接pull一個已安裝了node的鏡像(docker pull 拉取鏡像)。從Docker Hub下載鏡像可能非常慢,可以借助國內的云服務商下載(如daocloud.io)。

現在假設我們pull了一個不包含node環境的CentOS鏡像。

$ docker run -it centos bash 

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

$ docker commit <CONTAINER_ID> <IMAGE>

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

在后續的開發中我們可以用docker run -it nodejs bash啟動容器。

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

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

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

 docker部署node,docker部署nodejs,docker,nodejs

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

docker部署node,docker部署nodejs,docker,nodejs

docker部署node,docker部署nodejs,docker,nodejs  

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

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下訪問運行后的執行端口查看結果。用以下命令啟動容器:

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

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

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

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

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

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

進入容器中對應的數據卷目錄,執行node app.js

 docker部署node,docker部署nodejs,docker,nodejs

Windows下通過瀏覽器訪問192.168.99.100:1337可看到結果

docker部署node,docker部署nodejs,docker,nodejs

至此,基本的node應用已經能在Docker下跑起來啦~

進一步的開發工作

1. npm install

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

npm install --no-bin-links

2. 關聯其他服務與容器互聯

許多node應用都會關聯啟用redis、mysql等服務。直接地,我們可以像在Windows下一樣打開同一個容器的多個終端分別運行服務或執行代碼。用以下命令進入一個正在運行的容器:

$ docker exec -it <CONTAINER> bash

更優雅地,我們將不同的服務運行在不同的容器上,然后使用--link name:alias容器互聯的方式將他們關聯起來。

3. 實時響應代碼變化

在開發過程中,如果每次修改代碼都需要結束node進程然后重啟必然會很麻煩??梢允褂胣odemon工具實現監控代碼變化并自動重啟進程的效果,這樣一來只需要在瀏覽器下刷新就可以看到新的運行效果。

安裝nodemon:

npm install -g nodemon

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

nodemon -L app.js

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

docker部署node,docker部署nodejs,docker,nodejs

docker部署node,docker部署nodejs,docker,nodejs

 嘗試更改app.js內容,保存后可以發現nodemon自動重啟了:

docker部署node,docker部署nodejs,docker,nodejs

刷新瀏覽器看到修改后的結果:

docker部署node,docker部署nodejs,docker,nodejs

關于nodemon,更詳細的使用參見GitHub-nodemon。

打包源碼和環境為Image

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

FROM nodejs# 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" ]

FROM指定基礎鏡像,接下來列出基于基礎鏡像需要做的操作命令,搭建起新的Image環境(包括復制源碼和執行npm install)可以參考node官方文檔。

.dockerignore:

node_modulesnpm-debug.log

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

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

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

可得到自行build的鏡像。該鏡像會自動添加到你的docker主機下,你可以直接啟動新鏡像的容器運行代碼(鏡像內就包含代碼,所以無需重復掛載到數據卷,不過就不能在Windows下修改了),也可以將鏡像分享給小伙伴。

總結

到此,應該已經能滿足基本的開發需求。

雖然在Windows下使用Docker因為多加的一層虛擬機會覺得有一點別扭,但是Docker本身用容器和鏡像將開發環境封裝隔離的特性依然帶來諸多方便。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲午夜精品视频| 精品国产一区久久久| 成人免费视频网址| 欧美精品在线播放| 亚洲tv在线观看| 午夜精品99久久免费| 国产精品你懂得| 国产成人午夜视频网址| 色777狠狠综合秋免鲁丝| 亚洲曰本av电影| 国产中文字幕亚洲| 国产精品美女无圣光视频| 欧美激情视频一区二区| 98精品国产自产在线观看| 法国裸体一区二区| 日韩在线观看免费全集电视剧网站| 黄色91在线观看| 久久6精品影院| 狠狠爱在线视频一区| 热久久免费视频精品| 岛国av在线不卡| 精品视频—区二区三区免费| 欧美电影免费观看大全| 欧美日韩一区二区在线| 亚洲福利影片在线| 尤物tv国产一区| 日韩国产一区三区| 国产视频丨精品|在线观看| 亚洲精品国产精品国产自| 亚洲高清一二三区| 国产精品久久久久久久美男| 在线观看成人黄色| 国产精品成人免费电影| 色综合老司机第九色激情| 国产精品高清在线观看| 欧美性猛交xxxx久久久| 亚洲四色影视在线观看| 久久国产色av| 欧美亚洲国产视频小说| 亚洲精品午夜精品| 久久久精品亚洲| 隔壁老王国产在线精品| 亚洲天堂成人在线视频| 亚洲精品网站在线播放gif| 亚洲欧美日本精品| 欧美中文字幕在线视频| 91成人在线观看国产| 中文字幕日本精品| 亚洲r级在线观看| 成人激情在线观看| 久久全球大尺度高清视频| 日韩成人中文字幕在线观看| 在线观看日韩欧美| 亚洲男人的天堂网站| 一区二区国产精品视频| 色狠狠av一区二区三区香蕉蜜桃| 日本免费在线精品| 91精品视频一区| 久久视频免费在线播放| 国产精品久久久久一区二区| 国精产品一区一区三区有限在线| 九九热这里只有在线精品视| 欧美一区二区.| 一个人看的www久久| 一区二区成人av| 成人av资源在线播放| 精品色蜜蜜精品视频在线观看| 国产精品视频最多的网站| 亚洲自拍偷拍色片视频| 精品亚洲男同gayvideo网站| 国产精品永久免费| 久久久噜噜噜久久中文字免| 日韩精品中文字幕在线播放| 亚洲在线一区二区| 麻豆一区二区在线观看| 国产精品热视频| 欧美视频免费在线| 日韩免费高清在线观看| 日韩h在线观看| 国内精品视频在线| 欧美在线性爱视频| 亚洲人成在线免费观看| 国产亚洲成精品久久| 人体精品一二三区| 俺去了亚洲欧美日韩| 欧美日韩一区二区三区| 亚洲自拍小视频| 国产日韩视频在线观看| 成人免费视频在线观看超级碰| 国产婷婷色综合av蜜臀av| 午夜精品福利视频| 成人综合网网址| 26uuu国产精品视频| 国产亚洲美女精品久久久| 蜜臀久久99精品久久久无需会员| 久热精品视频在线观看一区| 秋霞成人午夜鲁丝一区二区三区| 日韩女优人人人人射在线视频| 一区二区三区 在线观看视| 亚洲第一在线视频| 欧美一性一乱一交一视频| 久久久久国产视频| 日韩免费在线看| 精品国产乱码久久久久久婷婷| 热99精品只有里视频精品| 日韩欧美国产成人| 日韩成人网免费视频| 久久综合国产精品台湾中文娱乐网| 久久久久五月天| 九九九热精品免费视频观看网站| 性金发美女69hd大尺寸| 国产精品久久久久久久久久久久久久| 欧美精品一区在线播放| 国产精品久久久久久久久久久久久久| 亚洲欧美色婷婷| 日韩av观看网址| 黄色精品一区二区| 亚洲精品国产综合久久| 97免费视频在线播放| 9.1国产丝袜在线观看| 成人午夜高潮视频| 青青青国产精品一区二区| 日韩国产精品亚洲а∨天堂免| 亚洲欧美另类国产| 精品久久久久久国产| 2021久久精品国产99国产精品| www.久久撸.com| 欧美疯狂xxxx大交乱88av| 日韩高清av在线| 在线亚洲男人天堂| 日韩精品黄色网| 亚洲图片在线综合| 97精品国产97久久久久久春色| 亚洲精品网站在线播放gif| 久久精视频免费在线久久完整在线看| 亚洲摸下面视频| 国产欧美一区二区三区四区| 91精品成人久久| 最新69国产成人精品视频免费| 亚洲性xxxx| 成人乱人伦精品视频在线观看| 日本高清+成人网在线观看| 91精品国产777在线观看| 伊人伊成久久人综合网站| 57pao成人国产永久免费| 亚洲图中文字幕| 欧美精品久久一区二区| 一区二区福利视频| 久久久久久久国产精品视频| 亚洲嫩模很污视频| 久久久国产视频91| www.美女亚洲精品| 国产精品久久久久久av福利软件| 亚洲最大在线视频| 欧美日韩国产123| 亚洲国产成人精品电影| 国产va免费精品高清在线| 国产精品久久久久久久久久久新郎| 欧美精品亚州精品| 日韩av影片在线观看| 国产伊人精品在线| 97视频在线观看网址| 欧美自拍大量在线观看| 庆余年2免费日韩剧观看大牛|