【Docker系列】如何在 Docker 环境中部署和运行 One API

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 一、前置知识
    • 二、使用 Docker Compose 部署 One API
          • 启动服务
    • 三、使用 Docker Run 命令直接运行 One API 容器
          • 命令参数解析

随着技术的发展,API 作为服务连接的桥梁,变得越来越重要。One API 是一种流行的 API 管理平台,能够帮助我们更好地管理、监控和扩展 API 服务。

一、前置知识

在进入具体操作之前,我们需要了解一些背景知识:

  1. Docker:Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个轻量级的容器中,从而使应用程序可以在任何地方一致地运行。
  2. Docker Compose:Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过 Docker Compose 文件(通常命名为 docker-compose.yml),可以在一个文件中定义多个服务,并通过一条命令启动这些服务。
  3. One API:One API 是一个 API 网关平台,它能够帮助开发人员更轻松地管理 API 请求,提供统一的 API 接口、请求路由以及安全管理。

二、使用 Docker Compose 部署 One API

在 Docker Compose 中,我们可以定义 One API 服务和其相关的配置。以下是一个典型的 docker-compose.yml 配置:

one-api:
  container_name: one-api
  image: one-api:latest
  restart: always
  command: --log-dir /app/logs
  ports:
    - "3000:3000"
  volumes:
    - ./volumes/one-api/data:/data
    - ./volumes/one-api/logs:/app/logs
    - ./volumes/data-gym-cache:/tmp/data-gym-cache
  environment:
    - SQL_DSN=root:test2024@tcp(111.18.9.111:3306)/oneapi
    - SESSION_SECRET=random_string
    - TZ=Asia/Shanghai
  depends_on:
    mysql:
      condition: service_healthy
  healthcheck:
    test:
      [
        "CMD-SHELL",
        "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' | awk -F: '{print $2}'",
      ]
    interval: 30s
    timeout: 10s
    retries: 3

以上 docker-compose.yml 文件定义了一个名为 one-api 的服务,并设置了其依赖、端口、环境变量等配置项。下面我们详细解析该配置文件的各部分内容。

  1. container_name: 设置容器名称为 one-api,方便通过名字快速识别和管理容器。

  2. image: 指定了容器使用的镜像 one-api:latest,即 One API 的最新版本。

  3. restart: 设置为 always,意味着无论容器退出的原因是什么,Docker 都会自动重启容器,以确保服务的持续可用性。

  4. command: 通过命令 --log-dir /app/logs,将日志目录指定为 /app/logs

  5. ports: 将主机的 3000 端口映射到容器的 3000 端口,这样我们可以通过 http://localhost:3000 访问 One API 服务。

  6. volumes: 定义了多个数据卷,以便持久化存储数据和日志:

    • ./volumes/one-api/data:/data:将本地 ./volumes/one-api/data 目录挂载到容器中的 /data 目录,用于存储持久化数据。
    • ./volumes/one-api/logs:/app/logs:将日志文件挂载到本地 ./volumes/one-api/logs,便于日志管理和分析。
    • ./volumes/data-gym-cache:/tmp/data-gym-cache:将缓存数据存放在 ./volumes/data-gym-cache
  7. environment: 定义了几个环境变量:

    • SQL_DSN:用于连接数据库的 DSN 配置,格式为 user:password@tcp(host:port)/dbname
    • SESSION_SECRET:设置会话密钥,用于加密和验证会话。
    • TZ:时区设置为 Asia/Shanghai,确保日志时间等信息符合本地时区。
  8. depends_on: 该配置用于声明服务之间的依赖关系。例如,One API 依赖于 MySQL 数据库,depends_on 配置确保 MySQL 数据库在 One API 启动前处于健康状态。

  9. healthcheck: 定义了健康检查的命令和时间间隔:

    • test:健康检查的命令,使用 wget 请求 One API 的状态接口,检测返回结果中是否包含 "success": true
    • intervaltimeoutretries 分别设置健康检查的间隔、超时和重试次数。
启动服务

运行以下命令启动服务:

docker-compose up -d

该命令会在后台启动服务,并自动根据 docker-compose.yml 文件中的配置,完成 One API 容器的初始化和启动。
在这里插入图片描述

三、使用 Docker Run 命令直接运行 One API 容器

如果不想使用 Docker Compose,我们还可以使用 docker run 命令来直接启动 One API 容器:

