Docker搭建部署Node项目的方法步骤

目录
  • 什么是Docker
  • 客户端Docker
  • Docker基本操作
    • 镜像名称
    • 拉取镜像
    • 其他操作
  • Dockerfile
  • Docker-compose
  • 构建nginx-node-postgres项目

前段时间做了个node全栈项目,服务端技术栈是 nginx + koa + postgresql。其中在centos上搭建环境和部署都挺费周折,部署测试服务器,接着上线的时候又部署生产环境服务器。这中间就有很多既无聊又费精力,吃力不讨好的"体力活"。所以就开始思考怎么自动化这部分搭建部署的工作,也就引出了Docker。

什么是Docker

Docker 是比虚拟机还要轻量级的虚拟化技术,它虚拟化的实体就叫做容器。容器本身就是一个隔离了作用域的sandbox,同时它只包含了基础库和本身承载的服务,非常精简。容器运行起来后就只是宿主机中的一个进程而已,占用的资源是非常小的,这就为操作系统上运行容器集群创造了条件,可操作性和灵活性极佳。

镜像和容器又是什么关系呢?可以把镜像看成是类(class),容器看成对象(object),容器是由镜像实例化产生出来的,当然一个镜像可以生成多个容器。

客户端Docker

如果不在服务器,我们在客户端要怎么使用 Docker呢?在 Windows 和 OSX 上可以使用 Docker Desktop,再加上Kitematic,这两个都是桌面管理工具,常规的操作方面非常便利。Docker Desktop 和 Kitematic 只是可视化了部分操作,命令行还是必备的,因为很多操作也只能命令行才行。

Docker基本操作

镜像名称

关于镜像标签,比如nginx:1.19.0-alpine,1.19.0是 nginx 的版本号,alpine是os的代号。

  • Jessie: debian 8
  • Stretch: debian 9
  • Buster: debian 10
  • Alpine: Alpine,推荐使用,因为体积非常小

Alpine 是体积最小的一个版本,有些甚至是其他版本的四分之一。这意味着构建镜像更快,运行效率更高,因为加载的组件更加少,无形中也意味着漏洞更少更安全。

拉取镜像

docker pull nginx:1.19.0-alpine

启动容器

  • --name web:指定容器名称为web
  • -p 8080:80: 容器nginx监听端口为80,映射到本地端口8080
  • -v xxxx:xxxx:这里是用本地配置文件映射到容器nginx配置文件
  • -d:后台运行
  • nginx:1.19.0-alpine:使用的镜像
docker run --name web -p 8080:80 -v /usr/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx:1.19.0-alpine

其他操作

  • docker images #显示镜像
  • docker rmi xxx #删除镜像
  • docker ps #显示运行的容器
  • docker rm xxx #删除容器

Dockerfile

构建镜像比较方便的是使用Dockerfile,它就是镜像的配置文件,只要有Dockerfile,随时可以构建镜像。如下就是构建一个非常简单的nginx镜像,from就是构建时使用的基础镜像:

FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf

Docker-compose

当我们的项目不仅只有单个容器,而是需要运行多个容器,而且容器之间还需要互相通信的时候,就需要更强大的管理工具了。比如k8s,但我们目前的小项目使用官方自带的Docker-compose已经足矣。

首先需要docker-compose.yml配置文件,比如下面就是两个容器的模板,image表示使用的镜像,ports则表示端口映射,volumes则是需要映射的数据卷:

version: "3"

services:
  webapp:
    image: web
    ports:
      - "8080:80"
    volumes:
      - "/data"
  redis:
    image: "redis:alpine"

接着可以使用以下命令行进行操作:

docker-compose build [options] [SERVICE...] #构建(重新构建)项目中的服务容器
docker-compose up -d # 运行 compose 项目,后台执行

docker-compose up 是个非常强大的命令,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。链接的服务都将会被自动启动,除非已经处于运行状态。可以说,大部分时候都可以直接通过该命令来启动一个项目。

构建nginx-node-postgres项目

有了上面的基础,接着就可以构建我们自己的项目了,首先是node服务的dockerfile,主要做了如下步骤

  • 创建容器工作目录
  • 复制相关配置文件到容器
  • 在容器安装npm包
  • 运行pm2启动容器
