我是如何使用docker,把一个nodejs项目部署上线的

本文介绍了如何使用Docker将Node.js项目部署上线。首先在服务器安装Docker,然后创建Dockerfile,包括指定基础镜像、设置工作目录、复制文件、安装依赖等。接着构建镜像并运行容器,最后通过域名访问应用,确保部署成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

image.png

 嗨,大家好,我是希留。

上一篇文章聊了一下如何把一个nodejs项目部署上线。现在容器化技术这么火热,作为学习,这篇文章就和大家聊一聊,我是如何使用docker把一个nodejs项目部署上线的。废话不多说,下面开始进入正题:

一、安装 Docker

首先在服务器上安装 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 运行一切良好,部署完成。

感谢您的阅读,如有不足之处,欢迎评论区多多批评指正。💖

### 使用Docker-Compose安装Node.js 为了使用`docker-compose`来部署Node.js应用,需准备项目所需的文件和目录结构。通常情况下,在Linux服务器上已经预先安装好了DockerDocker-Compose环境[^2]。 创建一个新的工作目录用于放置Node.js应用程序及其关联的配置文件: ```bash mkdir -p /mnt/docker/nodejs-app && cd /mnt/docker/nodejs-app ``` 在此路径下初始化一个简单的Node.js项目并编写必要的构建脚本: #### 创建`package.json` 通过执行以下命令快速生成默认设置下的`package.json`文件: ```bash npm init -y ``` 编辑此JSON文件以适应具体的应用需求,比如指定依赖项版本号等信息。 #### 编写简易入口程序`app.js` 作为示例目的,可以简单定义如下JavaScript代码片段保存至同级目录中的`app.js`: ```javascript const express = require('express'); const app = express(); const port = process.env.PORT || 3000; app.get('/', (req, res) => { res.send('Hello from Node.js with Docker!'); }); app.listen(port, () => console.log(`Server is listening on ${port}`)); ``` 确保安装Express框架以便于搭建Web服务端口监听功能正常运作: ```bash npm install express --save ``` #### 配置`Dockerfile` 在同一层级新建名为`Dockerfile`的文字档,其内部描述了基于官方Node.js镜像定制化容器映像的过程: ```dockerfile FROM node:alpine WORKDIR /usr/src/app COPY package*.json ./ RUN npm ci --only=production COPY . . EXPOSE 3000 CMD ["node", "app.js"] ``` 上述指令集指定了运行时的工作空间位置、复制宿主机上的包管理清单到目标环境中、仅下载生产环境下必需库、同步其余源码资源最后暴露对外提供HTTP请求处理能力的服务接口地址[^4]。 #### 构建`docker-compose.yml` 最终一步是在根目录添加`docker-compose.yml`文档,用来声明多层架构里各个组件之间的协作关系及参数设定: ```yaml version: '3' services: web: build: . ports: - "3000:3000" environment: NODE_ENV: production volumes: - ./data:/usr/src/app/data ``` 这里设定了单个名为`web`的服务实例,它会依据当前上下文中找到的`Dockerfile`来进行本地编译打包动作;同时开放外部访问权限给定为3000端口号,并传递环境变量指示处于正式上线模式之下;另外挂载了一个持久化的数据卷方便日后维护升级操作[^1]。 完成以上准备工作之后就可以利用下面这条语句一键启动整个集群体系了: ```bash docker-compose up -d ``` 这将会以前台守护进程的方式激活所有被定义过的微服务体系成员节点,包括但不限于刚刚所提及的那个Node.js Web Server。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java升级之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值