说明
这里使用的不是Jenkins,因为本人自己服务器资源有限,所以使用的是线上工具《云效》,整体用下来还是比较舒服的,接下来开始步入正题。
云效地址
作者作为个人开发者,但凡填写企业,必然是笔名=企业
新建流水线
点击新建流水线,选择构建镜像
配置流水线
流水线源
选择代码仓库
添加服务并授权
如果没有添加服务连接,点击添加服务连接按钮
需要服务授权,点击新建,会跳转到仓库平台进行授权,如:
接下来选择仓库和分支,点击添加:
构建镜像
这里我们不需要测试的构建,所以删除掉就好,如:
删除完后我们点击阿里云镜像构建:
变量
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版本不对,如果还有什么问题可以直接联系人工客服,真的挺不错,确实帮我理清了问题思路