Docker發(fā)布node.js應(yīng)用

前提:

1、已經(jīng)安裝好docker環(huán)境

2、已經(jīng)安裝好node.js開(kāi)發(fā)環(huán)境

思路:

在docker hub上找到現(xiàn)成的node.js鏡像,拉回來(lái),基于這個(gè)鏡像發(fā)布node.js應(yīng)用!
(當(dāng)然也可以基于centos鏡像,安裝node.js,這里使用懶辦法)

一:找到合適的node.js基礎(chǔ)鏡像

到hub.docker.com搜索node

node.js的鏡像名稱為node,最新版本是: node:latest

也可以使用node:alpine這個(gè)版本(體積小,只包含基礎(chǔ)node.js運(yùn)行環(huán)境)

二:拉取node鏡像(這里拉去node:latest)

$ docker pull node:latest
image.png

拉取結(jié)束,查看一下鏡像

$ docker images | grep node
image.png

啟動(dòng)node鏡像,確認(rèn)可用

基于node鏡像啟動(dòng)一個(gè)名為node-test的容器

$ docker run -itd --name node-test node

--name node-test 指定容器名稱

查看容器

$ docker ps
image.png

鏡像可用!

三:開(kāi)發(fā)node.js應(yīng)用

用express開(kāi)發(fā)一個(gè)簡(jiǎn)單的web服務(wù):

# 創(chuàng)建工程目錄
mkdir  ~/Develop/docker/demo-nodejs-docker
# 一路回車(chē)新建一個(gè)node.js工程
npm init 
#安裝express庫(kù)
npm i express -S 

新建app.js,并編寫(xiě)一個(gè)簡(jiǎn)單的web服務(wù),代碼如下:

'use strict';

const express = require('express');

const PORT = 8888;

const app = express();

app.get('/', function (req, res) {

  res.send('Hello Docker image for node.js!\n');

});

app.listen(PORT);

console.log('Running on [http://localhost](http://localhost):' + PORT);

保存退出,測(cè)試一下

node app.js

curl [http://localhost:8888](http://localhost:8888)

四:編寫(xiě)Dockerfile

在demo-node-docker目錄下新建Dockerfile (文件名就這個(gè)),并在其中編寫(xiě):

# 指定基于node:latest 這個(gè)鏡像繼續(xù)制作當(dāng)前應(yīng)用鏡像
FROM node:latest

# Create app directory在鏡像中創(chuàng)建一個(gè)目錄
RUN mkdir -p /home/Service

# 設(shè)定工作目錄為 /home/Service
WORKDIR /home/Service

# 把宿主機(jī)當(dāng)前目錄下所有文件拷貝到鏡像中/home/Service目錄
COPY . /home/Service
# RUN npm install

# 暴露8888端口
EXPOSE 8888

# 啟動(dòng)容器時(shí)執(zhí)行應(yīng)用啟動(dòng)命令
CMD [ "node", "--trace-warnings", "app.js" ]

打包為Docker鏡像(docker build 默認(rèn)會(huì)找當(dāng)前目錄下的Dockerfile文件)

$ docker build -t demo-nodejs-docker .

基于鏡像啟動(dòng)容器(基于鏡像demo-nodejs-docker啟動(dòng)一個(gè)名為dnd的容器,并且將宿主機(jī)的7777端口映射到容器的8888端口)

$ docker run -itd -p 7777:8888 --name dnd demo-nodejs-docker

調(diào)用web服務(wù),通過(guò)7777端口訪問(wèn)容器中的web服務(wù):

$ curl [http://localhost:7777](http://localhost:8888)

返回 Hello Docker image for node.js!

進(jìn)入容器查看內(nèi)容

$ docker exec -it [容器ID] /bin/bash
image.png

看到?jīng)],容器里面的文件結(jié)構(gòu)和本地目錄一模樣!

image.png

注意事項(xiàng):

1、啟動(dòng)容器時(shí)需要指定端口映射,才能訪問(wèn)Docker容器中的Web服務(wù);
2、如果忘記指定端口映射,可按《docker容器添加對(duì)外映射端口》進(jìn)行修改
3、如果啟動(dòng)容器失敗,可以用docker ps - a 查看到所有容器,再用 docker logs 容器ID查看啟動(dòng)失敗的日志排查問(wèn)題
4、查看鏡像:docker images
5、刪除鏡像:docker rmi [鏡像ID]
6、查看容器ID: docker ps -a
7、刪除容器:docker rm [容器ID]

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容