使用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 代码如下

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 项目镜像

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

2、查看本地 docker的镜像

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

dockerfile 复制代码
[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
运行结果
dockerfile 复制代码
[root@aaZZ austin-admin]# docker run -d -p 8213:8002 mynodes:v1
4fa6ea1a2a3d1w2e1rs1daf1a2b3c5b18db1a2v2va3b3f6fa5305584c832160f9c410d83
查看容器的运行情况
dockerfile 复制代码
[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
相关推荐
做一个AC梦2 分钟前
Docker安装失败:Docker Desktop installation failed
运维·docker·容器
Shan12053 分钟前
浅谈Docker Kicks in的应用
运维·docker·容器
Li&&Tao7 分钟前
docker 常用命令
docker·容器·eureka
Jiude2 小时前
MinIO 社区版被故意阉割,Web管理功能全面移除。我来试试国产RustFS
后端·docker·架构
飞询2 小时前
Docker 安装 Elasticsearch 9
elasticsearch·docker
Tipriest_3 小时前
Ubuntu常用的软件格式deb, rpm, dmg, AppImage等打包及使用方法
linux·运维·ubuntu
真智AI3 小时前
利用 Claude Opus 4 自动化 GitHub 工作流:从安装到实战详解
运维·自动化·github
胡斌附体4 小时前
linux测试端口是否可被外部访问
linux·运维·服务器·python·测试·端口测试·临时服务器
愚润求学4 小时前
【Linux】自旋锁和读写锁
linux·运维
大锦终4 小时前
【Linux】常用基本指令
linux·运维·服务器·centos