超简单图文并茂基于Linux使用Docker部署Node.js项目

2023-05-16

一看就懂图文并茂基于CentOS Linux release 7.8.2003 (Core)安装并Docker化你的Node.js应用

@[TOC](基于CentOS Linux release 7.8.2003 (Core)安装并使用Docker)

说明

  • 本文介绍如何在CentOS Linux release 7.8.2003部署并使用Docker。
  • 旨在使用最简单快速的办法,解决使用docker部署nodejs需求。

前提

你要有一个服务器哟~~
购买后打开就像这个下面这个样子

在这里插入图片描述

备注

  • 因为本来用的是阿里云服务器进行安装,Aliyun Linux 2.1903 LTS 64位操作系统的ECS实例,后期遇到一些问题,查詢很多資料按照資料操作,但是問題暂时还未解决,所以用了同事的服务器进行再次安装
  • 具体配置情况如下
  • 查看Linux 内核
uname -a
cat /proc/version

在这里插入图片描述

  • 查看当前系统版本的详细信息
1.cat /etc/redhat-release(此方法只适合Redhat 系的Linux)
2.lsb_release -a (此命令适用于所有的Linux 发行版本)

在这里插入图片描述

步骤一:链接服务器

  1. 链接成功后如下图所示,如果不知道如何链接,可以参考(这个地址)
    在这里插入图片描述
  2. 依次运行以下命令添加yum源。
yum update
yum install epel-release -y
yum clean all
yum list

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 安装并运行Docker。
yum install docker-io -y
systemctl start docker

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 解决报错,查看错误信息:(備註,如果你用的CentOS Linux可以直接跳過這一步,一般沒有下面問題)
    在这里插入图片描述
[root@iZ2ze67ifeuz62igol9apzZ ~]# docker -v
Docker version 1.13.1, build 4ef4b30/1.13.1
[root@iZ2ze67ifeuz62igol9apzZ ~]#  systemctl status docker.service -l
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 日 2020-06-28 15:31:55 CST; 6min ago
     Docs: http://docs.docker.com
  Process: 24481 ExecStart=/usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTIONS $ADD_REGISTRY $BLOCK_REGISTRY $INSECURE_REGISTRY $REGISTRIES (code=exited, status=1/FAILURE)
 Main PID: 24481 (code=exited, status=1/FAILURE)

628 15:31:54 iZ2ze67ifeuz62igol9apzZ systemd[1]: Starting Docker Application Container Engine...
628 15:31:54 iZ2ze67ifeuz62igol9apzZ dockerd-current[24481]: time="2020-06-28T15:31:54.799852050+08:00" level=warning msg="could not change group /var/run/docker.sock to docker: group docker not found"
628 15:31:54 iZ2ze67ifeuz62igol9apzZ dockerd-current[24481]: time="2020-06-28T15:31:54.800671443+08:00" level=info msg="libcontainerd: new containerd process, pid: 24490"
628 15:31:55 iZ2ze67ifeuz62igol9apzZ dockerd-current[24481]: time="2020-06-28T15:31:55.813485177+08:00" level=error msg="'overlay' not found as a supported filesystem on this host. Please ensure kernel is new enough and has overlay support loaded."
628 15:31:55 iZ2ze67ifeuz62igol9apzZ dockerd-current[24481]: time="2020-06-28T15:31:55.814654057+08:00" level=error msg="'overlay' not found as a supported filesystem on this host. Please ensure kernel is new enough and has overlay support loaded."
628 15:31:55 iZ2ze67ifeuz62igol9apzZ dockerd-current[24481]: Error starting daemon: error initializing graphdriver: devicemapper: Error running deviceCreate (CreatePool) dm_task_run failed
628 15:31:55 iZ2ze67ifeuz62igol9apzZ systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
628 15:31:55 iZ2ze67ifeuz62igol9apzZ systemd[1]: Failed to start Docker Application Container Engine.
628 15:31:55 iZ2ze67ifeuz62igol9apzZ systemd[1]: Unit docker.service entered failed state.
628 15:31:55 iZ2ze67ifeuz62igol9apzZ systemd[1]: docker.service failed.

解决方案如下
卸载老版本的 docker 及其相关依赖

# 1、先查询所有安装的包

