• 售前

  • 售后

热门帖子
入门百科

Docker搭建摆设Node项目标方法步调

[复制链接]
luly靓 显示全部楼层 发表于 2021-8-14 14:17:19 |阅读模式 打印 上一主题 下一主题
目录


  • 什么是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 是体积最小的一个版本,有些乃至是其他版本的四分之一。这意味着构建镜像更快,运行服从更高,由于加载的组件更加少,无形中也意味着弊端更少更安全。

拉取镜像

  1. 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:使用的镜像
  1. 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就是构建时使用的根本镜像:
  1. FROM nginx
  2. COPY nginx.conf /etc/nginx/nginx.conf
复制代码
Docker-compose


当我们的项目不但只有单个容器,而是须要运行多个容器,而且容器之间还须要相互通讯的时间,就须要更强大的管理工具了。好比k8s,但我们目前的小项目使用官方自带的Docker-compose已经足矣。
首先须要docker-compose.yml配置文件,好比下面就是两个容器的模板,image体现使用的镜像,ports则体现端口映射,volumes则是须要映射的数据卷:
  1. version: "3"
  2. services:
  3.   webapp:
  4.     image: web
  5.     ports:
  6.       - "8080:80"
  7.     volumes:
  8.       - "/data"
  9.   redis:
  10.     image: "redis:alpine"
复制代码
接着可以使用以下下令行进行操纵:
  1. docker-compose build [options] [SERVICE...] #构建(重新构建)项目中的服务容器
  2. docker-compose up -d # 运行 compose 项目,后台执行
复制代码
docker-compose up 是个非常强大的下令,它将实行自动完成包罗构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操纵。链接的服务都将会被自动启动,除非已经处于运行状态。可以说,大部分时间都可以直接通过该下令来启动一个项目。

构建nginx-node-postgres项目


有了上面的根本,接着就可以构建我们自己的项目了,首先是node服务的dockerfile,紧张做了如下步骤
       
  • 创建容器工作目录   
  • 复制相关配置文件到容器   
  • 在容器安装npm包   
  • 运行pm2启动容器
  1. FROM node:14.5.0-alpine3.12
  2. # 工作目录
  3. WORKDIR /usr/src/app
  4. # 复制配置文件
  5. COPY package*.json ./
  6. COPY process.yml ./
  7. RUN npm set registry https://registry.npm.taobao.org/ \
  8.   && npm install pm2 -g \
  9.   && npm install
  10. # 使用pm2管理
  11. CMD ["pm2-runtime", "process.yml", "--only", "app", "--env", "production"]
  12. EXPOSE 3010
复制代码
接着配置 docker-compose.yml
       
  • db配置的是数据库postgres,此中数据卷 volumes 映射了数据库目录和初始化脚步   
  • app配置的是node服务,此中的build是映射上面dockerfile地点的目录;depends_on体现依靠的容器、启动先后,这里先启动db再启动node;links体现将db的名称映射到app容器   
  • nginx容器depend_on于app容器,同时配置转发node的服务
  1. version: '3'
  2. services:
  3.   db:
  4.     image: postgres:12.3-alpine
  5.     container_name: postgres
  6.     environment:
  7.       - TZ=Asia/Shanghai
  8.       - POSTGRES_PASSWORD=xxxx
  9.     volumes:
  10.       - ./postgres/data:/var/lib/postgresql/data
  11.       - ./postgres/init:/docker-entrypoint-initdb.d
  12.     ports:
  13.       - 5432:5432
  14.     restart: always #始终重启,生产环境中推荐配置为 always
  15.     expose:
  16.       - 5432
  17.       
  18.   app:
  19.     image: koa-pg
  20.     container_name: koa
  21.     volumes:
  22.       - ./dist:/usr/src/app/dist
  23.       - ./logs:/usr/src/app/logs
  24.     build: ./
  25.     environment:
  26.       - TZ=Asia/Shanghai
  27.     restart: always
  28.     depends_on:
  29.       - db
  30.     links:
  31.       - db
  32.     expose:
  33.       - 3010
  34.       
  35.   nginx:
  36.     image: nginx:1.19.0-alpine
  37.     container_name: nginx
  38.     volumes:
  39.       - ./nginx.conf:/etc/nginx/nginx.conf
  40.     ports:
  41.       - 8080:80
  42.     environment:
  43.       - TZ=Asia/Shanghai
  44.     restart: always
  45.     depends_on:
  46.       - app
  47.     links: # host名代替ip配置nginx的转发
  48.       - app
  49.     expose:
  50.       - 8080
复制代码
配置完我们的项目之后,接着就是运行起来
  1. docker-compose up
复制代码
在我们的本地开发机是云云,摆设到服务器也是云云,你想要摆设几台服务器就摆设几台,只要装了docker,都是一句下令行就能解决的事变。
要启动几个容器,修改下docker-compose.yml的配置,再次docker-compose up,so easy !
到此这篇关于Docker搭建摆设Node项目标方法步骤的文章就介绍到这了,更多相关Docker搭建摆设Node 内容请搜刮草根技术分享从前的文章或继承欣赏下面的相关文章希望各人以后多多支持草根技术分享!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作