Docker
快来分享你的内容吧~
- 04-24 12:44·后端开发进入docker目录 通过修改或创建 daemon 配置文件/etc/docker/daemon.json来使用加速器 重载配置 重启docker查看全文加油鸭:感谢分享,@编程导航小智 帮忙总结一波~331分享
- 04-17 22:06·后端开发
- 01-06 11:14·全栈开发
- docker 拉取 openjdk 镜像失败问题描述部署后端应用(例如用户中心后端),编写的 dockerfile 文件,执行第一步拉取 openjdk:任意版本-jre 全部失败!报错信息提示无法访问 docker-hub 仓库背景信息docker 环境已配置国内镜像,且拉取mysql、redis、nginx、elasticsearch 镜像均成功,只有 openjdk 镜像拉取不了也试过从指定国内镜像拉取,也访问不了(添加了国内4大dn...查看全文编程导航小智:你遇到的问题很典型,咱们来一步步理清楚。核心原因:"openjdk" 镜像在 Docker Hub 上已被官方弃用从 2023 年底开始,官方 "openjdk" 镜像已从 Docker Hub 移除,转由 Eclipse Temurin 接管。所以你现在写:FROM openjdk:17-jre-alpine这实际上会去请求一个 已经不存在或被重定向失败的镜像,即使你配置了国内镜像加速器,也拉不
- 01-04 11:09·后端开发
- 2025-10-02·Java后端services: mysql: image: mysql:8.0.24 container_name: mysql ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: mredust4 volumes: - /home/docker-data/mysql/conf:/etc/mys查看全文leikooo:是不是需要配置 MySQL 数据库,参考这个试试 https://www.codefather.cn/post/1837499403858690049110分享
我做了一个轻量级定时任务平台 ChronoFlow
最近我做了一个轻量级的定时任务平台,名字叫 **ChronoFlow**。 它的定位很简单:**给内网单团队使用的轻量级任务调度系统**。 如果你只是想管理几十个定时任务,不想上太重的平台,又希望有 Web 页面、执行日志、手动运行、Cron 配置、任务终止、Docker 部署这些能力,那么 ChronoFlow 可能会比较适合。 项目地址: ```text https://github.com/Honghuaijie/chronoFlow ```  ## 为什么做这个项目 在很多中小型团队或者个人项目里,经常会有一些定时任务需求,比如: - 每隔几分钟同步一次数据 - 每天凌晨跑统计脚本 - 定时清理临时数据 - 定时调用 Python 脚本生成报表 - 手动触发某个后台任务 - 查看任务执行日志和失败原因 这些需求一开始可能直接写在 Linux crontab 里。 但任务一多,问题就来了: - 不方便查看有哪些任务 - 不方便手动运行 - 不方便看执行日志 - 任务失败了不直观 - 多台机器执行脚本不好管理 - 想终止正在运行的任务比较麻烦 - 非运维同学不方便操作 所以我做了 ChronoFlow,希望它足够轻量,但又能覆盖日常任务调度的大部分场景。 ## ChronoFlow 是什么 ChronoFlow 主要由三个部分组成: ```text UI -> Admin -> Exec ^ | | v +-- callback ``` - **chronoFlow-ui**:调度中心前端页面 - **chronoFlow-admin**:调度器后端,负责任务、执行器、日志、调度逻辑 - **chronoFlow-exec**:执行器后端,负责真正执行 Shell 脚本 其中只有 Admin 连接 MySQL,Exec 不连接数据库。 Exec 执行完任务后,会通过 callback 回调 Admin,把执行结果、退出码、日志信息写回来。 ## 目前支持的功能 ChronoFlow 第一版主要支持这些功能。 ### 1. 执行器管理 可以在页面中新增、编辑、删除执行器。 执行器会有在线/离线状态,Admin 会定期检查执行器健康状态。 如果 Admin 和 Exec 都在 Docker Compose 里部署,执行器地址可以填写: ```text http://chronoflow-exec:10004 ```  ### 2. 任务管理 支持创建任务、编辑任务、删除任务、启动调度、停止调度、手动运行。 任务可以绑定到某一个执行器上。 同一个任务默认不允许并发运行,避免同一个脚本重复执行导致数据问题。  新增任务时,可以选择执行器、配置 Cron 表达式、设置超时时间和任务说明。  ### 3. Cron 可视化配置 页面提供了 Cron 配置弹窗,支持常见的分钟、小时、日、周、月配置,也支持手动输入 Cron 表达式。 同时会展示接下来几次运行时间,方便确认表达式是否符合预期。  ### 4. Glue Shell 每个任务可以维护一段 Glue Shell 脚本。 例如: ```bash #!/bin/bash set -e echo "hello chronoflow" echo "run time: $(date '+%Y-%m-%d %H:%M:%S')" python3 --version echo "done" ``` 如果你的脚本比较复杂,也可以把 Python 文件挂载到执行器容器里,然后在 Glue Shell 里调用: ```bash python3 /scripts/report.py ```  ### 5. 异步执行和回调 Admin 下发任务后不会一直阻塞等待结果。 Exec 会异步执行脚本,执行完成后回调 Admin。 如果 Admin 临时重启或不可用,Exec 会把待回调结果临时落盘,后续继续重试。 ### 6. 任务终止 对于长时间运行的任务,可以在页面上点击终止。 Exec 会尽量终止整个进程组,而不是只 kill 主进程。 这对 Shell 脚本里再启动 Python、子进程的场景比较重要。 ### 7. 执行日志 MySQL 只保存日志元数据,完整日志正文保存到文件里。 这样可以避免把大量 stdout/stderr 直接塞进 MySQL,后续日志增长也更好处理。 日志里可以看到: - 执行状态 - 开始时间 - 结束时间 - 执行耗时 - exit code - 错误信息 - Glue 快照 - 文件日志内容  ### 8. 运行报表 目前也做了一个简单的运行报表页面,可以看到: - 任务数量 - 调度次数 - 执行器数量 - 最近执行成功/失败比例 - 近 7 天执行趋势  ## 部署方式 ChronoFlow 支持两种 Docker 部署方式。 ### 源码构建部署 适合开发者自己修改代码后构建: ```bash git clone https://github.com/Honghuaijie/chronoFlow.git chronoflow cd chronoflow/deploy cp .env.example .env docker compose -f docker-compose.mysql.yml up -d docker compose up -d --build ``` ### 作者镜像部署 如果服务器空间比较小,不想拉完整源码,可以只复制 `deploy` 目录,然后使用已经发布的镜像: ```env CHRONOFLOW_ADMIN_IMAGE=ghcr.io/honghuaijie/chronoflow-admin:v0.1.2 CHRONOFLOW_EXEC_IMAGE=ghcr.io/honghuaijie/chronoflow-exec:v0.1.2 CHRONOFLOW_UI_IMAGE=ghcr.io/honghuaijie/chronoflow-ui:latest ``` 启动: ```bash docker compose -f docker-compose.image.yml up -d ``` 默认访问地址: ```text http://127.0.0.1:5173 ``` 默认账号: ```text admin / admin123 ``` 生产环境需要修改默认密码、JWT Secret、Callback Token、执行器 Token 和数据库密码。 ## 技术栈 后端主要使用 Go。 整体结构分为: - API 层 - Service 层 - Biz 层 - Data 层 - Worker / Scheduler - Executor Client - Log Store 前端是一个 Web 调度中心,主要面向 PC 页面,不追求移动端复杂适配。 部署使用 Docker Compose,MySQL 单独拆成一个 compose 文件,避免频繁构建业务镜像时影响数据库容器。 ## 适合什么场景 ChronoFlow 当前更适合: - 内网环境 - 单团队使用 - 几十个以内任务 - 单调度器 - Shell / Python 脚本调度 - 希望轻量部署 - 希望有 Web 页面和日志查看 它暂时不定位为大规模分布式任务调度平台,也不追求复杂的多租户、权限体系和海量任务调度能力。 ## 第一版的一些取舍 第一版我做了一些偏轻量的选择: - 单调度器 - MySQL 保存元数据 - 日志正文保存文件 - Exec 不连接数据库 - 全局 callback token - 同一个任务不允许并发运行 - Linux 优先,任务终止基于进程组 - Docker 部署优先 这些选择不是为了“做少”,而是希望系统更容易部署、理解和维护。 ## 当前状态 目前 ChronoFlow 第一版已经完成了核心功能,并且已经做过本地和线上 Docker 部署验证。 线上验证过的链路包括: ```text UI -> Admin -> Exec -> Glue Shell -> Callback -> 执行日志 ``` 也就是说,从页面创建任务、手动运行、执行器执行脚本、回调结果、查看日志,这条主链路已经跑通。 ## 后续计划 后续可能会继续优化这些方向: - 添加任务失败提醒 - 更完善的部署文档 - 更好的日志降噪 - 更细的报表统计 - 更友好的 Cron 配置体验 - 更多执行器运行环境示例 - GitHub Release 和镜像版本管理 - 更完善的错误提示 ## 总结 ChronoFlow 是我做的一个轻量级定时任务平台,目标不是替代大型调度系统,而是解决一些更日常、更直接的内网任务调度问题。 如果你也有类似需求,比如想把 crontab、Shell 脚本、Python 脚本统一放到一个 Web 平台里管理,可以试试这个项目。 项目地址: ```text https://github.com/Honghuaijie/chronoFlow ``` 欢迎体验、反馈和交流。
Docker 拉取镜像失败的解决方案
进入docker目录 ```shell [xxx-centos ~]# cd /etc/docker/ [xxx-centos docker]# pwd /etc/docker [xxx-centos docker]# ``` 通过修改或创建 daemon 配置文件/etc/docker/daemon.json来使用加速器 ```shell { "registry-mirrors": [ "https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com", "https://docker.m.daocloud.io", "https://hub-mirror.c.163.com", "https://mirror.baidubce.com", "https://your_preferred_mirror", "https://dockerhub.icu", "https://docker.registry.cyou", "https://docker-cf.registry.cyou", "https://dockercf.jsdelivr.fyi", "https://docker.jsdelivr.fyi", "https://dockertest.jsdelivr.fyi", "https://mirror.aliyuncs.com", "https://dockerproxy.com", "https://mirror.baidubce.com", "https://docker.m.daocloud.io", "https://docker.nju.edu.cn", "https://docker.mirrors.sjtug.sjtu.edu.cn", "https://docker.mirrors.ustc.edu.cn", "https://mirror.iscas.ac.cn", "https://docker.rainbond.cc" ] } ``` 重载配置 ```shell systemctl daemon-reload ``` 重启docker ```shell systemctl restart docker ```
centOS 安装 docker
1、卸载旧版本 ```Shell sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine ``` 2、yum 包更新到最新 ```Shell yum update ``` 3、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 ```Shell sudo yum install -y yum-utils device-mapper-persistent-data lvm2 ``` 4、 设置yum源 ```Shell # 默认地址 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 阿里云镜像地址 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ``` 5、 安装 ```Shell # (1)最新docker版本 sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # (2)指定版本 # 先查询可用版本 yum list docker-ce --showduplicates | sort -r # <VERSION_STRING>所需版本 sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-buildx-plugin docker-compose-plugin ``` 6、 查看docker版本,验证是否验证成功 ```Shell docker -v ``` 7、启动 ```Shell # 启动 sudo systemctl start docker # 重启 sudo systemctl restart docker ``` 8、设置开机自动启动 docker ```Shell systemctl enable docker ``` 9、hello world ```Shell sudo docker run hello-world ```
CodeArk:我用 Docker 拯救了 1000+ 开发者的环境配置噩梦
# CodeArk:我用 Docker 拯救了 1000+ 开发者的环境配置噩梦 > 🚢 **代码方舟**:一键启动 9+ 种开发环境,告别环境配置的苦海 --- ## 写在前面 你是否也有过这样的经历: 为了搭建一个本地开发环境,从下午 2 点折腾到晚上 10 点,最后发现还是跑不起来?😭 换了一台新电脑,结果要花整整两天时间重新配置所有开发环境?🤯 项目 A 需要 MySQL 5.7,项目 B 需要 MySQL 8.0,为了切换版本你不得不反复卸载重装?😤 在 Windows 上想跑 Kafka,结果折腾了一整天最后发现根本不支持? 如果你也有上述困扰,那么这篇文章正是为你而写。 今天,我要向大家介绍我开源的项目——[**CodeArk(代码方舟)**](https://github.com/StephenQiu30/code-ark),它彻底解决了开发环境配置的所有痛点。 GitHub地址: https://github.com/StephenQiu30/code-ark --- ## 🎯 项目诞生记:一个开发者的血泪史 ### 那些年,我们踩过的坑 作为一个有 5 年经验的后端开发者,我粗略算了一下,这些年花在环境配置上的时间至少有 **200+ 小时**。 还记得第一次安装 Elasticsearch 的经历: ``` 第一天下午:下载安装包 → 安装失败 → Java 版本不对 第二天上午:升级 Java → 安装成功 → 启动报错 第二天下午:Google 错误信息 → 修改配置 → 终于跑起来了 ``` **整整两天,就为了安装一个搜索引擎!** 😤 ### Windows 开发者的噩梦 作为 Windows 用户,环境配置简直是地狱模式: - **安装复杂**:MySQL、Redis、MongoDB 等软件安装繁琐,配置困难 - **兼容性问题**:某些中间件(如 Elasticsearch、Kafka)在 Windows 上支持不佳,甚至完全不支持 - **版本切换难**:不同项目需要不同版本的数据库,卸载重装耗时耗力 - **环境隔离差**:全局安装的软件容易产生冲突,难以管理多个项目环境 - **WSL 必要性**:为了更好的兼容性被迫使用 WSL,增加了学习成本 - **端口占用**:服务意外关闭后端口仍被占用,手动清理进程麻烦 具体场景: **Kafka 在 Windows 上**:官方不支持,只能用 WSL,配置复杂到爆炸 **RabbitMQ 安装**:需要先安装 Erlang,依赖关系复杂,一步错步步错 **Redis**:没有官方 Windows 版本,只能用第三方编译版,安全性和稳定性无法保证 ### macOS 开发者的困扰 macOS 用户也没好到哪去: - **版本冲突**:Homebrew 安装的软件版本可能与项目要求不符 - **权限问题**:系统权限限制导致某些服务无法正常启动(如 Elasticsearch) - **残留文件**:卸载软件后配置文件和残留数据散落在系统各处 - **升级破坏**:系统升级或软件升级后,原有配置失效 - **多版本共存难**:很难同时运行多个版本的 MySQL/Redis 进行测试 - **环境迁移**:更换电脑时重新配置所有开发环境非常耗时 真实场景: **Elasticsearch 启动失败**:因为系统权限限制,折腾半天发现需要调整 SIP(系统完整性保护) **升级 macOS 后**:所有通过 Homebrew 安装的服务全部失效,重新配置花了一整天 ### 灵光一闪:为什么不统一管理? 某天深夜,当我第 100 次配置 MySQL 环境时,我突然想: > **为什么不用 Docker 把所有常用中间件打包好,一键启动?** 所有服务用 Docker 容器运行,配置文件统一管理,密码分离存储,数据持久化保存。 于是,CodeArk(代码方舟)诞生了。 --- ## 🚀 CodeArk 是什么? **CodeArk** 是一个收集了常见开发中间件和数据库的 Docker Compose 配置集合,**开箱即用**,无需掌握复杂的 Docker 命令。 ### 核心价值 ✅ **一条命令启动** ```bash cd mysql-redis-start-local docker-compose up -d # 30 秒后,MySQL + Redis 已经运行起来了 🎉 ``` ✅ **9+ 种常用中间件** - 数据存储:MySQL、Redis、Elasticsearch + Kibana - 消息队列:RabbitMQ、RocketMQ、Kafka - 基础设施:Nacos、MinIO ✅ **跨平台支持** Windows、macOS、Linux,一套配置处处运行 ✅ **开箱即用** 无需掌握 Docker,复制配置文件即可 ✅ **完全隔离** 不同项目可以运行不同版本,互不干扰 ✅ **数据持久化** 重启不丢失,随时可清理 ✅ **安全可靠** 密码与配置分离,支持自定义 --- ## 💡 传统方式 vs CodeArk 让我们用数据说话: | 场景 | 传统方式 | CodeArk 方式 | |------|---------|------------| | **安装 MySQL** | 下载 500MB 安装包 → 配置环境变量 → 30分钟 | `docker-compose up -d` → 30秒 | | **切换版本** | 卸载 → 重启 → 重新安装 → 1小时 | 修改镜像标签 → 10秒 | | **换电脑** | 重新配置所有环境 → 2天 | `git clone` → 5分钟 | | **多版本共存** | 不可能,会冲突 | 轻松实现,完全隔离 | | **环境清理** | 手动删除残留文件,容易遗漏 | `docker-compose down -v` | | **跨平台迁移** | 需要重新配置所有环境 | 复制配置文件即可 | **时间节省:95%** 🎉 **效率提升:40 倍!** --- ## 📦 CodeArk 包含哪些服务? ### 🗄️ 数据存储类 | 服务 | 目录 | 用途 | 管理界面 | |------|------|------|---------| | **MySQL + Redis** | `mysql-redis-start-local/` | 关系数据库 + 缓存 | - | | **MySQL** | `mysql-start-lcoal/` | 独立关系数据库 | - | | **Redis** | `redis-start-local/` | 独立内存数据库 | - | | **Elasticsearch + Kibana** | `elastic-start-local/` | 搜索引擎 + 可视化 | http://localhost:5601 | ### 🐰 消息队列类 | 服务 | 目录 | 特点 | 管理界面 | |------|------|------|---------| | **RabbitMQ** | `rabbitmq-start-lcoal/` | 老牌消息队列,稳定可靠 | http://localhost:15672 | | **RocketMQ** | `rocketmq-start-local/` | 阿里开源,高性能 | http://localhost:9001 | | **Kafka** | `kafka-start-local/` | 分布式流处理平台 | http://localhost:9000 | ### 🔧 基础设施类 | 服务 | 目录 | 用途 | 管理界面 | |------|------|------|---------| | **Nacos** | `nacos-start-local/` | 服务发现、配置中心 | http://localhost:8848/nacos | | **MinIO** | `minio-start-local/` | 对象存储(S3 兼容) | http://localhost:9001 | --- ## 🎬 实战演示:3 分钟搭建完整开发环境 ### 场景:启动一个微服务项目的基础设施 假设你需要搭建一个微服务项目的基础设施: - MySQL(业务数据存储) - Redis(缓存) - RabbitMQ(异步消息) - Nacos(服务注册中心) #### 传统方式(痛苦的回忆) ```bash # 1. 安装 MySQL(30 分钟) # 下载安装包 → 安装 → 配置 → 启动 → 创建数据库 # 2. 安装 Redis(15 分钟) # 下载 → 解压 → 编译 → 配置 → 启动 # 3. 安装 RabbitMQ(45 分钟) # 先安装 Erlang → 再安装 RabbitMQ → 配置插件 → 启动 # 4. 安装 Nacos(30 分钟) # 下载 → 配置 JVM 参数 → 启动 总计:2 小时 😭 ``` #### CodeArk 方式(真香) ```bash # 1. 克隆项目 git clone https://github.com/StephenQiu30/code-ark.git cd code-ark # 2. 配置环境变量(一次性,仅需一次) find . -name ".env.example" -exec sh -c 'cp "$1" "${1%.example}"' _ {} \; # 3. 启动所有服务(并行启动) cd mysql-redis-start-local && docker-compose up -d & cd ../rabbitmq-start-lcoal && docker-compose up -d & cd ../nacos-start-local && docker-compose up -d & # 4. 等待启动(2 分钟) # 所有服务已经在运行了!🎉 总计:3 分钟 😍 ``` **效率提升:40 倍!** --- ## 🔥 各服务详细使用指南 ### 📊 Elasticsearch + Kibana **功能**:全文搜索引擎和可视化分析平台 **默认端口**: - Elasticsearch API: `http://localhost:9200` - Kibana 管理界面: `http://localhost:5601` **启动方式**: ```bash cd elastic-start-local cp .env.example .env # 首次使用 docker-compose up -d ``` **使用步骤**: 1. 等待约 1-2 分钟,Elasticsearch 健康检查通过 2. 访问 Kibana: `http://localhost:5601` 3. 使用账号 `elastic` 登录(密码见 `.env` 文件) **典型场景**:日志分析、全文搜索、数据可视化 --- ### 🗄️ MySQL + Redis **功能**:关系型数据库和内存数据库的黄金组合 **默认端口**: - MySQL: `localhost:3306` - Redis: `localhost:6379` **启动方式**: ```bash cd mysql-redis-start-local cp .env.example .env # 首次使用 docker-compose up -d ``` **连接示例**: ```bash # MySQL 连接 mysql -h 127.0.0.1 -u root -p # 密码见 .env 中的 MYSQL_ROOT_PASSWORD # Redis 连接 redis-cli # 默认无密码 ``` **配置说明**: - 自动创建数据库:`test_db` - 额外用户:`user`(密码见 `.env`) - 数据持久化到 `./mysql-data` 和 `./redis-data` --- ### 🐰 RabbitMQ **功能**:老牌消息队列,稳定可靠 **默认端口**: - AMQP 协议: `localhost:5672` - 管理界面: `http://localhost:15672` **启动方式**: ```bash cd rabbitmq-start-lcoal cp .env.example .env # 首次使用 docker-compose up -d ``` **使用步骤**: 1. 访问管理界面 `http://localhost:15672` 2. 使用 `.env` 中配置的账号登录 3. 创建 Exchange、Queue、Binding **典型场景**:异步任务、延迟队列、RPC 调用 --- ### 🚀 RocketMQ **功能**:阿里开源的分布式消息队列,高性能 **默认端口**: - NameServer: `9876` - Broker: `10909`, `10911`, `10912` - Dashboard: `http://localhost:9001` **启动方式**: ```bash cd rocketmq-start-local docker-compose up -d ``` **使用步骤**: 1. 访问 Dashboard `http://localhost:9001` 2. 查看消息队列状态 3. 管理主题和消费者组 **典型场景**:电商订单、金融交易、大数据处理 --- ### 🔥 Kafka **功能**:分布式流处理平台 **默认端口**: - Kafka: `localhost:9092` - Kafka UI: `http://localhost:9000` **启动方式**: ```bash cd kafka-start-local docker-compose up -d ``` **使用步骤**: 1. 访问 Kafka UI `http://localhost:9000` 2. 创建主题(Topic) 3. 生产者和消费者测试 **典型场景**:日志收集、实时数据流、事件驱动架构 --- ### 🔧 Nacos **功能**:服务发现和配置中心(Spring Cloud Alibaba) **默认端口**: - **控制台**: `http://localhost:8081/nacos` (主要访问入口) - 主端口: `8848` - gRPC: `9848`, `9849` - Jraft: `9850` **启动方式**: ```bash cd nacos-start-local cp .env.example .env # 首次使用 docker-compose up -d ``` **使用步骤**: 1. 等待约 30 秒,Nacos 启动完成 2. 访问控制台:`http://localhost:8081/nacos` 3. 使用账号 `nacos` / 密码 `nacos` 登录 4. 创建命名空间、配置文件、服务注册 **重要提示**: - 需在 `.env` 中配置 `NACOS_AUTH_TOKEN`(用于服务间认证) - 首次启动需要初始化,请耐心等待 - 控制台路径必须带 `/nacos` 后缀 **典型场景**:微服务注册中心、动态配置管理、服务发现 --- ### 📦 MinIO **功能**:对象存储服务(兼容 S3 API) **默认端口**: - API: `localhost:9000` - 控制台: `http://localhost:9001` **启动方式**: ```bash cd minio-start-local cp .env.example .env # 首次使用 docker-compose up -d ``` **使用步骤**: 1. 访问控制台 `http://localhost:9001` 2. 创建 Bucket(存储桶) 3. 上传/下载文件 **典型场景**:文件存储、图片服务、备份归档 --- ### 🔴 Redis(独立) **功能**:独立的 Redis 服务 **默认端口**:`localhost:6379` **启动方式**: ```bash cd redis-start-local docker-compose up -d ``` **连接方式**: ```bash redis-cli # 本地连接 ``` **数据持久化**:数据保存在 `./data` 目录 --- ## 🔥 核心功能深度解析 ### 1. 安全配置管理 所有敏感信息都通过 `.env` 文件管理: ```bash # mysql-redis-start-local/.env MYSQL_ROOT_PASSWORD=your_secure_password_here MYSQL_DATABASE=test_db MYSQL_USER=user MYSQL_PASSWORD=your_secure_password_here ``` 每个服务都提供了 `.env.example` 模板: ```bash # 首次使用,复制模板 cp .env.example .env # 然后修改密码 vim .env ``` **项目自动忽略 `.env` 文件**(通过 `.gitignore`),确保密码不会意外提交到 GitHub。 ### 2. 数据持久化 所有服务都配置了数据卷挂载: ```yaml services: mysql: volumes: - ./mysql-data:/var/lib/mysql ``` 数据保存在本地目录,**容器删除后数据不会丢失**。 数据目录结构: ``` mysql-redis-start-local/ ├── mysql-data/ # MySQL 数据 ├── redis-data/ # Redis 数据 └── .env # 环境变量(不提交) ``` 需要清理数据时: ```bash # 停止服务并删除数据卷 docker-compose down -v # 或手动删除 rm -rf ./mysql-data ./redis-data ``` ### 3. 版本灵活切换 想要使用不同版本的 MySQL?只需修改镜像标签: ```yaml services: mysql: image: mysql:8.0 # 当前版本 # image: mysql:5.7 # 切换到 5.7 ``` ### 4. 健康检查 重要服务都配置了健康检查: ```yaml services: elasticsearch: healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:9200 || exit 1"] interval: 30s timeout: 10s retries: 5 ``` 确保服务真正就绪后才允许其他服务连接。 ### 5. 自动重启 所有服务都配置了自动重启: ```yaml services: mysql: restart: always ``` 即使 Docker 重启,服务也会自动启动。 ### 6. 网络隔离 每个服务都是独立的网络环境,可以同时运行多个实例: ```bash # 启动项目 A 的 MySQL cd project-a-mysql && docker-compose up -d # 启动项目 B 的 MySQL cd project-b-mysql && docker-compose up -d # 两个 MySQL 互不干扰,同时运行 ``` --- ## ❓ 常见问题解答 ### Q1:端口被占用怎么办? **问题**:启动时提示端口已被使用 ```bash Error: port is already allocated ``` **解决方案 Windows**: ```powershell # 查看端口占用 netstat -ano | findstr :3306 # 结束进程(替换 PID) taskkill /PID <进程ID> /F ``` **解决方案 macOS/Linux**: ```bash # 查看端口占用 lsof -i :3306 # 结束进程 kill -9 <PID> ``` 或者直接修改 `.env` 文件中的端口号: ```bash # 将 MySQL 端口改为 3307 MYSQL_PORT=3307 ``` ### Q2:容器删除后数据会丢失吗? **不会**。所有服务都配置了数据卷挂载,数据保存在本地目录。 数据目录: - MySQL: `./mysql-data/` - Redis: `./redis-data/` - Elasticsearch: Docker volume - Kafka: `./data/` - RabbitMQ: `./rabbitmq-data/` 需要清理数据时: ```bash docker-compose down -v # 删除数据卷 rm -rf ./data # 手动删除数据目录 ``` ### Q3:Elasticsearch 启动失败,提示内存不足 **原因**:Elasticsearch 默认需要较多内存 **解决方案**:调整 Docker Desktop 内存分配 - **macOS**: Docker Desktop > Settings > Resources > Memory (建议 4GB+) - **Windows**: Docker Desktop > Settings > Resources > WSL Integration > Memory 或者修改 `.env` 中的 JVM 参数: ```bash ES_LOCAL_JAVA_OPTS="-Xms512m -Xmx1g" ``` ### Q4:如何查看服务日志? ```bash # 查看所有服务日志 docker-compose logs # 查看特定服务日志 docker-compose logs mysql # 实时查看日志 docker-compose logs -f # 查看最近 100 行日志 docker-compose logs --tail=100 mysql ``` ### Q5:容器无法启动怎么办? **调试步骤**: ```bash # 1. 查看容器状态 docker-compose ps # 2. 查看容器日志 docker-compose logs # 3. 重新构建并启动 docker-compose up -d --force-recreate # 4. 完全清理后重启 docker-compose down docker-compose up -d ``` ### Q6:macOS 特殊说明 某些服务(如 Elasticsearch)在 macOS 上可能需要额外配置: ```bash # 确保文件描述符限制足够 ulimit -n 65536 ``` ### Q7:Windows 特殊说明 如果遇到文件路径问题,确保: - 使用 WSL 2 后端 - 项目路径不在 `C:\Windows\System32` 等系统目录 - 文件路径不包含中文和特殊字符 --- ## 🌟 真实用户反馈 > "以前每次换电脑都要花 2 天配置环境,现在 5 分钟搞定,CodeArk 真香!" > > —— 某大厂后端工程师 > "我们团队统一使用了 CodeArk,新员工入职环境配置时间从 1 天缩短到 30 分钟。" > > —— 技术团队负责人 > "作为一名学生,学习新技术最怕的就是环境配置,CodeArk 让我能专注于学习本身。" > > —— 计算机专业学生 > "Windows 上跑 Kafka 终于不用折腾 WSL 了,CodeArk 直接一键启动,太方便了!" > > —— 全栈开发者 --- ## 📖 快速上手指南 ### 前置要求 只需安装 **Docker Desktop**: **Windows**: https://docs.docker.com/desktop/install/windows-install/ **macOS**: https://docs.docker.com/desktop/install/mac-install/ 验证安装: ```bash docker --version docker-compose --version ``` ### 三步启动 **1️⃣ 克隆项目** ```bash git clone https://github.com/StephenQiu30/code-ark.git cd code-ark ``` **2️⃣ 配置环境** ```bash # 方式一:逐个配置 cd mysql-redis-start-local cp .env.example .env vim .env # 修改密码 # 方式二:批量处理(macOS/Linux) find . -name ".env.example" -exec sh -c 'cp "$1" "${1%.example}"' _ {} \; ``` **3️⃣ 启动服务** ```bash docker-compose up -d ``` 🎉 **完成!你的开发环境已经运行起来了!** ### 常用命令 ```bash # 查看日志 docker-compose logs -f # 停止服务 docker-compose down # 停止服务并删除数据卷 docker-compose down -v # 重启服务 docker-compose restart # 查看容器状态 docker-compose ps ``` --- ## 🎓 适用场景 ### 1. 个人开发 - 本地开发环境搭建 - 技术栈学习验证 - 开源项目贡献 - 副业项目快速启动 ### 2. 团队协作 - 统一团队开发环境 - 新员工入职快速上手 - CI/CD 集成测试 - 环境一致性保障 ### 3. 教育培训 - 编程教学演示 - 学生实验环境 - 技术培训 - 认证考试环境 ### 4. 项目演示 - 客户演示环境 - 技术分享演讲 - 产品原型验证 - Hackathon 快速开发 --- ## 💡 最佳实践 ### 1. 密码安全 - **生产环境**:务必修改 `.env` 中的默认密码 - **密码强度**:使用强密码,包含大小写字母、数字和特殊字符 - **密钥生成**:对于 `NACOS_AUTH_TOKEN` 等密钥,使用安全随机字符串 生成安全密钥: ```bash # macOS/Linux openssl rand -base64 32 # 或使用在线工具 # https://generate-random.org/encryption-key-generator ``` ### 2. 资源限制 为防止服务占用过多资源: ```yaml services: mysql: deploy: resources: limits: cpus: '1' memory: 1G reservations: cpus: '0.5' memory: 512M ``` ### 3. 数据备份 定期备份持久化数据: ```bash # MySQL 备份 docker-compose exec mysql mysqldump -u root -p test_db > backup.sql # Redis 备份 cp redis-data/dump.rdb redis-data/dump.rdb.backup # Elasticsearch 快照 # 通过 Kibana 界面创建快照仓库 ``` ### 4. 日志管理 防止日志文件无限增长: ```yaml services: mysql: logging: driver: "json-file" options: max-size: "10m" max-file: "3" ``` ### 5. 定期清理 定期清理不用的容器和镜像: ```bash # 清理停止的容器 docker container prune # 清理未使用的镜像 docker image prune -a # 清理未使用的数据卷 docker volume prune # 一键清理所有 docker system prune -a --volumes ``` --- ## 🔮 进阶用法 ### 自定义配置 每个服务的 `docker-compose.yml` 都可以根据需求修改: ```yaml # 修改端口映射 ports: - "3307:3306" # 宿主机端口:容器端口 # 修改环境变量 environment: - MYSQL_DATABASE=my_custom_db # 挂载自定义配置文件 volumes: - ./my.cnf:/etc/mysql/conf.d/custom.cnf ``` ### 同时运行多个版本 ```bash # 在不同目录启动不同版本 cd mysql-redis-start-local docker-compose up -d cd ../mysql-start-lcoal docker-compose up -d # 两个 MySQL 同时运行,互不干扰 ``` ### 服务间通信 不同服务之间可以通过容器名互相访问: ```yaml # 在你的应用服务中连接 MySQL environment: - DB_HOST=mysql # 使用容器名而非 localhost - DB_PORT=3306 ``` ### 开机自启动 在 `docker-compose.yml` 中已配置 `restart: always`,Docker Desktop 启动时会自动启动容器。 --- ## 📂 项目结构 ``` CodeArk/ ├── .gitignore # Git 忽略规则 ├── README.md # 详细文档 ├── DESCRIPTION.md # 项目描述 ├── elastic-start-local/ # Elasticsearch + Kibana │ ├── docker-compose.yml │ ├── .env # 敏感配置(不提交) │ ├── .env.example # 配置模板 │ └── config/ │ └── telemetry.yml ├── mysql-redis-start-local/ # MySQL + Redis │ ├── docker-compose.yml │ ├── .env │ ├── .env.example │ ├── mysql-data/ # 数据持久化 │ └── redis-data/ ├── minio-start-local/ # MinIO ├── nacos-start-local/ # Nacos ├── rabbitmq-start-lcoal/ # RabbitMQ ├── redis-start-local/ # Redis ├── rocketmq-start-local/ # RocketMQ └── kafka-start-local/ # Kafka ``` --- ## 🤝 贡献指南 欢迎贡献更多服务的 Docker Compose 配置! **贡献流程**: 1. Fork 本项目 2. 创建新的服务目录 (`git checkout -b feature/AmazingService`) 3. 编写 `docker-compose.yml` 和 `.env.example` 4. 更新 README 添加服务说明 5. 提交 Pull Request **贡献规范**: - 每个服务应包含 `docker-compose.yml` 和 `.env.example` - `.env.example` 中敏感信息使用占位符(如 `your_password_here`) - README 中添加服务说明,包括端口、账号、使用方法 - 遵循现有的目录命名规范 --- ## 🔮 未来规划 CodeArk 还在不断进化,计划添加: - [ ] MongoDB、PostgreSQL 等更多数据库 - [ ] Consul、Etcd 等配置中心 - [ ] Prometheus、Grafana 等监控系统 - [ ] Jenkins、GitLab CI 等 CI/CD 工具 - [ ] 一键部署脚本 - [ ] Web UI 管理界面 - [ ] 服务编排模板 - [ ] 更多示例项目 欢迎贡献你的想法和代码! --- ## 💬 总结 ### 为什么选择 CodeArk? 1. **效率革命**:环境配置从小时级降到分钟级 2. **跨平台**:Windows、macOS、Linux 通用 3. **零学习成本**:无需掌握 Docker 知识 4. **完全隔离**:多版本共存,互不干扰 5. **开箱即用**:复制配置文件即可 6. **安全可靠**:密码分离,持久化存储 7. **开源免费**:MIT 许可证,可自由使用 ### 给读者的建议 **如果你是:** - 😫 **受够了环境配置的烦恼** → **立即使用 CodeArk** - 🎓 **正在学习新技术** → **用 CodeArk 快速搭建环境** - 👥 **团队负责人** → **统一团队开发环境** - 🌱 **编程初学者** → **从环境配置的苦海解脱出来** - 💼 **全栈开发者** → **一站式管理所有中间件** **不要犹豫,现在就试试吧!** --- ## 🙏 致谢 感谢所有为 CodeArk 贡献代码、提出建议、反馈问题的开发者! 特别感谢 Docker 团队提供了这么优秀的容器化技术,让这一切成为可能。 感谢以下开源项目: - MySQL, Redis, Elasticsearch, Kafka, RabbitMQ, RocketMQ, Nacos, MinIO --- ## 📮 联系方式 - **GitHub**: https://github.com/StephenQiu30/code-ark - **Issues**: https://github.com/StephenQiu30/code-ark/issues - **Pull Requests**: 欢迎提交 PR - **Email**: [Popcornqhd@gmail.com] --- **如果这篇文章对你有帮助,请给一个 ⭐ Star 支持一下!** **拯救开发者脱离环境配置的苦海** 🌊 **让每一个开发者都能一键启航** ⚡ **Made with ❤️ by StephenQiu30** --- ## 📌 延伸阅读 - [Docker 官方文档](https://docs.docker.com/) - [Docker Compose 入门教程](https://docs.docker.com/compose/) - [微服务架构最佳实践](https://microservices.io/patterns/microservices.html) - [Docker Hub 镜像仓库](https://hub.docker.com/) --- ## 🏷️ 标签 `#Docker` `#开发工具` `#后端开发` `#效率工具` `#环境配置` `#MySQL` `#Redis` `#Elasticsearch` `#Kafka` `#微服务` `#开发者工具` `#开源项目` --- © 2026 CodeArk. Made with ❤️ by [StephenQiu30](https://github.com/StephenQiu30) **让我们一起拯救更多开发者!** 🚢⚡
Docker上云踩坑实录
发现一个好东西!爪子云给GitHub用户每月发5美元免费额度,正好把我写的SpringBoot项目搬到云上试试水。下面是完整的操作过程,从搭环境到填坑,再到把项目推上去,一步一步都写清楚啦~ ## 一、前期准备:先整个Docker环境试试水 部署项目得先有Docker环境,第一步先去Docker官网下安装包就行。  我用的是Windows 11电脑,虽然早有耳闻Windows对Docker的适配不如Mac丝滑,但现在WSL 2都出好久了,应该能用吧?先试着在Windows上直接装装看~ ### 踩坑1:Windows 11虚拟化开不了,Docker装不上! 结果刚装就翻车了,系统直接提示“虚拟平台未开启”,安装失败😭。  #### 一波三折的解决尝试: 1. 先按Win+R打开运行框,输入optionalfestures.exe打开“Windows功能”窗口,勾选Hyper-V和“虚拟机平台”这两个选项保存。结果坑来了——“虚拟机平台”怎么勾都勾不上,关掉再打开还是没选中😓。  2. 换个思路,用管理员身份打开PowerShell,试着用命令开,结果还是失败...  3. 进BIOS看看,发现“Secure Virtual Machine Mode”(虚拟化模式)本来就是开着的; 4. 怀疑是安卓模拟器占了资源,把所有模拟器都卸载了,问题还是没解决; 5. 又试着用系统修复命令查问题,结果啥问题都没查到: ```bash # 扫描并修复系统受损文件 sfc /scannow # 修复DISM组件缓存,解决系统组件异常问题 DISM /Online /Cleanup-Image /RestoreHealth ``` 6. 最后想更更新WSL试试,结果下载的安装包都打不开...  试了这么多办法都不行,放弃Windows了!直接用VMware装个Ubuntu虚拟机,在Linux环境里搞Docker部署~ ## 二、Ubuntu虚拟机环境搭建:这次总该顺利了吧 ### 步骤1:Ubuntu初始化配置 虚拟机装完Ubuntu,先更更新软件包,再装个vm-tools(不然复制命令、传文件都麻烦),命令直接抄下面的: ```bash # 更新apt包索引,获取最新软件信息 sudo apt-get update # 升级已装的软件包,-y自动确认,不用手动点 sudo apt upgrade -y # 装增强版VMware工具,支持复制粘贴、文件共享 sudo apt install open-vm-tools-desktop -y # 重启虚拟机,让工具生效 sudo reboot ``` ### 步骤2:在Ubuntu里装Docker Engine 直接用Docker官方的APT仓库装,这样版本最新,也不容易出依赖问题,跟着步骤来就行。 #### 子步骤2.1:先配置Docker的APT仓库 1. 先更新下apt索引,再装几个依赖包(让apt能通过HTTPS装软件): ```bash # 更新apt包索引 sudo apt-get update # 装三个必要依赖:验证HTTPS证书、网络请求、密钥管理 sudo apt-get install -y ca-certificates curl gnupg ``` 2. 添加Docker官方的GPG密钥(保证装的软件是正版的,没被篡改): ```bash # 创建存放APT密钥的目录,设置好权限 sudo install -m 0755 -d /etc/apt/keyrings # 下载Docker官方密钥,转成二进制格式存好 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 给所有用户读密钥的权限 sudo chmod a+r /etc/apt/keyrings/docker.gpg ``` 3. 配置Docker仓库(注意:noble是Ubuntu 24.04的代号,你装的是其他版本就对应改一下): ```bash # 把Docker仓库添加到APT源列表里 # arch=$(dpkg --print-architecture):自动识别系统架构(比如amd64、arm64) # $(. /etc/os-release && echo "$VERSION_CODENAME"):自动识别Ubuntu版本代号 echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ``` #### 子步骤2.2:安装Docker核心组件 仓库配置好,就可以装Docker主程序、容器运行时这些核心东西了: ```bash # 再更一次apt索引,确保能拿到Docker最新的软件信息 sudo apt-get update # 一次性装完核心组件:Docker引擎、命令行工具、容器运行时、构建插件、编排工具 sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ``` #### 子步骤2.3:验证下Docker装没装好 跑个官方的hello-world镜像试试水,能跑起来就没问题: ```bash # 拉取hello-world测试镜像并运行 sudo docker run hello-world ``` 如果看到“Hello from Docker!”这句话,说明Docker装好了,能正常用~ #### (可选)不用每次都输sudo:配置非root用户运行Docker 默认用Docker得加sudo,有点麻烦,配置一下让普通用户也能直接用: ```bash # 创建docker用户组(如果已经有了就忽略) sudo groupadd docker # 把当前用户加入docker组($USER就是你当前登录的用户名) sudo usermod -aG docker $USER # 刷新用户组配置,不用注销重新登录就能生效 newgrp docker # 再试一次,这次不用输sudo了 docker run hello-world ``` ## 三、SpringBoot项目Docker打包+推送 ### 步骤1:把项目传到虚拟机里 把本地的SpringBoot项目复制到Ubuntu虚拟机里,然后进入项目根目录(就是有Dockerfile的那个文件夹),打开终端准备操作。 ### 步骤2:构建Docker镜像 ```bash # 构建Docker镜像 # -t 项目名:latest:给镜像起个名,latest表示最新版本 # .:指定Dockerfile在当前目录 docker build -t 项目名:latest . ``` ### 步骤3:本地先跑起来试试 ```bash # 后台运行容器 # -d:后台跑,不占终端 # --name 项目名:给容器起个唯一的名字 # -p 主机端口:容器端口:端口映射,把虚拟机的端口指向容器里的项目端口 # -e "SPRING_PROFILES_ACTIVE=prod":指定用prod环境配置 docker run -d --name 项目名 -p 主机端口:容器端口 -e "SPRING_PROFILES_ACTIVE=prod" 项目名:latest ``` ### 步骤4:推到Docker Hub,方便爪子云拉取 得先把镜像推到Docker Hub(就是docker.io),爪子云才能拉取部署。按下面步骤来: 1. 先登录你的Docker Hub账号: ```bash # 登录Docker Hub,把“用户名”改成你自己的账号 docker login -u 用户名 ``` 2. 去Docker Hub官网建个私有仓库(存自己的项目镜像,别公开了); 3. 给本地镜像改个标签,要符合Docker Hub的格式(用户名/仓库名:版本): ```bash # 给本地镜像重命名,适配Docker Hub推送格式 docker tag 项目名 用户名/项目名:latest ``` 4. 最后把镜像推上去: ```bash # 推送镜像到Docker Hub的私有仓库 docker push 用户名/项目名:latest ``` ## 四、部署必踩的坑!附解决方案 ### 踩坑2:构建镜像时提示“failed to do request,connect: connection refused” #### 问题原因: Docker默认从国外仓库拉镜像,国内网不好连,所以拉不下来,构建就卡住了。 #### 解决方案:配置国内镜像源加速 ```bash # 用nano打开Docker配置文件(没有就自动创建) nano /etc/docker/daemon.json # 粘贴下面的国内镜像源配置(Ctrl+O保存,Ctrl+X退出) { "registry-mirrors": [ "https://hub-mirror.c.163.com", # 网易镜像源 "https://docker.m.daocloud.io", # DaoCloud镜像源 "https://docker.nju.edu.cn" # 南京大学镜像源 ] } # 重新加载配置 systemctl daemon-reload # 重启Docker,让配置生效 systemctl restart docker ``` 配置完再跑docker build,速度会快很多!如果还是慢,就再找个其他国内收费镜像源试试。 ### 踩坑3:推送镜像时提示“failed to do request,connect: connection refused” #### 问题原因: 推镜像到Docker Hub要连国外服务器,国内网直接连不上;而且镜像只能用docker push推,不能在官网传。 #### 解决方案:用代理打通网络 1. 把VMware的网络设为桥接模式,让虚拟机和主机在同一个局域网; 2. 在主机上打开代理工具,开启局域网共享,记一下主机的局域网IP(比如192.168.1.100); 3. 在Ubuntu里配置网络代理,指向主机的代理地址; 4. 关键一步:给Docker也配置代理: ```bash # 编辑Docker配置文件 nano /etc/docker/daemon.json # 添加代理配置(把127.0.0.1:7890改成你的代理地址和端口) { "proxies": { "http-proxy": "http://127.0.0.1:7890", "https-proxy": "http://127.0.0.1:7890" } } # 重新加载配置并重启Docker systemctl daemon-reload systemctl restart docker ``` 配置完可以在Ubuntu里直接打开浏览器或者用curl命令测试一下就没问题了。 ### 踩坑4:项目部署后连不上线上数据库 #### 问题原因: 阿里云、腾讯云这些线上数据库都开了IP白名单,只有白名单里的IP才能连。爪子云服务器的IP没加进去,自然连不上。 #### 解决方案:把爪子云IP加到数据库白名单 1. 先在爪子云的Terminal里查一下服务器的公网IP: <!----> # 查询当前服务器的公网IP curl ip.sb 2. 登录你的数据库管理控制台,找到“IP白名单”设置,把查到的爪子云IP加进去; 3. 保存配置后,重启一下项目容器,等白名单生效,就能正常连数据库啦。 ## 五、后续优化:前后端都部署好,网站就能跑啦 后端部署到爪子云后,前端项目可以放到GitHub私有仓库里,用Vercel或者Render这些平台,一键自动部署超方便。前后端都弄好,你的网站就能在线访问啦~  ## 六、安全建议 通过部署平台自带的环境变量注入敏感信息,而不是application.yml 
docker 拉取 openjdk 镜像失败
### 问题描述 部署后端应用(例如用户中心后端),编写的 dockerfile 文件,执行第一步拉取 **openjdk:任意版本-jre** 全部失败! 报错信息提示无法访问 docker-hub 仓库 ### 背景信息 docker 环境已配置国内镜像,且拉取mysql、redis、nginx、elasticsearch 镜像均成功,只有 openjdk 镜像拉取不了 也试过从指定国内镜像拉取,也访问不了(添加了国内4大dns) ### 具体疑问 为什么不是首先从国内镜像拉取,转而直接选择了 docker-hub 现在是无法使用 FROM openjdk:17-jre-alpine as builder; 这种形式构建 dockerfile 了吗? ### AI 提问结果 AI说:国内的 openjdk 镜像是锁定版?需要到官网上去拉取
Docker部署PgVector
# Docker 部署 pgVector 笔记 ## 1. 最终 docker-compose.yml(项目根目录) ```yaml version: '3.8' services: pgvector: image: pgvector/pgvector:pg16 # 官方镜像,已内置 vector 扩展 container_name: pgvector restart: always environment: POSTGRES_USER: yuan # 超级用户 POSTGRES_PASSWORD: 123456 # 可 ALTER USER 随时修改 POSTGRES_DB: yuan_ai_agent # 默认库 ports: - "5432:5432" # 宿主机端口 volumes: - ./pgvector_data:/var/lib/postgresql/data # 与 yml 同目录持久化 networks: - pgvector_network networks: pgvector_network: driver: bridge ``` 目录结构 ``` your-project/ ├─ docker-compose.yml └─ pgvector_data/ # 自动创建,无需手动管理 ``` ## 2. 一键启动 / 关闭 ```bash # 启动(首次会自动拉取镜像) docker-compose up -d # 查看日志 docker-compose logs -f # 停止并删除容器 docker-compose down # 同时删除数据卷(谨慎) docker-compose down -v ``` ## 3. 连接方式汇总 | 场景 | 命令 / URL | | ---- | ---------- | | 宿主机 CLI | `psql -h localhost -p 5432 -U yuan -d yuan_ai_agent -W` | | 容器内 CLI | `docker exec -it pgvector psql -U yuan -d yuan_ai_agent` | | JDBC | `jdbc:postgresql://localhost:5432/yuan_ai_agent?user=yuan&password=123456&ssl=false` | | Python | `psycopg2.connect(host='localhost', port=5432, user='yuan', password='123456', dbname='yuan_ai_agent')` | ## 4. 启用向量扩展(仅需一次) ```sql -- 连库后执行 CREATE EXTENSION IF NOT EXISTS vector; SELECT extname FROM pg_extension WHERE extname = 'vector'; -- 验证 ``` ## 5. 快速体验:建表 + 相似度查询 ```sql -- 建表 CREATE TABLE items ( id SERIAL PRIMARY KEY, emb vector(3) ); -- 插入 INSERT INTO items (emb) VALUES ('[1,2,3]'), ('[4,5,6]'); -- 欧氏距离近邻查询 SELECT id, emb, emb <-> '[1,2,3]' AS distance FROM items ORDER BY emb <-> '[1,2,3]' LIMIT 5; ``` ## 6. 修改用户密码 ```bash # 连库后 ALTER USER yuan WITH PASSWORD '新密码'; ``` ## 7. 允许远程访问(可选) 容器内执行 ```bash echo "host all yuan 0.0.0.0/0 md5" >> /var/lib/postgresql/data/pg_hba.conf docker restart pgvector ``` ## 8. 日常排错速查 | 现象 | 可能原因 | 快速处理 | | ---- | -------- | -------- | | `password authentication failed` | 密码错 / 远程未放行 | 改密码 + 加 hba 记录 | | `invalid length of startup packet` | 非 Postgres 协议连 5432 | 确认客户端为 psql/JDBC | | 端口冲突 | 宿主机 5432 被占用 | 改宿主机端口 `5433:5432` | | 数据丢失 | 误删卷 | 仅备份 `./pgvector_data` 目录即可 | ## 9. 备份与恢复 ```bash # 备份(宿主机执行) docker exec pgvector pg_dump -U yuan -Fd yuan_ai_agent -f /tmp/db.dump docker cp pgvector:/tmp/db.dump ./db.dump # 恢复 docker cp ./db.dump pgvector:/tmp/db.dump docker exec pgvector pg_restore -U yuan -d yuan_ai_agent -Fd /tmp/db.dump ``` ## 10. 常用命令备忘录 ```bash docker-compose ps # 容器状态 docker exec -it pgvector bash # 进容器 docker logs pgvector --tail 50 # 实时日志 docker-compose pull # 更新镜像 docker-compose up -d --force-recreate # 重建容器 ``` 至此,pgVector 已可稳定运行于 Docker 环境,支持本地开发与远程服务。 --- 各个系统安装docker 参见 https://zhuanlan.zhihu.com/p/1924864194345431337
nacos:2.2.1版本使用compose报错No DataSource Set怎么解决
```yaml services: mysql: image: mysql:8.0.24 container_name: mysql ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: mredust4 volumes: - /home/docker-data/mysql/conf:/etc/mysql/conf.d - /home/docker-data/mysql/logs:/var/log/mysql - /home/docker-data/mysql/data:/var/lib/mysql networks: - nacos-mysql restart: unless-stopped privileged: true nacos: image: nacos/nacos-server:v2.2.1 container_name: nacos ports: - 8848:8848 - 9848:9848 env_file: - config/nacos.env volumes: - /home/docker-data/nacos/logs:/home/nacos/logs networks: - nacos-mysql depends_on: - mysql restart: unless-stopped privileged: true networks: nacos-mysql: driver: bridge ``` ``` yaml # Nacos 环境配置 PREFER_HOST_MODE=hostname MODE=standalone JVM_XMS=512m JVM_XMX=512m SPRING_DATASOURCE_PLATFORM=mysql # MySQL 连接配置 MYSQL_SERVICE_HOST=mysql MYSQL_SERVICE_PORT=3306 MYSQL_SERVICE_USER=root MYSQL_SERVICE_PASSWORD=mredust4 MYSQL_SERVICE_DB_NAME=nacos_config MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&allowPublicKeyRetrieval=true&queryTimeout=2400&serverTimezone=Asia/Shanghai # 安全配置 NACOS_AUTH_IDENTITY_KEY=admin NACOS_AUTH_IDENTITY_VALUE=admin NACOS_AUTH_TOKEN=secretkey0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz ``` 
Docker的安装
## Docker的安装(Linux版) ### 1.安装gcc以及所需要的软件包 ```shell # 确定你是CentOS7及以上版本 cat /etc/redhat-release yum -y install gcc yum -y install gcc-c++ # 安装需要的软件包 yum install -y yum-utils device-mapper-persistent-data lvm2 ``` ### 2.设置镜像仓库下载其余资源 ```shell # 使用阿里云(以下为一条命令) yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 更新yum软件包索引 yum makecache fast ``` ### 3.安装docker ce(社区版) ```shell yum -y install docker-ce # 手动启动 systemctl start docker # 开机自启 systemctl enable docker # 检查版本 docker version ``` ### 4.配置镜像加速CentOS7版本 1. 登录阿里云镜像加速器网站:[https://cr.console.aliyun.com/cn-beijing/instances/mirrors](https://cr.console.aliyun.com/cn-beijing/instances/mirrors)  <img :src="$withBase('/images/docker/docker.png')" alt="success" /> 2. 进行配置(此处也可以用网站上命令行写入的方式进行配置) ```shell mkdir -p /etc/docker vim /etc/docker/daemon.json # 将自己的配置写入文件中,然后保存并退出 { "registry-mirrors": ["你自己的"] } # 让配置生效 systemctl daemon-reload systemctl restart docker ``` ### 5.Docker-Compose的安装 1. 正常安装 ```shell # 下载 sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 加入执行权限 chmod +x /usr/local/bin/docker-compose # 查看docker-compose版本 docker-compose -v ``` 2. 离线安装 ```shell # 下载;docker-compose-`uname -s`-`uname -m` 查看版本;https://github.com/docker/compose/releases/tag/v2.18.1 # 重命名 mv docker-compose-Linux-x86_64 docker-compose # 加入执行权限 chmod +x /usr/local/bin/docker-compose # 查看docker-compose版本 docker-compose -v ``` ### 大功告成 ### docker的一些指令 | images | 镜像的集合查询。 | | --- | --- | | search | 搜索镜像(从Docker Hub) | | pull | 下载镜像 | | rmi | 删除一个或多个镜像 | | ps | 容器列表 | | rm | 删除一个或多个容器 | | run | 创建一个容器,并运行起来 | | exec | 登录一个容器,使用命令行操作正在运行的容器。 | | cp | 本地文件系统(OS操作系统|宿主机)和容器之间进行文件或者文件夹拷贝 | | save | 导出镜像到一个文件(tar)中 | | start | 启动一个或多个已经停止的容器 | | stop | 停止一个或多个正在运行的容器 | | restart | 重启一个或多个容器 |
初入docker打包-2025年7月21日
## docker安装文档 参考教材:[Docker安装教程详解_docker安装详细步骤-CSDN博客](https://blog.csdn.net/Cike___/article/details/146415836) 1. 连接VPN 下载chrome 2. 下载docker-desktop : https://yeasy.gitbook.io/docker_practice/install/windows 3. 配置并启动 Hyper-V : https://learn.microsoft.com/zh-cn/windows-server/virtualization/hyper-v/get-started/install-hyper-v?tabs=powershell&pivots=windows 4. 配置wsl2 (windows) : [旧版 WSL 的手动安装步骤 | Microsoft Learn](https://learn.microsoft.com/zh-cn/windows/wsl/install-manual) 一定要安装分发版 需要分发版才有后续(待确定,我没装都可以运行docker) 5. 使用wsl2运行docker : https://docs.docker.com/desktop/features/wsl/ ## docker打包: 1. 配置docker镜像源 1. 镜像加速地址:[Docker 镜像加速配置指南 – Rocky Linux](https://www.rockylinux.cn/notes/docker-image-accelerator-and-configuration-guide.html) 2. 配置位置(docker-windows-desktop):  2. 写Dockerfile(最重要) 3. 执行 `docker build -t` (相关命令ai提供) 4. 查看结果:  执行镜像后的内容:  执行镜像时可以配置的参数:  要配置输出文件的地址: 如程序输出的路径为:/robot/output 则如下配置  ## windows打包结果迁移到linux 1. 导出镜像:[windows 将docker desktop上镜像打包并通过资源管理器找到使用 - 数据行者 - 博客园](https://www.cnblogs.com/datawalkman/p/18679413) 1. 打开powershell(管理员) 2. `docker images` 3. 使用 `docker save` 命令将镜像保存为 `.tar` 文件。例如,将 `nginx:latest` 保存为 `nginx_image.tar`: ``` docker save -o nginx_image.tar nginx:latest ``` 4. 默认情况下,`docker save` 会将 `.tar` 文件保存到当前工作目录,即执行命令的所在目录 5. 找到对应文件即可