docker run -d \
  --name one-api \
  --restart always \
  -p 3000:3000 \
  -v $(pwd)/volumes/one-api/data:/data \
  -v $(pwd)/volumes/one-api/logs:/app/logs \
  -v $(pwd)/volumes/data-gym-cache:/tmp/data-gym-cache \
  -e SQL_DSN=root:test2024@tcp(111.18.9.111:3306)/oneapi \
  -e SESSION_SECRET=random_string \
  -e TZ=Asia/Shanghai \
  --health-cmd="wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' | awk -F: '{print $2}'" \
  --health-interval=30s \
  --health-timeout=10s \
  --health-retries=3 \
  one-api:latest \
  --log-dir /app/logs
命令参数解析
  1. -d:表示在后台运行容器。
  2. –name:指定容器的名称为 one-api
  3. –restart always:设置容器自动重启。
  4. -p 3000:3000:映射端口,与 Docker Compose 配置一致。
  5. -v:挂载卷,与 Docker Compose 中的卷配置一致。
  6. -e:设置环境变量。
  7. –health-cmd–health-interval–health-timeout–health-retries:健康检查配置。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/917551.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

录的视频怎么消除杂音?从录制到后期的杂音消除攻略

在录制视频时,杂音往往是一个令人头疼的问题。无论是环境噪音、设备噪音还是电磁干扰,杂音的存在都会极大地影响视频的听觉体验。录的视频怎么消除杂音?通过一些前期准备和后期处理技巧,我们可以有效地消除这些杂音,提…

微信小程序:vant组件库安装步骤

前言:在微信小程序中引用vant组件报错,提示路径不存在,这很有可能是因为没有安装构建vant组件库导致。下面是我整理的安装vant组件库的步骤: 第一步:安装node.js(执行完第一步请重启小程序) 具体步骤请看链接:node.js…

蓝桥杯-洛谷刷题-day3(C++)

目录 1.忽略回车的字符串输入 i.getline() ii.逐个字符的识别再输入 2.获取绝对值abs() 3.做题时的误区 4.多个变量的某一个到达判断条件 i.max() 5.[NOIP2016 提高组] 玩具谜题 i.代码 6.逻辑上的圆圈 i.有限个数n的数组 7.数组的定义 i.动态数组 1.忽略回车的字符串输…

Elasticsearch 查询时 term、match、match_phrase、match_phrase_prefix 的区别

Elasticsearch 查询时 term、match、match_phrase、match_phrase_prefix 的区别 keyword 与 text 区别term 查询match 查询match_phrase 查询match_phrase_prefix 查询写在最后 在讲述 es 查询时 term、match、match_phrase、match_phrase_prefix 的区别之前,先来了…

Restful API接⼝简介及为什么要进⾏接⼝压测

一、RESTful API简介 在现代Web开发中,RESTful API已经成为一种标准的设计模式,用于构建和交互网络应用程序。本文将详细介绍RESTful API的基本概念、特点以及如何使用它来设计高效的API接口。 1. 基于协议 HTTP 或 HTTPS RESTful API通常使用HTTP&am…

Android Studio 控制台输出的中文显示乱码

1. Android Studio 控制台输出的中文显示乱码 1.1. 问题 安卓在调试阶段,需要查看app运行时的输出信息、出错提示信息。乱码,会极大的阻碍开发者前进的信心,不能及时的根据提示信息定位问题,因此我们需要查看没有乱码的打印信息。…

前端无感刷新token

摘要: Axios 无感知刷新令牌是一种在前端应用中实现自动刷新访问令牌(access token)的技术,确保用户在进行 API 请求时不会因为令牌过期而中断操作 目录概览 XMLHttpRequestAxiosFetch APIJQuni.request注意事项: 访问…

ubuntu固定ip

