前端自动化部署【四】:docker构建发布

  • 基本的Linux、docker操作不再详细介绍
  • 水平有限,如有不足见谅

1. vscode打开前端项目,在根目录创建Dockerfile

js 复制代码
# build stage
# 开启一个node:18容器命名production-stage
FROM node:18 as build-stage
# 创建一个工作目录
WORKDIR /app
# 拷贝项目内容到app目录
COPY . .
# 安装依赖
RUN npm install --registry=https://registry.npm.taobao.org
# 构建dist
RUN npm run build

# production stage
# 开启一个nginx容器命名production-stage
FROM nginx as production-stage
# 将打包的文件拷贝到nginx对应静态文件目录
COPY --from=build-stage /app/dist /usr/share/nginx/html
# 暴露端口80
EXPOSE 80
# 启动nginx
CMD ["nginx", "-g", "daemon off;"]

2.添加.dockerignore文件,这样执行COPY命令会忽略没用的问价比如node_modules等

shell 复制代码
# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
node_modules
.DS_Store
dist

# node-waf configuration
.lock-wscript

# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
.dockerignore
Dockerfile
*docker-compose*

# Logs
logs
*.log

# Runtime data
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*
pids
*.pid
*.seed
.git
.hg
.svn

3.接着配置shell命令所需要的参数,一共四个:容器名称、容器端口、镜像名字、镜像版本

4.

bash 复制代码
#!/bin/bash
CONTAINER=${container_name}
PORT=${port}
# CONTAINER是否存在,若存在,若不存在,说明首次发版
if [[ -n $(docker ps -q -f "name=^${CONTAINER}$") ]];then
    #说明是更新发版,需要停止容器,删除容器
    echo "container exist"
    docker stop $CONTAINER
    docker rm $CONTAINER
else
	echo "container not exist"
fi
#构建镜像
 docker build --no-cache -t ${image_name}:${tag} .
#启动镜像生成容器
 docker run -d --name $CONTAINER -p $PORT:80 ${image_name}:${tag}

5.

6. 回到浏览器访问阿里云公网IP:1234,已经可以看到页面了

注意nginx内部默认端口是80,我们在DOCKERFILE里面的配置1234,然后在shell里面启动命令式docker run -d --name $CONTAINER -p $PORT:80 ${image_name}:${tag},也就是服务器端口1234指向了nginx内部的80,

7. 初次发版(访问失败就去Jenkins所在的服务器安全组添加1234,前面有讲)

8.最后一步,回到vscode,随便修改内容,然后push代码,等待Jenkins构建完成 ,刷新页面

9.累死累活,终于看见页面,完结撒花🌺

相关推荐
x-cmd14 分钟前
[x-cmd] 一切 Web、桌面应用和本地工具皆可 CLI -opencli
前端·ai·github·agent·cli·x-cmd
南山love38 分钟前
spring-boot项目实现发送qq邮箱
java·服务器·前端
.柒宇.1 小时前
基于 RHEL 9.7 搭建 Kubernetes v1.34 集群实战:Docker 运行时 (cri-dockerd) 与国内源配置详解
docker·云原生·容器·kubernetes·kubelet
F1FJJ1 小时前
Shield CLI:MySQL 插件 vs phpMyAdmin:轻量 Web 数据库管理工具对比
前端·网络·数据库·网络协议·mysql·容器
李明卫杭州1 小时前
JavaScript 严格模式下 arguments 的区别
前端·javascript
钟智强1 小时前
从2.7GB到481MB:我的Docker Compose优化实战,以及为什么不能全信AI
后端·docker
swipe1 小时前
向量数据库实战:为什么 AI Agent 离不开 Milvus
前端·面试·agent
小锋学长生活大爆炸1 小时前
【教程】Edge浏览器中可以提升性能的flags
前端·edge
苍舒墨1 小时前
如何借助Github pages部署React+vite静态前端项目
前端
曹牧2 小时前
JSON 数组的正确使用方式
java·服务器·前端