• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Docker搭建部署Node项目的方法步骤

    前段时间做了个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的代号。

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

    拉取镜像

    docker pull 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
    

    其他操作

    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,主要做了如下步骤

    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

    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 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    上一篇:nginx反向代理配置去除前缀案例教程
    下一篇:如何完全清理你的Docker数据
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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