爽!nest自动化部署docker保姆教程

419 阅读3分钟

说明

这里使用的不是Jenkins,因为本人自己服务器资源有限,所以使用的是线上工具《云效》,整体用下来还是比较舒服的,接下来开始步入正题。

云效地址

作者作为个人开发者,但凡填写企业,必然是笔名=企业

flow.aliyun.com

新建流水线

点击新建流水线,选择构建镜像

配置流水线

流水线源

选择代码仓库

添加服务并授权

如果没有添加服务连接,点击添加服务连接按钮

需要服务授权,点击新建,会跳转到仓库平台进行授权,如:

接下来选择仓库和分支,点击添加:

构建镜像

这里我们不需要测试的构建,所以删除掉就好,如:

删除完后我们点击阿里云镜像构建:

变量

docker部署

主机组

部署脚本

这里就用到了我们刚刚配置的变量,这样是不是就对起来了,可以自动操作了

 #停止并删除容器
 echo 停止并删除容器:${projectName} 
 docker ps -a | grep ${imageUrl} | awk '{print $1}' | xargs docker rm -f
 
 #删除镜像
 echo 删除镜像: ${imageUrl}:unknown
 docker images | grep ${imageUrl} | awk '{print $3}' | xargs docker rmi
 
 #拉取镜像
 echo 拉取新镜像:${imageUrl}:${projectName}-${DATETIME}
 docker pull ${imageUrl}:${projectName}-${DATETIME}
 
 #创建容器并启动
 echo 启动容器:${projectName}
 docker run --name ${projectName} -p ${port}:${port} -d ${imageUrl}:${projectName}-${DATETIME}

运行

Dockerfile

FROM registry.cn-beijing.aliyuncs.com/yeke-admin/node:20.16

WORKDIR /usr/app

COPY package.json .

RUN npm config set registry https://registry.npmmirror.com

RUN npm install

COPY . .

RUN npm run build

EXPOSE 3001

CMD npm run start:dev-mac

阿里云node镜像相关

阿里云node镜像是16版本的,我们需要自己上传项目实际可用的node版本,例如我的项目node版本要求18+。

在dockerfile中FROM的node地址下载的时候可能因为网络原因会报错,所以我们需要借助阿里的地址。

如果你是windows系统,可以将node镜像下载到本地,然后推送到阿里云镜像仓库,如果你跟我一样是Mac的m系统,那么可以参考我的方法,通过Linux下载,推送到阿里云镜像仓库。

步骤

首先开通容器镜像服务(这是免费的)

我这里选择的是个人版

1. 创建空间

2. 创建仓库

点击下一步代后是选择代码源,这里如果你是GitHub可以直接配置,如果你的地址不在这些选择中的话,可以选择本地仓库,例如我这里使用的是Gitee

点击创建仓库后就会跳转到此仓库

3. 下载对应的node镜像

在你本地或者Linux中下载对应的node镜像

例如我这里下载的是node:20.16版本的镜像

docker pull node:20.16

下载完毕后查看镜像

docker images

4. 镜像推送至阿里云

就如镜像仓库基本信息中显示的一样,按照提示操作就好

先登陆

docker login --username=野克生金 registry.cn-beijing.aliyuncs.com

输入密码后打标签

docker tag node:20.16 registry.cn-beijing.aliyuncs.com/yeke-admin/node:20.16

然后推送

docker push registry.cn-beijing.aliyuncs.com/yeke-admin/node:20.16

推送成功后在刚刚创建的仓库中就会有记录了,这个就是你推送的镜像

5. 使用自定义镜像

这时候就可以在DockerFIle中将node地址改为自己上传的镜像地址了

FROM registry.cn-beijing.aliyuncs.com/yeke-admin/node:20.16
...
...

问题

其实云效中部署node docker大部分问题就是node版本镜像的问题,要么就是DockerFile中node地址是需要翻墙才能访问的,当然云效显然不能这么做,要么就是node版本不对,如果还有什么问题可以直接联系人工客服,真的挺不错,确实帮我理清了问题思路