yum list installed | grep docker*
# 或者
rpm -qa docker*
# 2、删除查询出来的包

# 一般情况会有一个
yum remove -y docker-ce
# 18.09新增了cli工具
yum remove -y docker-ce-cli
# 3、删除镜像文件

rm -rf /var/lib/docker
rm -rf /var/lib/docker*

升级linux内核,重新安装docker:

#查看已经安装的和未安装的软件包组,来判断我们是否安装了相应的开发环境和开发库;
yum grouplist
#一般是安装这两个软件包组,这样做会确定你拥有编译时所需的一切工具
yum groupinstall "Development Tools"
#你必须这样才能让 make *config 这个指令正确地执行
yum install ncurses-devel
#如果你没有 X 环境,这一条可以不用
yum install qt-devel
#创建 CentOS-6 内核时需要它们
yum install hmaccalc zlib-devel binutils-devel elfutils-libelf-devel 
  • 不好意思,上面的报错一直没有解决,找了许多方法去处理,但是始终是没有结果,于是我换了同事的服务器按照以上步骤安装。
  • 下面的内容均基于CentOS Linux release 7.8.2003 (Core)
  1. 查看安装版本,启动 docker
docker version
systemctl start docker

在这里插入图片描述
在这里插入图片描述
6. 验证是否安装成功

docker info

在这里插入图片描述
7. 设置开机启动

 chkconfig docker on

在这里插入图片描述

配置Docker

  1. 切换国内镜像源, 加速访问 Docker Hub
echo "OPTIONS='--registry-mirror=https://mirror.ccs.tencentyun.com'" >> /etc/sysconfig/docker
systemctl daemon-reload
service docker restart

在这里插入图片描述
2. 安装配置node环境

docker search node
docker pull docker.io/node:7.8.0

在这里插入图片描述
在这里插入图片描述

  1. 在自己喜欢的目录里创建Dockerfile文件
[root@VM_0_5_centos ~]# cd /var/opt/test
[root@VM_0_5_centos test]# ll
总用量 0
[root@VM_0_5_centos test]# touch Dockerfile

在这里插入图片描述
在这里插入图片描述

  1. 假设Node.js应用的启动命令为node server.js, 监听端口为8090
# 可以指定依赖的node镜像的版本 node:<version>,如果不指定,就会是最新的
FROM node
WORKDIR /app

# 把其他源文件复制到工作目录
COPY ./app /app
# 把 package.json,package-lock.json(npm@5+) 或 yarn.lock 复制到工作目录(相对路径)
RUN npm install
# 只安装dependencies依赖
# 替换成应用实际的端口号
EXPOSE 8090
# 这里根据实际起动命令做修改
CMD [ "node", "server.js" ]


在这里插入图片描述
5. 补充.dockerignore

touch .dockerignore

.dockerignore内容如下

node_modules
npm-debug.log

在这里插入图片描述
在这里插入图片描述
6. 创建镜像

docker build -t node78:v1 .

在 Docker 守护进程执行 Dockerfile 中的指令前,首先会对 Dockerfile 进行语法检查,有语法错误时会返回:(如果按照上面的Dockerfile配置文件,不会报这个错,配置文件是后期修改过的,又重新截图的哦~)

[root@VM_0_5_centos test]# docker build -t node78:v1 .
Sending build context to Docker daemon 3.584 kB
Error response from daemon: Unknown instruction: ​:
  1. 查看镜像
docker images
​
# 示例输出
REPOSITORY                      TAG        ID              CREATED
node                            8          1934b0b038d1    5 days ago
${your_name}/${image_name}    latest     d64d3505b0d2    1 minute ago

在这里插入图片描述

  1. 嘗試一下docker run node不僅可以可以尋找鏡像,如果沒有它就幫助你下載最新的版本
    因为我下载的不是最新镜像,它自动开始搞最新啦
docker run node

在这里插入图片描述
9. 查看镜像

你會看到我們有倆鏡像了,一個最新版,一個是初始下載的版本.要是不想要後期可以刪除哦~
圖片裡的docker run 命令先不要執行哦~

docker image ls

在这里插入图片描述

  1. 准备一个简单的nodejs文件
var http = require('http');

http.createServer(function (request, response) {


    response.writeHead(200, { 'Content-Type': 'text/plain' });


    response.end('Hello World\n');
}).listen(8090);

console.log('Server running at http://127.0.0.1:8090/');

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 构建镜像,不要忘了後面還有一個點點哦
docker build -t docker.io/node:latest .

在这里插入图片描述

  • 启动容器脚本
docker run -d -p 8090:8090  docker.io/node:latest 

在这里插入图片描述
12. 测试,成功连接
在这里插入图片描述

至此恭喜,部署成功!

常用命令

  • 另外附一些常用命令:
# 查看所有容器(包括已终止的)
docker ps -a
# 或使用新命令
docker container ls -a
# 查看运行中的容器
docker ps
# 或使用新命令
docker container ls# 示例输出
ID            IMAGE                                COMMAND    ...   PORTS
ecce33b30ebf  ${your_name}/${image_name}:latest  npm start  ...   49160->8080
# 查看某容器内日志
docker logs -f ${container_id}
# 进入某容器,并有shell执行环境
# 进入容器
# -i表示:交互式操作,-t表示:终端
docker exec -it ${container_id} bash
# 可通过输入 exit 退出 
# 停止容器
docker container stop ${container_id}
# 启动已终止的容器
docker container start ${container_id}
#删除容器
docker container rm ${container_name || container_id}

#查看镜像
docker images
# 或使用新命令
docker image ls

#删除镜像
docker image rm ${image_id}

#其他命令
doctor run -it -d --name springboot -p 8080:8080 springboot:latest
-d 后台运行容器,并返回容器ID
-i  以交互模式运行容器,通常与-t同时使用
-t  为容器新分配一个伪输入终端,通常与i同时使用
-P  大写,随机端口映射,容器内部端口随机
-p 小写,指定端口映射,格式为: 主机端口:容器端口
--name 重命名
FROM 100.111.222.111/library/centos/jdk:1.8.0 -----OPEANJDK:8
从镜像下载JDK
FROM 是指需要仓库下载一个JDK的镜像作为底层系统,然后在该JDK上执行后面那些操作。

结语

本教程旨在快速完成Node.js项目部署,其他配置项詳細情況问题没有列举出来哦…后期有空会增加配置文章哟~~
欢迎大家指出文章需要改正之处~
如果有更好的方法,欢迎大家提出来,共同进步哟~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

