Docker+nodejs+mongodb环境搭建

一、 准备工作

  1. 下载安装Docker:
    https://www.docker.com/get-started
    截屏2021-01-29 上午11.15.59.png

也可以通过homebrew来安装

  1. 安装好后,打开设置,设置国内源


    截屏2021-01-29 上午11.19.32.png
截屏2021-01-29 上午11.45.16.png

国内源,可同时设置多个:

docker官方中国区 https://registry.docker-cn.com
网易 http://hub-mirror.c.163.com
ustc http://docker.mirrors.ustc.edu.cn
阿里云 http://<你的ID>.mirror.aliyuncs.com

  1. 下载安装Node.js:
    http://nodejs.cn/download/
    截屏2021-01-29 下午1.18.31.png
// 查看是否安装成功
$ npm -v

$ node -v

// 更换淘宝源
$ npm config set registry https://registry.npm.taobao.org

// 查看是否更换成功
$ npm config get registry
  1. 下载安装vscode:
    https://code.visualstudio.com
    截屏2021-01-29 上午11.13.57.png

安装Docker插件:

截屏2021-01-29 上午11.58.07.png

二、开始搭建

  1. 安装 express-generator (Express 应用框架生成器),用于创建测试项目
    https://www.expressjs.com.cn/starter/generator.html

    截屏2021-01-29 下午1.51.38.png

  2. vscode中打开一个空文件夹,command + j 打开终端,
    执行 $ express,生成新项目。

// 生成新项目
$ express

// 安装依赖
$ npm install

// 启动项目
$ npm start

在浏览器中打开:http://localhost:3000
一切正常的话,页面中会显示如下内容:

截屏2021-01-29 下午2.52.36.png

回到vscode终端,按control + c退出npm

安装依赖 mongoose (用于操作mongodb) 和 nodemon (用于更改源代码后自动重启应用)

$ npm install --save mongoose

$ npm install --save nodemon

安装好 nodemon后,修改 package.json文件:

"start": "node ./bin/www"
// 修改为:
"start": "nodemon ./bin/www"
截屏2021-01-29 下午4.03.44.png
  1. 通过 vscode 生成 Dockerfile,在 vscode 中,按 command + shift + p
  • 在弹出的输入框中输入:docker: add
  • 在下面筛选出来的列表中选择 Docker: Add Docker Files to Workspace...
  • 在弹出的下一步中选择Node.js
  • 第三步选择package.json
  • 输入端口号,默认为 3000,确认按回车
  • 问是否包含 Docker Compose files,选择 Yes

操作完成后,会生成3个新文件:Dockerfiledocker-compose.ymldocker-compose.debug.yml,主要看前两个。

截屏2021-01-29 下午3.47.39.png
截屏2021-01-29 下午3.47.52.png

部署时,会按Dockerfile文件里的步骤执行

在Dockerfile中,npm install前面添加一行,以修改源:

RUN npm config set registry https://registry.npm.taobao.org

修改后如图:


截屏2021-01-29 下午4.53.44.png
  1. docker-compose.yml中添加配置
    volumes: 
      - .:/usr/src/app
    links: 
      - mongodb
  mongodb:
    image: mongo:latest
    ports: 
      - 27017:27017
    volumes: 
      - data:/data/db

volumes: 
  data:

修改后如下:


截屏2021-01-29 下午3.57.52.png
  1. vscode 下面的终端中输入:docker-compose up 进行部署。在 MacWindows 中安装的 Docker 自带有docker-compose。至此,环境已经部署好了,接下来修改项目源码,添加对 mongodb 的操作进行测试。

三、测试

  1. 添加文件夹 models,在 models 中添加 persons.js
    截屏2021-01-29 下午5.36.53.png

    内容如下:
const mongoose = require("mongoose");

const personsSchema = new mongoose.Schema({
    name: String,
    gender: String,
    age: Number
});

module.exports.Persons = mongoose.model("Persons", personsSchema);
  1. app.js 中添加代码:
var mongoose = require("mongoose");
mongoose.connect("mongodb://mongodb:27017/test", { useNewUrlParser: true });

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'CONNECTION ERROR'));
db.once('open', function() {
  console.log("connected");
});
  1. 修改 routes/index.js 后如下:
var express = require('express');
var router = express.Router();
var { Persons } = require('../models/persons');

/* GET home page. */
router.get('/', async function(req, res, next) {
  const persons = await Persons.find();
  res.render('index', { title: 'Persons', persons: persons });
});

module.exports = router;
  1. 修改 view/index.jade 后如下:
extends layout

block content
  h1= title
  ul
    for person in persons
      li.listItem
        | Name: #{person.name}
        | Gender: #{person.gender}
        | Age: #{person.age}

    else
      p No Person Found
  1. 保持终端在当前项目目录下,执行 docker-compose up,上传更新

  2. Docker界面中找到前面创建的容器mongodb,点击CLI

    截屏2021-01-29 下午5.43.40.png

    点击CLI后会打开新的终端进行连接
    截屏2021-01-29 下午5.48.16.png

    在终端中输入 mongo,进入 mongodb,依次执行如下命令:
    截屏2021-01-29 下午5.50.24.png

// 显示所有数据库
> show dbs
// 切换到 `test` 数据库
> use test
// 插入测试数据
> db.persons.insertMany([{name:'lee', gender:'male', age:20},{name:'lin', gender:'female', age: 21}])
// 查看插入后的数据
> db.persons.find().pretty()
  1. 在浏览器中打开:http://localhost:3000,这时访问的是Docker里的环境,页面显示如下,说明环境搭建成功
    截屏2021-01-29 下午5.55.36.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容