docker怎么部署node-exporter(Docker搭建部署Node项目的方法步骤)
docker怎么部署node-exporter
Docker搭建部署Node项目的方法步骤目录
- 什么是Docker
- 客户端Docker
- Docker基本操作
- 镜像名称
- 拉取镜像
- 其他操作
- Dockerfile
- Docker-compose
- 构建nginx-node-postgres项目
前段时间做了个node全栈项目,服务端技术栈是 nginx + koa + postgresql。其中在centos上搭建环境和部署都挺费周折,部署测试服务器,接着上线的时候又部署生产环境服务器。这中间就有很多既无聊又费精力,吃力不讨好的"体力活"。所以就开始思考怎么自动化这部分搭建部署的工作,也就引出了Docker。
什么是DockerDocker 是比虚拟机还要轻量级的虚拟化技术,它虚拟化的实体就叫做容器。容器本身就是一个隔离了作用域的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,随时可以构建镜像。如下就是构建一个非常简单的nginx镜像,from就是构建时使用的基础镜像:
FROM nginx COPY nginx.conf /etc/nginx/nginx.conf
当我们的项目不仅只有单个容器,而是需要运行多个容器,而且容器之间还需要互相通信的时候,就需要更强大的管理工具了。比如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 内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- 使用TLS加密通讯远程连接Docker的示例详解(使用TLS加密通讯远程连接Docker的示例详解)
- dockerswarm使用教程(Docker Swarm集群管理的使用及原理解析)
- jenkins回滚docker容器(关于docker部署的jenkins跑git上的程序的问题)
- docker从一个容器中退出来(Docker容器迁移到其他服务器的5种方法详解)
- docker中运行项目的配置(Docker中搭建配置Git环境的过程)
- docker部署mysql并且自动启动(Docker 部署 Mysql8.0的方法示例)
- docker 部署springboot项目(Spring Boot Docker打包工具小结)
- docker镜像配置的挂载路径(docker挂载本地目录和数据卷容器操作)
- docker同步宿主机配置(docker容器间跨宿主机通信-基于overlay的实现方法)
- 将docker中的镜像打包教程(本地使用docker打包部署镜像的方法)
- docker 镜像id修改(Docker Alpine镜像时区问题完美解决方案)
- docker查看容器教程(如何使用docker对容器资源进行限制)
- python配合docker(Docker构建python Flask+ nginx+uwsgi容器)
- docker怎么部署node-exporter(Docker搭建部署Node项目的方法步骤)
- springboot怎么设置docker(Docker如何给Springboot项目动态传参的实现方法)
- docker进入容器的方法(在docker容器中安装vi命令的简单操作)
- 高考数学题(高考数学题基础题占多少分)
- 没钱只能吃土(没钱要吃土了幽默短信发朋友圈)
- 今年考高会很难吗(今年高考会考试吗)
- 盘古开天地 他创造了世界,谁创造了盘古 盘古是伏羲吗(盘古开天地他创造了世界)
- 关于队徽 你了解这些么 二(关于队徽你了解这些么)
- 冬天来了手脚冰凉 真不是因为上辈子你是折翼的天使(冬天来了手脚冰凉)
热门推荐
- php脚本通过文件路径批量上传文件(php遍历目录下文件并按修改时间排序操作示例)
- python怎么抽取微信图片(Python 一键制作微信好友图片墙的方法)
- 腾讯云如何添加安全通信端口(腾讯云服务器如何添加安全通信端口?)
- python之pil模块使用(Python3安装Pillow与PIL的方法)
- html5长按动画效果(HTML5实现移动端弹幕动画效果)
- linux系统各种执行命令(Linux调整命令历史方法详解)
- mysql删除数据库的命令(MySQL 线上数据库清理数据的方法)
- docker启动sqlserver(用docker运行postgreSQL的方法步骤)
- 推荐算法第三方python(GitHub 热门:Python 算法大全,Star 超过 2 万)
- vue3中的setup的参数(Vue3中ref与reactive的详解与扩展)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9