可以使得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