超简单图文并茂基于Linux使用Docker部署Node.js项目 的相关文章

  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • 无法使用 Docker 运行 Strapi

    我正在尝试 Docker 化我的Strapi应用程序 所以首先在项目的根目录中我创建了一个 env文件包含以下内容 HOST 0 0 0 0 PORT 3002 然后 里面backend config server js I have mo
  • diff 文件仅比较每行的前 n 个字符

    我有2个文件 我们将它们称为 md5s1 txt 和 md5s2 txt 两者都包含a的输出 find type f print0 xargs 0 md5sum sort gt md5s txt 不同目录下的命令 许多文件被重命名 但内容保
  • 如何修复“iptables:没有该名称的链/目标/匹配”?

    我在我的 Linux 嵌入式系统上构建并安装了 iptables 如果我列出所有规则 则一切正常 iptables list Chain INPUT policy ACCEPT target prot opt source destinat
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • bluetoothctl 到 hcitool 等效命令

    在 Linux 中 我曾经使用 hidd connect mmac 来连接 BT 设备 但自 Bluez5 以来 这种情况已经消失了 我可以使用 bluetoothctl 手动建立连接 但我需要从我的应用程序使用这些命令 并且使用 blue
  • 如何从 AWS SAM 本地 docker 实例连接到主机 MySQL?

    我正在尝试使用调用我的 Lambda 函数sam local invoke但发现无法连接到我的主机MySQL 我尝试添加 docker network host但也无法连接 Traceback most recent call last F
  • 为什么我收到“无法进行二进制日志记录”的信息。在我的 MySQL 服务器上?

    当我今天启动 MySQL 服务器并尝试使用以下命令进行一些更改时用于 MySQL 的 Toad http www quest com toad for mysql 我收到此消息 MySQL 数据库错误 无法进行二进制日志记录 消息 交易级别
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • 创建 jar 文件 - 保留文件权限

    我想知道如何创建一个保留其内容的文件权限的 jar 文件 我将源代码和可执行文件打包在一个 jar 文件中 该文件将在使用前提取 人们应该能够通过运行批处理 shell 脚本文件立即运行示例和演示 然后他们应该能够修改源代码并重新编译所有内
  • 如何通过替换为空页映射来取消映射 mmap 文件

    Linux 用户空间有没有办法用空页面 映射自 dev null 或者可能是一个空页面 重复映射到从文件映射的页面的顶部 对于上下文 我想找到这个 JDK bug 的修复 https bugs openjdk java net browse
  • 如何检测并找出程序是否陷入死锁?

    这是一道面试题 如何检测并确定程序是否陷入死锁 是否有一些工具可用于在 Linux Unix 系统上执行此操作 我的想法 如果程序没有任何进展并且其状态为运行 则为死锁 但是 其他原因也可能导致此问题 开源工具有valgrind halgr
  • Logrotate - nginx 日志不在 docker 容器内旋转

    我有一个运行 nginx 的 docker 容器 它正在将日志写入 var log nginxLogrotate 安装在 docker 容器中 并且 nginx 的 logrotate 配置文件已正确设置 尽管如此 logrotate 仍不
  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 在docker容器中运行Jenkins有什么优势

    我发现了很多关于如何运行你的博客Jenkins in Docker但没有人真正解释这样做的好处 这是我发现的唯一原因 使用 Docker 的理由 https twasink net 2016 08 01 setting up a jenki
  • Docker - SequelizeConnectionRefusedError:连接 ECONNREFUSED 127.0.0.1:3306

    我正在尝试使用 Docker 容器启动并运行我的 Nodejs 应用程序 我不知道可能出了什么问题 当我使用控制台调试凭据时 凭据似乎已正确传递 另外启动sequel pro并使用相同的用户名和密码直接连接似乎也可行 当节点在容器中启动时
  • 连接被拒绝:当uwsgi和nginx在不同容器中时

    我正在尝试设置两个 docker 容器 是的 无需 docker compose 分开 一个带有 nginx 另一个带有带有基本 Flask 应用程序的 uwsgi 我在 docker 内的同一网络中运行容器我的 nginx 配置已添加 链
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 从多个开发机器管理远程 docker 机器

    可以从另一个工作站管理使用 docker machine 命令从一个开发人员工作站创建的 docker 机器吗 我不是在寻找涉及 docker swarm 的解决方案 而只是寻找涉及 docker machine 的解决方案 据我了解 当