根据自己的VMware中的网关信息和ip信息设置。 然后进入到ubuntu虚拟机的网络设置目录 cd /etc/netplan nano 01-network-manager-all.yaml根据自己的ip来设置!](https://i-blog.csdnimg.cn/direct/f0be245ced5143618c059d6f0734ed81.jpeg#pic_center) 应用你的设置 sudo ne…

阮一峰科技爱好者周刊(第 325 期)推荐工具:一个基于 Next.js 的博客和 CMS 系统

近期,阮一峰在科技爱好者周刊第 325 期中推荐了一款开源工具——ReactPress,ReactPress一个基于 Next.js 的博客和 CMS 系统,可查看 demo站点。(fecommunity 投稿) ReactPress:一款值得推荐的开源发布平台 …

DevOps工程技术价值流:打造卓越项目协作的优化宝典

一、引言 解锁项目协作的无限潜力,覆盖全链路实现流畅高效。 在当今瞬息万变的商业环境中,项目协作的效率和效果直接关系到企业的竞争力和市场响应速度。DevOps工程技术价值流中的项目协作优化,不仅是技术层面的革新,更是团队协…

如何从头开始构建神经网络?(附教程)

随着流行的深度学习框架的出现,如 TensorFlow、Keras、PyTorch 以及其他类似库,学习神经网络对于新手来说变得更加便捷。虽然这些框架可以让你在几分钟内解决最复杂的计算任务,但它们并不要求你理解背后所有需求的核心概念和直觉。如果你知道…

[flask][html]如何取消marker伪元素

【背景】 flask做项目时,导航栏默认出现小圆点,很难看,希望能够去除。 【分析】 前端查看后,发现是自动生成的伪元素::marker。 【方法】 找到相应的标签,我的情况是li,追加style。 style="list-style: none;"完整li部分: <li class="</

02-分布式对象存储设计原理

02-分布式对象存储设计原理 保存图片、音视频等大文件就是对象存储&#xff1a; 很好的大文件读写性能 还可通过水平扩展实现近乎无限容量 并兼顾服务高可用、数据高可靠 对象存储“全能”&#xff0c;主要因为&#xff0c;对象存储是原生分布式存储系统&#xff0c;相比MySQL、…

【论文复现】STM32设计的物联网智能鱼缸

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀STM32设计的物联网智能鱼缸 【1】项目功能介绍【2】设计需求总结【3】项目硬件模块组成 1.2 设计思路【1】整体设计思路【2】ESP8266工作模式…

『OpenCV-Python』视频的读取和保存

点赞 + 关注 + 收藏 = 学会了 推荐关注 《OpenCV-Python专栏》 上一讲介绍了 OpenCV 的读取图片的方法,这一讲简单聊聊 OpenCV 读取和保存视频。 视频的来源主要有2种,一种是本地视频文件,另一种是实时视频流,比如手机和电脑的摄像头。 要读取这两种视频的方法都是一样的…

2024智能机器人与自动控制国际学术会议 (IRAC 2024)

主办&#xff0c;承办&#xff0c;支持单位 会议官网 www.icirac.org 大会时间&#xff1a;2024年11月29-12月1日 大会简介 2024智能机器人与自动控制国际学术会议 &#xff08;IRAC 2024&#xff09;由华南理工大学主办&#xff0c;会议将于2024年11月29日-12月1日在中国广…

table详细用法

注意&#xff1a;table元素上的很多属性都已经被废弃了&#xff0c;建议使用css方式替代。 表格的box-sizing默认值为border-box 例如&#xff1a; border-collapse属性 border-collapse CSS 属性是用来决定表格的边框是分开&#xff08;separate&#xff09;默认值的还是合并…

【STM32】基于SPI协议读写SD,详解!

文章目录 0 前言1 SD卡的种类和简介1.1 SD卡的种类1.2 SD卡的整体结构1.3 SD卡运行机制——指令和响应2 SD卡的通信总线2.1 SDIO2.2 SPI3 硬件连接4 代码实践【重点】4.1 HAL库移植4.2 标准库移植4.3 遇到的问题和解决方案5 扩展阅读0 前言 因为项目需要,使用stm32读写sd卡,这…

ZooKeeper单机、集群模式搭建教程

单点配置 ZooKeeper在启动的时候&#xff0c;默认会读取/conf/zoo.cfg配置文件&#xff0c;该文件缺失会报错。因此&#xff0c;我们需要在将容器/conf/挂载出来&#xff0c;在制定的目录下&#xff0c;添加zoo.cfg文件。 zoo.cfg logback.xml 配置文件的信息可以从二进制包…

如何在Mysql中生成0-23完整的小时数据

目录 1. 创建表2. 插入0-23小时的数据3. 查询并合并数据 在数据分析中&#xff0c;我们经常需要对特定时间段内的数据进行统计和分析。 例如&#xff0c;在名片进线的场景中&#xff0c;我们可能需要了解一天内每小时的名片进线数量。 然而&#xff0c;由于某些时间点可能没有数…