Docker 部署Node服务

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,倚天版 1GB 1个月
简介: 以前部署项目时候总会遇到本地环境和线上环境不一致产生排查困难的问题。在使用window系统的电脑开发学习时,但想要学习linux系统的一些操作或者项目的部署时,还需要一台服务器或者一个虚拟机,而Docker不仅部署方便而且更安全,Docker容器是个比较轻量的,占用资源少,成本低等等众多优势。所以,Docker 势必是程序员必会的一个工具之一。

前言

以前部署项目时候总会遇到本地环境和线上环境不一致产生排查困难的问题。在使用window系统的电脑开发学习时,但想要学习linux系统的一些操作或者项目的部署时,还需要一台服务器或者一个虚拟机,而Docker不仅部署方便而且更安全,Docker容器是个比较轻量的,占用资源少,成本低等等众多优势。所以,Docker 势必是程序员必会的一个工具之一。

以下通过使用Docker部署Node服务来加深学习

Docker部署Node服务

  • 创建Node项目,构建一个index.js文件

    • const Koa = require('koa');
      const app = new Koa();
      ​
      app.use(async ctx => {
        ctx.body = 'Hello Jasen Docker';
      });
      ​
      const port = 8004;
      app.listen(port);
      console.log(`http://localhost:${port}`);
    • 添加Dockerfile, Docker通过读取Dockerfile中的指令自动生成镜像

      • vscode 安装docker插件
      • 按F1 输入:Docker:add Docker Files into Workspace,然后根据相应的选项进入选择,enter 确认
      • Dockfile文件中常用指令:

        • FROM 基础镜像
        • MAINTAINER 维护者信息
        • ENV 设置环境变量
        • RUN 构建镜像时要执行的命令
        • ADD/COPY 文件添加到容器中
        • WORKDIR ==cd ,工作目录
        • VOLUME 指定持久化目录
        • EXPOSE 指定与外界交互的端口
        • CMD:运行命令,容器启动时调用
  • 构建镜像:进入 Dockerfile 所在项目当前目录下,执行以下命令:docker build -t node-proj .
  • 创建一个该镜像的容器:运行命令: docker run -d [--name [name]] [-p [对外端口]:[对内端口]] [业务镜像名]

    • -d : 容器后台执行;--name: 容器名称;-p:端口映射;业务镜像名:image Id 或 仓库REPOSITORY

执行完毕后,通过在浏览器中访问: http://localhost:8004 可以正常在页面显示“ Hello Jasen Docker ”,整个过程成功了。

Docker Compose管理服务

本地项目更新时,镜像怎么更新?

一开始我使用的方式是,先停止容器运行再删除容器,删除镜像,重新 build 然后再重新执行 run。整个操作过于繁琐,如果我有多容器时,更加时增加了工作量。

通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

docker-compose配置文件:

version: '3.4'
​
services:
  dockerNode:
    container_name: docker_web
    image: dockerproj
    build:
      context: .
      dockerfile: ./Dockerfile
    environment:
      NODE_ENV: production
    depends_on:
      - redis
      - db
    ports:
      - 8004:8004
  redis:
    image: redis
  db: 
    image: postgres

执行docker-compose命令,可以对配置的服务创建并启动

docker-compose stop
docker-compose  up -d --build

其中,depends_on 是用于设置依赖关系。

  • docker-compose up :以依赖性顺序启动服务。在以下示例中,先启动 db 和 redis ,才会启动 web。
  • docker-compose up SERVICE :自动包含 SERVICE 的依赖项。在以下示例中,docker-compose up web 还将创建并启动 db 和 redis。
  • docker-compose stop :按依赖关系顺序停止服务。在以下示例中,web 在 db 和 redis 之前停止。
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
4天前
|
JSON JavaScript 开发者
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
【8月更文挑战第7天】Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
|
1天前
|
运维 Java Devops
阿里云云效操作报错合集之部署docker时遇到报错,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
4天前
|
Java Nacos Docker
"揭秘!Docker部署Seata遇上Nacos,注册成功却报错?这些坑你不得不防!一网打尽解决秘籍,让你的分布式事务稳如老狗!"
【8月更文挑战第15天】在微服务架构中,Nacos搭配Seata确保数据一致性时,Docker部署Seata后可能出现客户端连接错误,如“can not connect to services-server”。此问题多由网络配置不当、配置文件错误或版本不兼容引起。解决策略包括:调整Docker网络设置确保可达性;检查并修正`file.conf`和`registry.conf`中的Nacos地址和端口;验证Seata与Nacos版本兼容性;修改配置后重启服务;参考官方文档和最佳实践进行配置。通过这些步骤,能有效排除故障,保障服务稳定运行。
13 0
|
5天前
|
JavaScript 应用服务中间件 nginx
如何使用 Systemd 和 Nginx 部署 Node.js 应用程序
如何使用 Systemd 和 Nginx 部署 Node.js 应用程序
13 0
|
5天前
|
存储 Ubuntu Linux
如何在 Ubuntu 上使用 Docker 容器化和部署多个 WordPress 应用程序
如何在 Ubuntu 上使用 Docker 容器化和部署多个 WordPress 应用程序
11 0
|
5天前
|
存储 Shell API
G6VP 与 GraphScope部署问题之拉取并启动 GraphScope 的 Docker 镜像如何解决
G6VP 与 GraphScope部署问题之拉取并启动 GraphScope 的 Docker 镜像如何解决
|
5天前
|
Linux Docker 异构计算
模型部署 — PaddleNLP 基于 Paddle Serving 快速使用(服务化部署 - Docker)— 图像识别 + 信息抽取(UIE-X)
模型部署 — PaddleNLP 基于 Paddle Serving 快速使用(服务化部署 - Docker)— 图像识别 + 信息抽取(UIE-X)
9 0
|
5天前
|
JSON 文字识别 Linux
百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服务化部署 - Docker)
百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服务化部署 - Docker)
14 0
|
6天前
|
JavaScript Linux 内存技术
NVM——Linux下快速部署NVM并安装nodeJs
NVM——Linux下快速部署NVM并安装nodeJs
21 0
|
1天前
|
Docker 容器