使用docker容器 将node应用程序打包成镜像

可以使得node服务应用程序可以通过流水线部署

安装docker

1、注意

我的服务器的系统是 centos7,所以这里写的是在centos7上按照的docker

注意:Docker 要求 CentOS 系统的内容版本高于3.10

uname -r打印:3.10.0-1160.105.1.el7.x86_64 //确定centos内核版本高于3.10后,接下来开始安装

2、安装所需软件包

1、安装依赖工具
sudo yum install -y yum-utils
2、添加 Docker YUM 存储库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3、安装 Docke
sudo yum install -y docker-ce docker-ce-cli containerd.io
4、验证docker是否安装成功
docker -v
Docker version 24.0.7, build afdd53b
5、启动docker
sudo systemctl start docker

或者安装指定docker版本

1、查看所有仓库中的docker版本
yum list docker-ce --showduplicates | sort -r
2、安装指定
# 这里安装的是最新版本
sudo yum install docker-ce
# 指定版本安装如下
sudo yum install docker-ce-19.03.09

1、进入项目

在这里插入图片描述

2、新增编辑docker文件

1、新增一个Dockerfile文件

touch Dockerfile //新增一个dockerfile

2、打开 Dockerfile文件

vim Dockerfile 

3、编辑 Dockerfile

按 a 键 进入编辑

4、dockerfile 代码如下

# FROM 表示设置要制作的镜像基于哪个镜像,FROM指令必须是整个Dockerfile的第一个指令,如果指定的镜像不存在默认会自动从Docker Hub上下载。
# 指定我们的基础镜像是node,latest表示版本是最新
#dockere镜像
FROM node:latest#拷贝当前node项目文件夹下所有文件到镜像的/root/wwwroot下
COPY . /root/wwwroot/#进入镜像/root/wwwroot文件夹下,安装对应的依赖
WORKDIR /root/wwwroot/# 容器对外暴露的端口号(我的nestjs运行的端口号是8213)
#这个端口是在访问这个node服务器的端口
#对外暴露的端口
EXPOSE 8213#安装依赖:通过npm安装依赖时,有时会报错,这时可以通过安装cnpm来安装依赖
RUN npm install cnpm -g --registry=https://registry.nlark.com
RUN cnpm install# 配置环境变量
# ENV HOST 0.0.0.0
# ENV PORT 3000# 我这个node程序启动服务的代码是server.js 因项目而异,这个代码是启动pm2服务的js哦: pm2 start **.js 哦
#启动程序
CMD node server.js

3、将node项目打包成镜像并运行

注意

要切换到 Dockerfile 所在的位置,如果创建完dockerfile文件没切过目录就不用动

1、生成node 项目镜像

# -t表示指定镜像的名字, . 点表示当前目录
# 用于构建一个名为 mynode 的镜像文件,并将其标签为 v1
[root@1111 austin-admin]# docker build -t mynode:v1 .

2、查看本地 docker的镜像

这个IMAGE ID 下面的这个id是你生成的node镜像

[root@1111 austin-admin]# docker images
REPOSITORY    TAG    IMAGE ID       CREATED        SIZE
mynodes       v1     a862a7dc9f4c   17 hours ago   1.22GB

3、运行启动镜像

-d 表示后台运行

-p 表示指定端口映射 (8213:8002)表示(本机端口:容器端口);【8213是我的nodejs项目中的 dockerfile 代码文件中监听的访问端口,也是容器对外暴露的端口,(也就是dockerfile 文件的代码端口: EXPOSE 3000)】,【8002 则是我 node 项目程序中 server.js 的中的端口号,(也就是node 服务程序起的端口号)】

镜像名后面的:v1 表示打标签号

docker run -d -p 8213:8002 mynodes:v1
运行结果
[root@aaZZ austin-admin]# docker run -d -p 8213:8002 mynodes:v1
4fa6ea1a2a3d1w2e1rs1daf1a2b3c5b18db1a2v2va3b3f6fa5305584c832160f9c410d83
查看容器的运行情况
[root@1131231334 austin-admin]#  docker ps
CONTAINER ID  IMAGE       COMMAND                 CREATED        STATUS        PORTS           					NAMES
6f4a6e2a2568a2b  mynodes:v1  "docker-entrypoint.s…"  2 minutes ago  Up 2 minutes  8213/tcp, 0.0.0.0:8213->8002/tc    kind_payne
访问