随机推荐

  • onNewIntent使用遇到的坑

    onCreate是用来创建一个Activity也就是创建一个窗体 xff0c 但一个Activty处于任务栈的顶端 xff0c 若再次调用startActivity去创建它 xff0c 则不会再次创建 若你想利用已有的Acivity去处理别
  • CentOS7使用firewall-cmd打开关闭防火墙与端口

    一 centos7版本对防火墙进行加强 不再使用原来的iptables 启用firewalld 1 firewalld的基本使用 启动 xff1a systemctl start firewalld 查状态 xff1a systemctl
  • 算法数学基础-排列组合(题目取自牛客网)

    基础理论 xff1a 排列 有限集的子集按某种条件的序化法排成列 排成一圈 不许重复或许重复等 从n个不同元素中每次取出m xff08 1 m n xff09 个不同元素 xff0c 排成一列 xff0c 称为从n个元素中取出m个元素的无重
  • 关于对Spring框架的详解

    Spring框架 基本概念Spring的形成主要模块三层架构Spring的优点对于Spring 框架中都用到设计模式 xff1a 基本概念 Spring框架是由于软件开发的复杂性而创建的 Spring使用的是基本的JavaBean来完成以前
  • vs2015 提示严重性代码说明项目文件行禁止显示状态 错误C4996 'scanf': This function or variable may be unsafe.

    在 vs2015 中使用scanf时总是提示 unsafe 报出错误 xff0c 解决办法是在已经建立的项目中 xff0c 以后可能需要经常进行再不同的项目进行这项操作 xff1a 项目 gt 属性 gt c c 43 43 gt 常规 g
  • base7. ThreadPool线程池类——生产者与消费者模型

    ThreadPool类图 数据成员 xff1a MutexLock mutex xff1a 一个MutexLock类型的互斥变量mutex Condition cond xff1a 一个Condition类型的条件变量cond string
  • Ubuntu下anaconda中PyCharm遇到的环境问题

    Table of Contents 运行找不到包文件 可以run xff0c 不能debug 运行找不到包文件 解救办法 xff1a 将包的路径添加到interpreter中 可以run xff0c 不能debug 去掉setting中py
  • origin画图——同一图中多组数据

    origin画图 同一图中多组数据 xff08 2维 xff09 导入数据分别确定X Y轴列数据 xff08 选中列 set as X Y xff0c 全选数据 xff0c 点击下方绘图图标
  • pacman用法

    Pacman 是archlinux 下的包管理软件 它将一个简单的二进制包格式和易用的构建系统结合了起来 不管软件包是来自官方的 Arch 库还是用户自己创建 xff0c Pacman 都能方便得管理 pacman Sy abc 和源同步后
  • Spring注解-1-SpringBoot是如何处理注解的

    本文基于Spring 5 2 7 这是个很大的话题 xff0c 但是是个非常实在的话题 xff0c 注解天天用 xff0c 处处用 xff0c 请问你知道他是怎么起作用的吗 xff1f 如果你使用了注解 xff0c 那么一定有代码在什么地方
  • Qt对当前界面进行截图并保存

    Qt提供了对界面截图的功能 xff0c 非常简单 xff0c 只需要2行即可截图并保存下来 xff0c 如下 xff1a QPixmap pixMap 61 QPixmap grabWidget this pixMap save 34 my
  • Qt中通过Qpixmap设置图片透明度

    最近看到美图秀秀的一些功能 xff0c 可以手动设置图片的透明度并显示在其它图片上 xff0c 所以自己动手做了个小Demo xff0c 实际效果如下 xff1a xff08 图片仅供参考使用 xff09 可以看到拖动下方进度条 xff0c
  • QTableWidget中添加QComboBox/QPushButton控件并响应控件点击

    QTableWidget是QT程序中常用的显示数据表格的空间 xff0c 里面不仅仅可以添加文字 xff0c 也可以添加控件 xff0c 图片等等 xff0c 此处以添加QCombobox和QPushButton举例 xff0c 点击选择控
  • QMap的简单使用(增删改查等)

    前言 QMap是Qt提供的容器类 xff0c 是一种由key到value的映射 与C 43 43 中STL提供的map使用方法相同 xff0c 部分使用细节上 xff0c QMap做了优化 插入 QMap lt int QString gt
  • vector<char>与char*相互转换

    最近在做网络通信 xff0c 看到很多人使用vector lt char gt 来存储二进制网络数据 xff0c 而我有时需要用char 数据 xff0c 所以记录下二者的相互转换方法 xff0c 代码如下 xff1a include lt
  • Qt中自定义qDebug打印信息的宏(文件名,行数,时间等等)

    前言 QDebug类提供用于调试信息的输出流 当开发人员需要将调试或跟踪信息写到设备 xff0c 文件 xff0c 字符串或控制台时 xff0c 将使用QDebug 当我们使用qDebug 打印信息时 xff0c 只有我们所需要打印的信息
  • QT实现鼠标右键快捷菜单(QTableWidget)

    对于右键点击事件 xff0c 这里用到的是Qt CustomContextMenu方法 xff0c 本例通过右点QTableWidget xff0c 显示下拉菜单 xff0c 同时获得点击的行号 ui界面如下图 xff1a customCo
  • git使用遇到问题

    文中自己理解的偏多 xff0c 有错误的地方还请指正 xff08 会有很多错误 xff09 commit in detached head 解决办法 xff1a 进入到工程所在路径运行 git branch f master HEAD am
  • 从零开始学写脚本【第一天】

    废话我就不多说了 xff0c 直接开干 新建一个项目 安装 selenium selenium是浏览器自动化测试工具 控制台输入 pip install selenium 下载Chromedriver 浏览器驱动 xff0c 代码打开浏览器
  • 超简单图文并茂基于Linux使用Docker部署Node.js项目

    一看就懂图文并茂基于CentOS Linux release 7 8 2003 Core 安装并Docker化你的Node js应用 64 TOC 基于CentOS Linux release 7 8 2003 Core 安装并使用Dock