本文主要參考了docker入門nodejs+mongodb以及Nodejs 應(yīng)用簡單的訪問Mongodb 部署至Docker,將其運(yùn)用到Win10中。
覺得有幫助的話可以?Star 一下我的repo,或者來我的個(gè)站?Spot?玩 不定期更新內(nèi)容與應(yīng)用喔。。。
首先在本機(jī)要安裝mongodb具體教程可參考mongodb菜鳥教程,以及Docker for windows。
創(chuàng)建要發(fā)布的node應(yīng)用的鏡像
比如下圖1所示為要發(fā)布的node應(yīng)用, 在其根目錄下創(chuàng)建Dockfile配置文件。
別忘了創(chuàng)建鏡像前先檢查package.json的依賴是完整的,即可以在主機(jī)上正常地 npm install && npm start t運(yùn)行項(xiàng)目
????????????????????????????????????????????????????????????????????????????????????圖1 node 應(yīng)用根目錄
FROM node
RUN mkdir /app
WORKDIR /app
COPY . /app
RUN npm install
EXPOSE 8080
CMD [ "npm","start" ]
然后在根目錄下用命令行運(yùn)行以下命令,運(yùn)行過程中會(huì)自動(dòng)安裝最新的node鏡像,創(chuàng)建的鏡像名為spot
docker build -t spot .
檢查一下是否成功創(chuàng)建了image
docker images
>>REPOSITORY? ? ? ? ? ? ? ? ?TAG? ? ? ? ? ? ? ? ?IMAGE ID? ? ? ? ? ? CREATED? ? ? ? ? ? ?SIZE
spot? ? ? ? ? ? ? ? ? ? ? ?latest? ? ? ? ? ? ? 5d8bb30ba0fa? ? ? ? 4 hours ago? ? ? ? ?687MB? <---------- here
node? ? ? ? ? ? ? ? ? ? ? ?latest? ? ? ? ? ? ? 932354abf0cc? ? ? ? 6 days ago? ? ? ? ? 674MB
python? ? ? ? ? ? ? ? ? ? ?2.7-slim? ? ? ? ? ? b16fde09c92c? ? ? ? 3 months ago? ? ? ? 139MB
docker4w/nsenter-dockerd? ?latest? ? ? ? ? ? ? cae870735e91? ? ? ? 8 months ago? ? ? ? 187kB
配置Mongodb的Docker容器
首先下載mongo鏡像
docker pull mongo
然后將下載好的鏡像,放入容器中運(yùn)行,并將實(shí)體機(jī)端口與容器端口進(jìn)行關(guān)聯(lián),[[path in host]] 為實(shí)體機(jī)上mongo數(shù)據(jù)庫儲(chǔ)存路徑
docker run --name mongo -v [[path in host]]:/data/db? -d -p 27017:27017 mongo
檢查mongo容器是否正常運(yùn)行
docker ps
>>CONTAINER ID? ? ? ? IMAGE? ? ? ? ? ? ? ?COMMAND? ? ? ? ? ? ? ? ? CREATED? ? ? ? ? ? ?STATUS? ? ? ? ? ? ? PORTS? ? ? ? ? ? ? ? ? ? ? NAMES
f8ee9aaf6cd3? ? ? ? mongo? ? ? ? ? ? ? ?"docker-entrypoint.s…"? ?4 hours ago? ? ? ? ?Up 4 hours? ? ? ? ? 0.0.0.0:27017->27017/tcp? ?mongo
使用link的方式 運(yùn)行node容器
這里要注意運(yùn)行時(shí)的參數(shù),在箭頭處的參數(shù)要與node.js應(yīng)用中訪問mongodb的ip地址別名相同.
docker run -d -p 8888:8080 --name spot --link mongo:mongodb (<----[[這是在node中連接mongo的url的地址別名 如mongodb://mongodb<----:27017]]) spot
docker ps
>>CONTAINER ID? ? ? ? IMAGE? ? ? ? ? ? ? ?COMMAND? ? ? ? ? ? ? ? ? CREATED? ? ? ? ? ? ?STATUS? ? ? ? ? ? ? PORTS? ? ? ? ? ? ? ? ? ? ? NAMES
f0a114b84333? ? ? ? spot? ? ? ? ? ? ? ? "npm start"? ? ? ? ? ? ? 4 hours ago? ? ? ? ?Up 4 hours? ? ? ? ? 0.0.0.0:8888->8080/tcp? ? ?spot
f8ee9aaf6cd3? ? ? ? mongo? ? ? ? ? ? ? ?"docker-entrypoint.s…"? ?4 hours ago? ? ? ? ?Up 4 hours? ? ? ? ? 0.0.0.0:27017->27017/tcp? ?mongo
運(yùn)行后檢查容器是否正常工作,打開主機(jī)8888端口就可以訪問 容器的8080端口了.