通过浏览器访问node容器项目,ip是服务器的ip,端口是对外暴露的端口

http://11.11.11.7:8213/#/crud/list  

4、关闭运行的容器

1、关闭

docker stop 6f4a6e2a2568a2b

2、重新开启

如果是通过stop关闭的不要使用 docker run来启动,使用start

docker start 6f4a6e2a2568a2b

3、想一键删除所有

将你要删除 将下面的 mynode 关键词替换成你要删除的 docker

docker ps -a | egrep '^mynode\:*{1,9}' | awk '{print $1}' | xargs -r docker stop && docker ps -a | egrep '^mynode\:*{1,9}' | awk '{print $1}' | xargs -r docker rm && docker images | egrep '^mynode\:*{1,9}'| awk '{print $3}' | xargs -r docker rmi -f 

4、单个删除

删除docker 的容器

docker rm 容器id

删除docker 的镜像

docker rmi 镜像id

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/645001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode刷题(剑指offer) 240.搜索二维矩阵Ⅱ

240.搜索二维矩阵Ⅱ 编写一个高效的算法来搜索 *m* x *n* 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,…

27.移除元素(力扣LeetCode)

文章目录 27.移除元素(力扣LeetCode)题目描述方法一:vector成员函数:erase方法二:暴力解法方法三:双指针法 27.移除元素(力扣LeetCode) 题目描述 给你一个数组 nums 和一个值 val&…

[每日一题] 01.24 - 求三角形

求三角形 n int(input()) count1 (1 n) * n // 2 count2 n * n lis1 [str(i).zfill(2) for i in range(1,count1 1)] lis2 [str(i).zfill(2) for i in range(1,count2 1)]for i in range(0,len(lis2),n):print(.join(lis2[i:i n]))print()for i in range(1,n 1):tem…

代码中遇到的问题

