当前位置: 首页 > news >正文

Jenkins pipeline 部署docker通用模板

Jenkinsfile: 

 Docker的NETWORK_NAME不要使用bridge默认网络,要使用自定义的网络如test

  • 默认 bridge 网络:容器间不能用名字互相访问,只能用 IP。
  • 自定义网络:容器间可以用名字互相访问,Docker 自动做了 DNS 解析。
pipeline {agent anyenvironment {// 定义镜像名称和标签作为环境变量IMAGE_NAME = 'my-application' IMAGE_TAG = 'latest'CONTAINER_NAME = 'my-app-container'VOLUME_NAME = 'app-data-volume'NETWORK_NAME = 'test'  // 使用自定义网络名称HOST_PORT = '8080'CONTAINER_PORT = '8080'}stages {stage('检查运行中的容器') {steps {script {// 检查容器是否存在并移除try {sh "docker container inspect ${CONTAINER_NAME}"echo "容器 ${CONTAINER_NAME} 已存在。正在停止并移除..."sh "docker container stop ${CONTAINER_NAME}"sh "docker container rm ${CONTAINER_NAME}"} catch (Exception e) {echo "未找到名为 ${CONTAINER_NAME} 的容器。"}// 检查镜像是否存在并移除try {sh "docker image inspect ${IMAGE_NAME}:${IMAGE_TAG}"echo "镜像 ${IMAGE_NAME}:${IMAGE_TAG} 已存在。正在移除..."sh "docker rmi ${IMAGE_NAME}:${IMAGE_TAG} -f"} catch (Exception e) {echo "未找到镜像 ${IMAGE_NAME}:${IMAGE_TAG}。"}}}}stage('创建 Docker 卷') {steps {script {// 检查卷是否存在,不存在则创建try {sh "docker volume inspect ${VOLUME_NAME}"echo "卷 ${VOLUME_NAME} 已存在。"} catch (Exception e) {echo "正在创建卷 ${VOLUME_NAME}..."sh "docker volume create ${VOLUME_NAME}"}}}}stage('构建 Docker 镜像') {steps {script {// 构建 Docker 镜像echo "正在构建 Docker 镜像 ${IMAGE_NAME}:${IMAGE_TAG}..."sh "docker build -t ${IMAGE_NAME}:${IMAGE_TAG} ."}}}stage('运行 Docker 容器') {steps {script {// 运行 Docker 容器,挂载卷并映射端口echo "正在启动容器 ${CONTAINER_NAME}..."sh """docker run -d \--name ${CONTAINER_NAME} \-p ${HOST_PORT}:${CONTAINER_PORT} \-v ${VOLUME_NAME}:/app/data \--network ${NETWORK_NAME} \${IMAGE_NAME}:${IMAGE_TAG}"""}}}stage('清理') {steps {script {// 移除未使用的镜像echo "正在清理未使用的 Docker 镜像..."sh "docker image prune -f"}}}}post {success {echo "部署成功!"echo "应用程序可通过 http://<服务器IP>:${HOST_PORT} 访问"}failure {echo "部署失败!"}always {echo "流水线执行完成。"}}
}

Dockerfile: 

# 使用官方 Python 基础镜像(轻量级版本)
FROM python:3.10-slim# 设置工作目录
WORKDIR /app# 先复制依赖文件,以便利用 Docker 缓存层
COPY requirements.txt .# 设置 pip 使用国内镜像源加速下载(可根据需要修改或删除)
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple# 安装依赖(使用 --no-cache-dir 减少镜像大小)
RUN pip install --no-cache-dir -r requirements.txt# 复制项目所有文件(放在依赖安装之后,以便代码变更不影响依赖层缓存)
COPY . .# 暴露应用端口(根据实际应用修改)
EXPOSE 8080# 设置容器启动命令(根据实际应用修改)
CMD ["python", "app.py"]

http://www.lryc.cn/news/592812.html

相关文章:

  • 网关-微服务网关入门
  • 《Qt数据库》知识点实践
  • VisualXML全新升级 | 新增BusLoad计算
  • 在 OpenSUSE Tumbleweed 和 Leap 上安装 VirtualBox
  • ChatGPT Agent:统一端到端Agentic模型的技术革新与行业影响
  • Sui 在非洲增长最快的科技市场开设 SuiHub Lagos 以推动创新
  • 质变科技亮相可信数据库发展大会,参编《数据库发展研究报告2025》
  • 读书笔记:《动手做AI Agent》
  • 飞算科技:以创新科技引领数字化变革,旗下飞算 JavaAI 成开发利器
  • 软件工程中的《资本论》
  • KRaft 角色状态设计模式:从状态理解 Raft
  • Redis学习其二(事务,SpringBoot整合,持久化RDB和AOF)
  • java基础——面向对象04(继承)
  • 通俗易懂:什么是决策树?
  • STM32-第七节-TIM定时器-3(输入捕获)
  • STL—— list迭代器封装的底层讲解
  • 小白学Python,网络爬虫篇(2)——selenium库
  • 2025年Flutter开发主流技术栈
  • Windows发现可疑的svchost程序
  • 怎么自己搭建云手机
  • Hive 向量化执行引擎 Vectorized Execution 常见 NPE 报错分析及解决
  • 域名WHOIS信息查询免费API使用指南
  • HIVE实战处理(二十四)留存用户数
  • 专题:2025智能体研究报告|附70份报告PDF、原数据表汇总下载
  • 线程控制:互斥与同步
  • math.h函数
  • 深度学习零基础入门(3)-图像与神经网络
  • 需求变更频繁?构建动态估算机制四大要点
  • 短视频矩阵系统:选择与开发的全面指南
  • nastools继任者?极空间部署影视自动化订阅系统『MediaMaster』