使用Docker部署Node.js+Mongodb和图形可视化mongo-express

本篇主要分享如何在Docker部署常见的技术栈 Node.js+Mongodb 再选用一个可视化的工具 mongo-express。下面分别对这三点进行介绍。

1.部署Node.js

部署Node.js代码时,我首先编写了一个Dockerfile源文件,目的是为了生成一个镜像。具体该如何编写dockerfile可以参看我的其他文章。

// 1.拉取node基础镜像
FROM node:latest

因为后端代码是node.js所以生成镜像,第一步是需要先给到一个能够运行代码的基本环境。

// 2.创建工作目录
RUN rm -rf /app
RUN mkdir /app
WORKDIR /app
COPY package.json /app/
RUN mkdir public
WORKDIR public
RUN mkdir upload
WORKDIR /app

在之后,就是要往这个基本环境里添油加醋啦。创建一些目录,然后使用COPY将本地里的一些东西拷贝到镜像环境里。WORKDIR是指定当前的工作目录。

# 3.安装项目依赖
RUN npm install
COPY . /app/
RUN npm run build

这部分是在进行环境中包的安装。上一步中,把package.json文件拷贝到了环境里,然后执行npm install进行依赖安装,然后再将当前本地目录下的代码都拷贝到 环境里/app下。这里要注意的是,可能在你的本地目录下,有一些你并不想拷贝进来的,可以写一个.dockerignore文件来申明这些忽略。下面是我的.dockerignore文件,我这里申明把node_modules忽略,主要是为了加快生成镜像的速度,此次,主要是将后端代码部署到docker,这里public里面的东西也暂且忽略了。

node_modules
public

拷贝好之后,就可以执行npm run build 对后端代码在镜像里打包了

// 4. 对外暴露端口
EXPOSE 5000

指明暴露的端口号,这里暴露5000端口。

// 5.执行wait操作,让服务在Mongodb启动之后再执行

ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.2.1/wait /wait

RUN chmod +x /wait 

CMD /wait && npm run start

这里是一个关键的地方。使用/wait来让某个此服务等待其他的服务启动后才执行。和docker-compose.yml中的depends_on有异曲同工之妙吧。

在写完dockerfile文件之后,又再docker-compose.yml中进行了自动化的部署工作。

web:
  build:
    context: ./
    dockerfile: Dockerfile
  container_name: web-backend
  restart: on-failure
  environment:
    PORT: 5000
    WAIT_HOSTS: mongodb:27017
    MONGODB_URI: mongodb://mongodb:27017/myblog_db2
  depends_on:
    - mongodb
  ports:
    - 5000:5000
  networks:
    - webapp-network

在这里,需要主要的是build这里指定了我刚才写好的dockerfile文件,在自动化部署的时候就会使用这里生成的镜像了。另外,还要注意的是,WAIT_HOSTS: mongodb:27017这里是指明需要等待mongodb启动之后才执行,然后MONGODB_URI中申明了连接的地址。docker-compose中的具体细节可以参看我的其他文章。

 

2.部署Mongodb

下面开始进行mongodb的自动化部署。首先是需要拉取mongodb的镜像,然后需要申明端口号使用的是27017。这里,需要注意的是,volumes是用来持久化数据,这里用的是绝对路径的方式,需要自己管理本地的路径。通过volumes 关键字实现物理主机目录挂载到容器中的功能(同时删除Dockerfile中的COPY指令,不需要创建镜像时将代码打包进镜像,而是通过volums动态挂载,容器和物理host共享数据卷,左侧为物理host,右侧为容器地址)。

mongodb:
  image: mongo
  container_name: mongodb
  restart: always
  ports:
    - 27017:27017
  volumes:
    - ~/data/db:/data/db
  networks:
    - webapp-network

3.部署mongo-express

最后是选择使用了一个对mongodb进行可视化的工具。除了mongo-express之外,还有其他的选择,比如:adminmongo等。这里以部署mongo-express为例。

mongo-express:
  image: mongo-express
  container_name: mongo-express
  restart: always
  links:
    - mongodb:mongodb
  depends_on:
    - mongodb
  networks:
    - webapp-network
  ports:
    - 27018:8081
  environment:
    ME_CONFIG_OPTIONS_EDITORTHEME: 3024-night
    ME_CONFIG_MONGODB_SERVER: mongodb
    ME_CONFIG_BASICAUTH_USERNAME: admin
    ME_CONFIG_BASICAUTH_PASSWORD: admin

这里enviroment参数里填写了对mongodb和mongo-express的基本配置信息。端口号暴露为27018,容器内为8081。depends_on申明此镜像部署依赖于mongodb完成后进行。

 

以上就是对后端Node.js代码及数据库mongodb和可视化工具mongo-express的本地docker部署。如果遇到什么疑问和问题,欢迎留言讨论。如果有什么不正确的地方,也欢迎指正。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值