首页 > 编程语言 >Docker部署Node.js应用简单实践

Docker部署Node.js应用简单实践

时间:2023-12-18 12:32:06浏览次数:38  
标签:Node node 容器 hello js 3000 镜像 Docker docker

前言

本文将从零至一,介绍如何在云服务器上通过 Docker 容器运行一个简单的Node应用。本文假设读者已经掌握基本的Linux,Docker,Node,Express 知识。

基本步骤

  1. 本地写好nodejs应用,放到github。
  2. 云服务器安装docker,配置国内镜像加速。
  3. 拉取一个node镜像。
  4. 从github拉取项目代码。
  5. 编写Dockerfile文件,构建镜像。
  6. 根据镜像运行一个容器。
  7. 本地进行访问。

具体步骤

1.编写Node应用

新建项目目录hello,进入目录,初始化项目:

npm  init

安装express模块

npm install express --save

项目根目录下新建 app.js ,当访问时返回Hello,Docker!,监听3000端口。

// app.js
const express = require('express');  
const app = express();
app.get('/', function (req, res) {
 res.send('Hello,Docker!');
});  
app.listen(3000);
console.log('Server is running on http://localhost:3000');

2.安装Docker

远程连接服务器,安装Docker:

yum install -y docker

安装成功以后,编辑/etc/docker/daemon.json文件,配置国内镜像加速。 这里用到的是阿里云提供的加速服务,需要登录https://dev.aliyun.com/来获取个人专属的加速地址。这里假设加速地址是https://4da6b0g8.mirror.aliyuncs.com

vim /etc/docker/daemon.json

编写以下内容:

{
“registry-mirrors”: [“https://4da6b0g8.mirror.aliyuncs.com“]
}

修改完配置文件应该重启服务。

3.拉取Node镜像

拉取Node镜像

docker pull node:9.2.0

等待镜像拉取成功,可以查看下我们已经有的镜像:

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/node      9.2.0               c1d02ac1d9b4        3 weeks ago         675.6 MB
node                9.2.0               c1d02ac1d9b4        3 weeks ago         675.6 MB

4.部署项目代码

进入/home目录,从github上拉取项目代码:

cd /home
git clone https://github.com/hsyq/hello

这里的github地址要换成自己仓库的地址。

5.编写Dockerfile文件

Dockerfile文件里是一条条能被Linux执行的命令,docker能根据该文件构建镜像。 该文件必须和项目文件放在一起,一般放在项目根目录下,本例中即/home/hello目录下。

cd hello
vim Dockerfile
# 基础镜像为node,版本为v9.2.0
FROM node:9.2.0

# 创建容器内的项目存放目录
RUN mkdir -p /home/nodeapp
WORKDIR /home/nodeapp

#  将Dockerfile当前目录下所有文件拷贝至容器内项目目录并安装项目依赖
COPY . /home/Service
RUN npm install

# 容器对外暴露的端口号,要和node项目配置的端口号一致
EXPOSE 3000

# 容器启动时执行的命令
CMD [ "node", "app.js" ]

6.构建镜像

在项目根目录下执行命令构建对象:

docker build -t hello .

屏幕会按照Dockerfile内的指令一条条执行并显示在屏幕上。 构建完成,查看已有的镜像。

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello               latest              b753dcb8208d        4 hours ago         675.6 MB
docker.io/node      9.2.0               c1d02ac1d9b4        3 weeks ago         675.6 MB
node                9.2.0               c1d02ac1d9b4        3 weeks ago         675.6 MB

7.运行容器

通过镜像hello创建一个容器并运行:

docker run -d --name hellocontainer -p 80:3000 hello

-d表示容器会在后台运行;--name 是我们给容器起的名字,这个名字是唯一的;-p表示端口映射,即将容器内的3000端口映射到宿主机器的80端口上,这样外部就可以通过80端口来访问容器内部运行的应用了。

本文的演示没有使用 Nginx 做端口转发,只要服务器开放 80 端口,就能将 80 映射到 node项目容器的3000端口上,对完提供访问服务。

执行命令查看容器的状态:

docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS                  NAMES
748be4cfccd9        hello               "node app.js"       25 seconds ago      Up 25 seconds                 0.0.0.0:80->3000/tcp   hellocontainer

此时,node应用已经在容器内跑起来了。我们可以访问了。

8.本地访问

打开本地的浏览器,输入云服务器的公网IP即可访问:

Docker部署Node.js应用简单实践_Docker

标签:Node,node,容器,hello,js,3000,镜像,Docker,docker
From: https://blog.51cto.com/u_12382805/8871586

相关文章

  • Windows 运行nodejs程序
    创建第一个应用,首先任意目录新建一个txt。复制以下内容://引入required模块varhttp=require("http");//创建服务器http.createServer(function(request,response){//发送头部response.writeHead(200,{'Content-Type':'text/plain'});//发送响应数据res......
  • Harbor 本地docker镜像仓库远程连接(镜像管理零距离!!)
    简单几步,实现本地Harbordocker镜像仓库结合cpolar内网穿透实现远程推送和拉取镜像1.查看本地镜像进入本地Harbordocker仓库,我们可以看到我们的本地镜像,这边方便测试,提前上传了一个镜像  在左侧可以看到推送命令,这里局域网ip没有出现端口,说明默认使用80端口,知......
  • CentOS安装Docker(一)
    1.在Linux中,可以通过以下命令查看系统版本:cat/etc/os-release2.在Linux中,可以通过以下命令查看版本(CentOS 要求内核版本不低于3.10):uname-aLinuxVM-8-2-centos3.10.0-1160.99.1.el7.x86_643.如果之前安装过旧版本的Docker,可以使用下面命令卸载://换行拼接符号“\”......
  • 安装docker
    卸载docker删除docker所在目录rm-rf/etc/dockerrm-rf/run/dockerrm-rf/var/lib/dockershimrm-rf/var/lib/docker删除docker进程ps-ef|grepdockerkill-9pid卸载docker相关包yumlistinstalled|grepdockeryumremovecontainerd.io.x86_......
  • docker安装nginx
    下载nginx镜像dockerpullnginx:1.24.0简易启动nginxdockerrun-p81:80-d--namesimple-nginxnginx:1.24.0创建本地挂载文件夹#创建四个文件夹conf,log,html,conf.dmkdir-p/home/nginx/{conf,logs,html,conf.d}复制简易nginx中的文件到挂载目录中#复制......
  • js中结束多层for循环
     关键字break和continue都是结束循环的作用,但是它只能结束它外面的第一层循环,如果代码里面是一层一层又一层的循环,你想直接结束最外层循环就需要outer了。outer:for(inti=0;i<10;i++){for(intj=0;j<10;j++){if(j==0){......
  • python的orjson
    简介首先我们先来了解下orjson的优缺点:可以将datetime、date和time实例序列化为RFC3339格式,例如:"2022-06-12T00:00:00+00:00"序列化numpy.ndarray实例的速度比其他库快4-12倍,但使用的内存更少,约为其他库的1/3左右输出速度是标准库的10到20倍序列化的结果是bytes类型,而不是......
  • Docker 开启远程端口访问2375
    开启方法:1、修改/etc/default/docker下的配置cat/etc/default/dockerDOCKER_OPTS="-Htcp://0.0.0.0:2375"systemctlrestartdocker2、修改/usr/lib/systemd/system/docker.service配置cat/usr/lib/systemd/system/docker.service[Service]ExecStart=/usr/bin/dockerd-Htc......
  • docker-compose 部署 harbor 镜像仓库
    1、安装docker(这个就不写了,可以看)略......2、安装docker-compose[root@master2~]#curl-L"https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname-s)-$(uname-m)"-o/usr/local/bin/docker-compose[root@master2~]#chmod+x/usr/loc......
  • 取巧解决js eval()计算精度丢失问题
    javaScript中存在小数点精度丢失的问题是由于其使用的浮点数表示方式。JavaScript采用的是双精度浮点数表示法,也称为IEEE754标准,它使用64位来表示一个数字,其中52位用于表示有效数字,而其他位用于表示符号、指数和特殊情况。由于使用有限的位数来表示无限的小数,JavaScript无法准确......