网站首页 > 技术文章 正文
嗨,大家好,我是希留。
上一篇文章聊了一下如何把一个nodejs项目部署上线。现在容器化技术这么火热,作为学习,这篇文章就和大家聊一聊,我是如何使用docker把一个nodejs项目部署上线的。废话不多说,下面开始进入正题:
一、安装 Docker
首先在服务器上安装 Docker,参照官方极简教程,很快便能安装好(若已安装,则跳过此步骤)
要知道是否安装成功,执行以下命令,出现版本号,代表安装成功。
docker -v
二、创建 Dockerfile 文件
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。Docker 能够读取 Dockerfile 的指定进行自动构建容器。
在项目根目录新建 Dockerfile,执行命令:
touch Dockerfile
写入以下代码:
FROM mhart/alpine-node:9
WORKDIR /app
COPY . /app
RUN rm -f package-lock.json \
; rm -rf .idea \
; rm -rf node_modules \
; npm config set registry "https://registry.npm.taobao.org/" \
&& npm config set unsafe-perm true && npm install
RUN npm install pm2 -g
EXPOSE 3000
CMD ["pm2-runtime", "start", "app.js", "-n", "uni-docker"]
这个文件包含了以下命令:
- FROM mhart/alpine-node:9 - 指定使用最新版本的node基础镜像
- WORKDIR /app - 将容器内工作目录设置为/app
- COPY . /app - 将宿主机当前目录下的内容复制到镜像/app目录下
- RUN rm / RUN npm config set unsafe-perm true && npm install - 删除文件,设置npm源,再执行npm install安装应用所需的包 (npm config set unsafe-perm true:关闭安全证书检查,没加这个构建时 报 npm Error: could not get uid/gid / 错误)
- EXPOSE 3000 - 对外开放容器的 3000 端口
- CMD ["pm2-runtime", "start", "app.js", "-n", "uni-docker"] - 在容器启动时,执行的命令,通过 pm2 来统一管理应用
三、构建镜像
编写完 Dockerfile 文件后,进入项目根目录下,就可以通过 docker build 命令来构建镜像:
sudo docker build -t uni-back-code .
等待构建成功,执行命令查看:
docker images
四、运行容器
镜像构建完成后,就可以通过 docker run 运行容器,从而实现应用的 docker 化部暑。
执行命令:
sudo docker run -d --name uni-back-code -p 3000:3000 uni-back-code
执行命令后出现一串字符,代表启动成功,通过你的域名+/api/ 访问。
查看状态
记得上一文说过 pm2 list 来查看应用信息,在 docker 里查看命令需换成 docker exec:
docker ps -a #查看容器信息,例如 CONTAINER ID
docker exec -it CONTAINER ID pm2 list
uni-docker 运行一切良好,部署完成。
感谢您的阅读,如有不足之处,欢迎在评论区多多批评指正。
猜你喜欢
- 2024-12-22 Node.js的九大后端框架介绍 nodejs后端框架用哪个
- 2024-12-22 NodeJS,Express,基于Node.js的快速、开放、极简的Web开发框架
- 2024-12-22 五分钟教你用NodeJS手写一个Mock数据服务器
- 2024-12-22 Nodejs安装、配置与快速入门 nodejs安装包安装教程
- 2024-12-22 原来代码的质量也可以被检测:初探 SonarQube
- 2024-12-22 FastAPI入门 fastapi入门书推荐
- 2024-12-22 nodejs真的是单线程吗? nodejs单线程处理高并发
- 2024-12-22 FastApi——高效的用于构建API的高性能Python框架
- 2024-12-22 面试官:说说你对Node.js 的理解?优缺点?应用场景?
- 2024-12-22 聊聊 Node.js 的底层原理 node.js干啥的
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)