使用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
相关推荐
wang_book1 小时前
Gitlab学习(007 gitlab项目操作)
java·运维·git·学习·spring·gitlab
prcyang2 小时前
Docker Compose
运维·docker·容器
蜗牛^^O^2 小时前
Docker和K8S
java·docker·kubernetes
脚踏实地的大梦想家2 小时前
【Docker】安装全流程与配置完整镜像源(可安装 nginx)
运维·docker·容器
Zww08913 小时前
docker部署个人网页导航
运维·docker·容器
运维小白。。3 小时前
Nginx 反向代理
运维·服务器·nginx·http
PeterJXL3 小时前
Docker-compose:管理多个容器
运维·docker·容器
海王正在撒网3 小时前
用 Docker 部署 Seafile 社区版
运维·docker·容器
xuanyu224 小时前
Linux常用指令
linux·运维·人工智能
KookeeyLena55 小时前
云手机可以挂在服务器使用吗?
运维·服务器·智能手机