FROM node:14.5.0-alpine3.12
# 工作目录
WORKDIR /usr/src/app
# 复制配置文件
COPY package*.json ./
COPY process.yml ./
RUN npm set registry https://registry.npm.taobao.org/ \
  && npm install pm2 -g \
  && npm install
# 使用pm2管理
CMD ["pm2-runtime", "process.yml", "--only", "app", "--env", "production"]
EXPOSE 3010

接着配置 docker-compose.yml

  • db配置的是数据库postgres,其中数据卷 volumes 映射了数据库目录和初始化脚步
  • app配置的是node服务,其中的build是映射上面dockerfile所在的目录;depends_on表示依赖的容器、启动先后,这里先启动db再启动node;links表示将db的名称映射到app容器
  • nginx容器depend_on于app容器,同时配置转发node的服务
version: '3'

services:
  db:
    image: postgres:12.3-alpine
    container_name: postgres
    environment:
      - TZ=Asia/Shanghai
      - POSTGRES_PASSWORD=xxxx
    volumes:
      - ./postgres/data:/var/lib/postgresql/data
      - ./postgres/init:/docker-entrypoint-initdb.d
    ports:
      - 5432:5432
    restart: always #始终重启,生产环境中推荐配置为 always
    expose:
      - 5432

  app:
    image: koa-pg
    container_name: koa
    volumes:
      - ./dist:/usr/src/app/dist
      - ./logs:/usr/src/app/logs
    build: ./
    environment:
      - TZ=Asia/Shanghai
    restart: always
    depends_on:
      - db
    links:
      - db
    expose:
      - 3010

  nginx:
    image: nginx:1.19.0-alpine
    container_name: nginx
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    ports:
      - 8080:80
    environment:
      - TZ=Asia/Shanghai
    restart: always
    depends_on:
      - app
    links: # host名代替ip配置nginx的转发
      - app
    expose:
      - 8080

配置完我们的项目之后,接着就是运行起来

docker-compose up

在我们的本地开发机是如此,部署到服务器也是如此,你想要部署几台服务器就部署几台,只要装了docker,都是一句命令行就能解决的事情。

要启动几个容器,修改下docker-compose.yml的配置,再次docker-compose up,so easy !

到此这篇关于Docker搭建部署Node项目的方法步骤的文章就介绍到这了,更多相关Docker搭建部署Node 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 从零搭建docker+jenkins+node.js自动化部署环境的方法

    本次案例基于CentOS 7系统 适合有一定docker使用经验的人阅读 适合有一定linux命令使用经验的人阅读 1.docker部分 1.1.docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口 1.2.docker架构 简单的说,docker就是一个轻量级的linux系统.Docker 容器通过 Docker 镜像来创建.

  • Docker搭建部署Node项目的方法步骤

    目录 什么是Docker 客户端Docker Docker基本操作 镜像名称 拉取镜像 其他操作 Dockerfile Docker-compose 构建nginx-node-postgres项目 前段时间做了个node全栈项目,服务端技术栈是 nginx + koa + postgresql.其中在centos上搭建环境和部署都挺费周折,部署测试服务器,接着上线的时候又部署生产环境服务器.这中间就有很多既无聊又费精力,吃力不讨好的"体力活".所以就开始思考怎么自动化这部分搭建部署的工

  • 基于Docker镜像部署go项目的方法步骤

    依赖知识 Go交叉编译基础 Docker基础 Dockerfile自定义镜像基础 docker-compose编排文件编写基础 当然,一点也不会也可以按照这个步骤部署完成,不过可能中间如果出点小问题,会不知道怎么解决,当然你也可以留言. 我是在mac环境上开发测试的,如果你是在windows上可能有一点出入,但应该不会有啥大问题. 一.依赖环境 Docker 二.编写一个GoLang web程序 我这里就写一个最简单的hello world程序吧,监听端口是80端口. 新建一个main.go文件

  • 使用pm2自动化部署node项目的方法步骤

    1.pm2简介 pm2(process manager)是一个进程管理工具,维护一个进程列表,可以用它来管理你的node进程,负责所有正在运行的进程,并查看node进程的状态,也支持性能监控,负载均衡等功能. 1.1.使用pm2管理的node程序的好处 监听文件变化,自动重启程序 支持性能监控 负载均衡 程序崩溃自动重启 服务器重新启动时自动重新启动 自动化部署项目 2.pm2安装与使用 2.1.全局安装 npm install pm2 -g 2.2.常用命令 启动一个node程序 pm2 st

  • 使用docker部署dubbo项目的方法步骤

    1.首先用springboot构建一个简单的dubbo测试程序,并引入相关依赖 编写公共接口api 编写provider实现UserSvice的方法,并暴露服务 编写provider的配置文件 编写Consumer 通过调用provider的服务获取user信息并返回 consumer的配置文件 测试程序已完成 在本地启动,看看程序是否能正常调用服务 启动zookeeper 先启动provider端再启动consumer端 通过dubbo的控制台看到我们的服务已经注册成功 通过访问本地,看到我们

  • Gitlab CI-CD自动化部署SpringBoot项目的方法步骤

    目录 一.概述 二.前期准备 三.总体架构图 四.环境搭建 1.环境准备(可选) 2.Gitlab安装 3.安装 Runner 4.安装应用服务器环境 五.创建 SpringBoot 项目 1.使用Gitlab Spring 模板快速创建一个 SpringBoot 项目: 2.添加环境变量(登录应用服务器密码) 六.总结 一.概述 本文主要记录如何通过Gitlab CI/CD自动部署SpringBoot项目jar包. 二.前期准备 准备三台 CentOS7服务器,分别部署以下服务: 序号 系统

  • docker搭建Zookeeper集群的方法步骤

    目录 0.前言 1.前提 2.开始搭建 解释 创建zoo.cfg 3.docker搭建 1.docker创建网络 2.启动第1个zk节点 3.启动第2个zk节点 4.启动第3个zk节点 4.访问节点 1.进入zk第一个节点的docker容器内部 2.使用zk的客户端进行访问 3.在zk中使用命令 0.前言 之前在学springcloud的时候,提到有些项目还是使用zookeeper作为注册中心. 因此决定掌握这个技能,但是本地为了测试而部署一套zookeeper集群还是比较麻烦的. 所以打算使用

  • Docker搭建RabbitMQ集群的方法步骤

    目录 集群模式介绍 1.普通集群的搭建 1.1.普通集群架构介绍 1.2.环境准备 1.3.集群搭建 2.镜像集群的搭建 2.1.配置镜像集群的策略 集群模式介绍 RabbitMQ集群模式有两种:普通模式和镜像模式 普通模式:默认模式,多个节点组成的普通集群,消息随机发送到其中一个节点的队列上,其他节点仅保留元数据,各个节点仅有相同的元数据,即队列结构.交换器结构.交换器与队列绑定关系.vhost.消费者消费消息时,会从各个节点拉取消息,如果保存消息的节点故障,则无法消费消息,如果做了消息持久化

  • Linux下部署springboot项目的方法步骤

    最近在研究将springboot项目部署到Linux服务器上,由于springboot是内嵌了tomcat,所以可以直接将项目打包上传至服务器上. 1.在pom文件中添加springboot的maven插件 <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> spring-boot-maven-plugin</artifactid> </p

  • 使用jenkins部署springboot项目的方法步骤

    1.准备工作 1.JDK安装 2.Maven安装 3.Git安装 4.jenkins安装 以上软件安装成功后进入jenkins进行相关配置. 如果需要通过SSH进行远程发布项目,jenkins需要安装 Publish Over SSH 插件 2.全局配置 通过whereis git查找git的安装地址 3.全局配置完成后在进行系统配置 ,如图 4.基础配置完成以后,下面我们来新建一个项目 项目的配置: 5.shell mvn clean package -Dmaven.test.skip=tru

  • Docker一键部署springcloud项目的方法

    目录 docker下载的镜像 启动mysql和nacos 修改自己的java项目 打包 上传Linux系统 启动 遇到的一些问题: 其他错误 docker下载的镜像 1.下载nacos docker pull nacos:[版本号] 2.下载mysql docker pull mysql:[版本号] 3.安装docker-compose Linux下需要通过命令下载: # 安装 curl -L https://github.com/docker/compose/releases/download

随机推荐