使用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
相关推荐
SelectDB15 小时前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
曲幽1 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
XIAOHEZIcode2 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220703 天前
如何搭建本地yum源(上)
运维
武子康3 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树886 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠6 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质6 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工6 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn866 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker