使用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
相关推荐
AI云原生21 小时前
如何使用Docker快速运行Firefox并实现远程访问本地火狐浏览器的教程
运维·docker·云原生·容器·serverless·firefox·kubeless
今生相伴9911 天前
ELFK:企业级日志管理的完整解决方案——从入门到精通
运维·elk·elasticsearch
小猪咪piggy1 天前
【JavaEE】(24) Linux 基础使用和程序部署
linux·运维·服务器
IT 小阿姨(数据库)1 天前
PgSQL中pg_stat_user_tables 和 pg_stat_user_objects参数详解
linux·运维·数据库·sql·postgresql·oracle
❀͜͡傀儡师1 天前
Docker部署搜索引擎SearXNG
运维·docker·容器·searxng
泡沫冰@1 天前
K8S集群管理(3)
云原生·容器·kubernetes
虎头金猫1 天前
如何在Linux上使用Docker在本地部署开源PDF工具Stirling PDF:StirlingPDF+cpolar让专业操作像在线文档一样简单
linux·运维·ubuntu·docker·pdf·开源·centos
麦兜*1 天前
MongoDB 常见错误解决方案:从连接失败到主从同步问题
java·数据库·spring boot·redis·mongodb·容器
荣光波比1 天前
Nginx 实战系列(七)—— Nginx一键安装脚本详解
运维·nginx·自动化·云计算
sinat_602035361 天前
模块与包的导入
运维·服务器·开发语言·python