在docker中創建自己的node-demo

創建一個node.js App

首先創建 一個文件夾,名字為docker-node-demo

編寫package.json

進入docker-node-demo文件夾,創建package.json文件
這裡使用基於express4.16的node app

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last ",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}

運行npm install,此時會出現package-lock.json文件和node_modules文件夾

編寫 server.js

創建server.js文件,

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello world\n');
});

app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);

這裡主要是設置端口,路由等等,以及運行的時候會在控制台輸出一句
Running on http://${HOST}:${PORT}

編寫Dockerfile文件

創建一個名為Dockerfile的文件,文件沒有後綴
根據官方,是使用版本為carben的node

FROM node:carbon

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm install --only=production

# Bundle app source
COPY . .

EXPOSE 8080
CMD [ "npm", "start" ]

創建 .dockerignore 文件

這個文件的作用和.git差不多,目的是讓docker打包的時候略過部分文件

node_modules
npm-debug.log

創建 image

這裡需要在docker中操作windows目錄下的文件

  • 先將docker-node-demo文件夾設置分享,具體操作傳送門:https://www.jianshu.com/p/cf03495a59f7
    使用Xshell連接docker,並且掛載分享目錄,完成之後進入到分享目錄
  • 開始build一個名為docker-node-demo的image
    docker build -t docker-node-demo .
  • 查看image
    docker images
    可以看到已經多出來一個image了
  • 運行image
    docker run -p 3000:8080 -d docker-node-demo
    這裡的意思是將image中8080端口映射到本地3000端口
  • 打開網頁
    理所當然的打開http://localhost:3000/發現什麼都沒有運行起來,一番搜尋之後發現,我們在linux環境中運行的localhost並非windows的localhost,但是通常都可以通過這個IP訪問192.168.99.100
    即可以通過192.168.99.100:3000訪問app的頁面

    一個小的node-demo完成了!

參考資料:

  • https://nodejs.org/en/docs/guides/nodejs-docker-webapp/#dockerignore-file
  • https://www.wangminli.com/?p=1179

你可能感兴趣的:(在docker中創建自己的node-demo)