编译器错误消息: CS1061: default_aspx 不包含 GridView1_SelectedIndexChanged 的定义,并且找不到接受类型为default_aspx的第一个参数的可访问扩展方法GridView1_SelectedIndexChanged(是否缺少 using 指令或程序集引用&#xf…

[笔记]Spring AOP

Spring AOP(Aspect Oriented Programming) AOP将应用程序分为核心业务和非核心的公共功能,AOP的关注点是系统中的非核心的公共功能; AOP可以通过预编译或者运行期动态代理的方式,为横跨多个对象(没有继承关…

UCAS-AOD遥感旋转目标检测数据集——基于YOLOv8obb,map50已达96.7%

1.UCAS-AOD简介 1.1数据说明 遥感图像,又名高分辨率遥感图像。遥感图像的分类依据是根据成像的介质不同来进行分类的。UCAS-AOD (Zhu et al.,2015)用于飞机和汽车的检测,包含飞机与汽车2类样本以及一定数量的反例样本(背景&…

【立创EDA-PCB设计基础】6.布线铺铜实战及细节详解

前言:本文进行布线铺铜实战及详解布线铺铜的细节 在本专栏中【立创EDA-PCB设计基础】前面完成了布线铺铜前的设计规则的设置,接下来进行布线 布局原则是模块化布局(优先布局好确定位置的器件,例如排针、接口、主控芯片&#xff…

k8s-基础知识(Pod,Deployment,ReplicaSet)

k8s职责 自动化容器部署和复制随时扩展或收缩容器容器分组group,并且提供容器间的负载均衡实时监控,即时故障发现,自动替换 k8s概念及架构 pod pod是容器的容器,可以包含多个container pod是k8s最小可部署单元,容器…

基于python和定向爬虫的商品比价系统实现

目录 前言 一、系统设计 1. 系统需求分析 2. 系统设计思路 二、系统实现 1. 爬虫部分 2. 比价部分 3. 完整系统代码 三、系统优化 1. 多线程爬取 2. 引入数据库 四、总结 前言 商品比价系统是一种可以帮助用户快速找到最优价格商品的系统。本文将介绍如何使用pyth…

查询文件hash值

查询文件hash值 1 Windows 查询文件hash值1.1 certutil -hashfile 文件名 2 Linux 环境查询文件hash值2.1 sha256sum 文件名2.2 md5sum 文件名 1 Windows 查询文件hash值 在某些环境要对比两个文件是否完全一致 1.1 certutil -hashfile 文件名 certutil -hashfile C:\Users\…

【C++ 自写String】

CString.hpp #include <iostream> #include <string.h>#pragma warning(disable:4996) using namespace std;class CString { private:int len;char* data;public:CString():data(nullptr),len(0) {cout << "0空构造\n";}CString(const char* _da…

计算机服务器中了mallox勒索病毒解密方案计划,勒索病毒解密措施

计算机技术的不断应用与发展&#xff0c;为企业的生产运营提供了有利条件&#xff0c;但网络安全威胁无处不在。近期&#xff0c;广西某生物制药企业的计算机服务器遭到了mallox勒索病毒攻击&#xff0c;导致企业的计算机所有重要数据被加密&#xff0c;严重影响企业的生产运营…

【jetson笔记】torchaudio报错

原因是因为pip安装的包与jetson不兼容导致 自己安装或者cmake编译也会报错 需要拉取官方配置好的docker镜像 拉取docker镜像 具体容器可以看官网&#xff0c;按照自己需求拉取即可 https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-ml 如果其他包不需要只需要torc…

2024区块链应用最趋势,RWA实物资产化

作者 张群&#xff08;赛联区块链教育首席讲师&#xff0c;工信部赛迪特聘资深专家&#xff0c;CSDN认证业界专家&#xff0c;微软认证专家&#xff0c;多家企业区块链产品顾问&#xff09;关注张群&#xff0c;为您提供一站式区块链技术和方案咨询。 实物资产通证化&#xff0…

Conda python运行的包和环境管理 入门

Conda系列&#xff1a; 翻译: Anaconda 与 miniconda的区别Miniconda介绍以及安装 Conda 是一个功能强大的命令行工具&#xff0c;用于在 Windows、macOS 和 Linux 上运行的包和环境管理。 本 conda 入门指南介绍了启动和使用 conda 创建环境和安装包的基础知识。 1. 准备…

解决Android Studio gradle下载超时和缓慢问题(win10)

解决超时问题 一般配置阿里云代理就可以解决。 具体配置方法&#xff0c;参考&#xff1a;https://blog.csdn.net/zhangjin1120/article/details/121739782 解决下载缓慢问题 直接去腾讯云镜像下载&#xff1a; https://mirrors.cloud.tencent.com/gradle/ 下载好了之后&…

Spring 的 IOC 和 AOP

题目 Spring 的 IOC 和 AOP 推荐解析 IOC 是什么&#xff1f; IoC&#xff08;Inversion of Control&#xff09; 控制反转&#xff0c;是一种常见的设计思想&#xff0c;主要就是将手动创建对象的控制权&#xff0c;交给 Spring 框架来管理。 为什么需要存在一个容器&…

SpringCloud Alibaba Sentinel 与 SpringCloud Gateway 的限流有什么差别?(三种限流算法原理分析)

目录 一、Sentinel 与 Gateway 的限流有什么差别&#xff1f; 1.1、前置知识 - 四种常见的限流算法 1.1.1、Tips 1.1.2、计数器算法 1&#xff09;固定窗口计数器算法 2&#xff09;滑动窗口计数器算法 1.1.3、令牌桶算法 1.1.4、漏桶算法 1.2、解决问题 一、Sentinel…

Qt Designer教程

文章目录 创建一个 ui 文件选择控件Qt Designer基本控件介绍1、Layouts1.1、Layouts 布局1.2、参数配置 2、Spacers2.1、 Spacers 弹簧介绍2.2、 参数设置 3、Buttons 按键3.1、 Buttons 按键分类 4、Item Views&#xff08;Model-Based&#xff09; 项目视图(基于模型)4.1、 B…

12.for 条件循环语句 (3)

for 循环语句 允许脚本一次性读取多个信息&#xff0c;然后逐一对信息进行操作处理。当要处理的数据有范围时&#xff0c;使用for循环语句。 使用 for 循环语句从列表文件中读取多个用户名&#xff0c;然后为其逐一创建用户账户并设 置密码。首先创建用户名称的列表文件users.…