chore: 清理 .trae 旧文件,新增多篇博客文章
- 删除 .trae/ 目录(Trae IDE 旧配置) - 删除 temp-agent-os-v2.md - 新增:AI时代的Token战争——能源算力与我们每个人的选择 - 新增:自建Git服务——在NAS上部署Gitea - 新增:Docker安装与入门指南 - 更新:Git团队协作指南 - 更新:recent-files-obsidian 插件数据
This commit is contained in:
@@ -0,0 +1,198 @@
|
||||
---
|
||||
title: AI 时代的 Token 战争:能源、算力与我们每个人的选择
|
||||
slug: ai-token
|
||||
categories:
|
||||
- 技术思考
|
||||
tags:
|
||||
- 技术深潜
|
||||
- AI智能体
|
||||
halo:
|
||||
site: https://blog.liuhangyv.top
|
||||
name: da325dee-9575-45ea-8593-192c39402edc
|
||||
publish: false
|
||||
---
|
||||
# AI 时代的 Token 战争:能源、算力与我们每个人的选择
|
||||
|
||||
> "Token 是电的加工计价单位。同一个 Token,可以用来发现抗癌新药,也可以用来生成一段毫无意义的废话。它的价值,由使用者决定。"
|
||||
|
||||
---
|
||||
|
||||
## 一、引言:一个新的"工业时代"正在开启
|
||||
|
||||
2024 年,一家软件公司包下了一座核电站未来 20 年的全部发电量。
|
||||
|
||||
这不是科幻小说,这是微软对三哩岛核电站的真实操作。1979 年,这里发生过美国历史上最严重的核事故,2 号反应堆永久关停。45 年后,微软签下了一份合同——买断 1 号机组未来 20 年的全部电力,只为喂饱它那些永远吃不饱的 AI 数据中心。
|
||||
|
||||
而在地球的另一端,中东的产油国们正在做一件意味深长的事:他们不再只卖石油,而是开始大规模建设清洁能源基地和算力中心。沙特、阿联酋正在向全世界宣告——未来,我们要卖 Token。
|
||||
|
||||
**一个新的"工业时代"正在悄悄开启**。但这次跟蒸汽时代、电气时代不一样:它的基础设施不再是铁路和电网,而是 GPU 集群和核电站;它的流通货币不再是钢铁和石油,而是一个叫 **Token** 的东西。
|
||||
|
||||
这篇文章,我想和你聊聊这个新时代的真实图景——以及为什么它的结局,可能取决于你我每个人在屏幕前的每一个选择。
|
||||
|
||||
---
|
||||
|
||||
## 二、巨头全链布局:从芯片到核电站
|
||||
|
||||
### 2.1 微软:从三哩岛到 Azure,全链条通吃
|
||||
|
||||
2024 年,微软干了几件让整个科技圈震动的事:
|
||||
|
||||
**第一件事:包下核电站。** 微软与三哩岛核电站 1 号机组签订了 20 年购电协议,买断了其全部发电量。一个软件公司,为什么需要一座核电站?答案很简单:**AI 太耗电了**。训练一次 GPT-4 级别的模型,耗电量相当于一个小型城镇一年的用电量。而推理服务——也就是你每次跟 ChatGPT 聊天——每天都在消耗天文数字的电力。
|
||||
|
||||
**第二件事:联合英伟达推出 RTX Spark 芯片。** 这枚芯片的意义在于,微软和英伟达共同喊出了一句口号:"我们重新发明了 PC。"但背后的真实逻辑是什么?往下看英伟达的部分你会明白。
|
||||
|
||||
**第三件事:通过 Azure 云整合 AI 上下游。** 从算力基础设施(Azure)到模型服务(OpenAI 的合作),再到终端芯片(RTX Spark),微软正在构建一个完整的闭环。它要的不是某个环节的利润,而是整个 AI 产业链的主导权。
|
||||
|
||||
### 2.2 英伟达:当游戏显卡不再是主业
|
||||
|
||||
翻开英伟达 2025 财年的财报,你会发现一个惊人的数字:
|
||||
|
||||
**游戏显卡业务收入占比:仅 8.8%。**
|
||||
|
||||
对,就是那个靠"为游戏玩家造显卡"起家的英伟达,如今游戏业务已经不足总收入的十分之一。你会发现,它现在真正的客户是微软、谷歌、亚马逊这些云计算巨头,是企业级数据中心,是全世界的 AI 公司。
|
||||
|
||||
但问题来了——**这种集中度意味着焦虑**。英伟达的命脉掌握在少数几个大客户手里,任何一个客户开始自研芯片,都会对英伟达造成巨大冲击。这就是为什么黄仁勋要联手微软推出 RTX Spark 芯片——**它要开辟 C 端市场,把 AI 算力卖给每一个普通人**。
|
||||
|
||||
这枚芯片的商业逻辑是这样的:
|
||||
- B 端市场虽然单价高,但客户集中、议价能力强
|
||||
- C 端市场虽然单价低,但用户基数巨大、分散度高
|
||||
- 如果每个 PC 都内置一块 AI 推理芯片,英伟达就不需要担心任何一个大客户的离开
|
||||
|
||||
### 2.3 OpenAI 与微软:从盟友到对手
|
||||
|
||||
曾几何时,OpenAI 和微软是 AI 领域最耀眼的 CP 组合。微软出钱出算力,OpenAI 出模型出技术,双方各取所需。
|
||||
|
||||
但到了 2024-2025 年,这对盟友的关系正在发生微妙的变化。OpenAI 不再满足于做微软的"模型供应商",它开始自己构建算力基础设施,自己对接企业客户,甚至开始推出与 Azure 竞争的服务。而微软也在自研模型、扩大合作范围,不再把鸡蛋全部放在 OpenAI 一个篮子里。
|
||||
|
||||
**这条产业链上的每个玩家,都在试图控制更多环节。** 因为在这个时代,谁控制了能源→算力→模型→应用的完整链条,谁就掌握了定价权。
|
||||
|
||||
---
|
||||
|
||||
## 三、国家级的电力争夺战
|
||||
|
||||
### 3.1 美国:科技巨头"抢电"进行时
|
||||
|
||||
美国的科技巨头们正在上演一场疯狂的"抢电大战"。亚马逊、谷歌、微软、Meta——每一家都在以惊人的速度建设数据中心,每一家都在满世界找电力供应。
|
||||
|
||||
这不是夸张。AI 数据中心的耗电量正在以指数级增长。一个超大规模数据中心,单日耗电量可以达到一个中型城市的水平。而当几十个这样的数据中心同时在建设时,电力供应就成了最稀缺的资源。
|
||||
|
||||
**微软包下三哩岛核电站,只是这场"抢电大战"的一个缩影。**
|
||||
|
||||
### 3.2 爱尔兰:被数据中心"吃垮"的电网
|
||||
|
||||
也许你会觉得,美国的事离我们很远。那我们来看看爱尔兰。
|
||||
|
||||
2015 年到 2024 年,爱尔兰数据中心耗电占比从 **5%** 飙升至 **22%**。
|
||||
|
||||
也就是说,爱尔兰全国超过五分之一的电力,被数据中心吃掉了。
|
||||
|
||||
这导致的结果是:爱尔兰政府宣布,**2028 年之前不再批准新的数据中心接入电网**。一个国家,因为 AI 太耗电,不得不主动限制这个新兴产业的发展。这是历史上从来没有发生过的事。
|
||||
|
||||
### 3.3 中东:从卖石油到卖 Token
|
||||
|
||||
最有意思的格局变化,发生在中东。
|
||||
|
||||
沙特、阿联酋这些传统产油国,正在大规模投建清洁能源基地和算力中心。他们的逻辑很清晰:**过去我们卖石油给工业时代提供能量,未来我们要卖 Token 给 AI 时代提供算力。**
|
||||
|
||||
从化石能源到算力经济,这是一次深刻的经济转型。而这些国家手中的筹码也很实在:充足的阳光(太阳能)、广阔的土地(建数据中心)、雄厚的资本(投资基础设施)。
|
||||
|
||||
他们看到的是:**21 世纪的石油,叫 Token。**
|
||||
|
||||
### 3.4 中国:电力充裕 + 国产芯片,走性价比路线
|
||||
|
||||
中国在这场 AI 竞赛中的地位非常独特。
|
||||
|
||||
一方面,中国的电力供应相对充裕——我们的发电量是世界第一,电网基础设施也更加完善。另一方面,中国在国产 AI 芯片上的投入正在加速,虽然与英伟达还有差距,但在特定场景下已经可以实现替代。
|
||||
|
||||
**中国走的是性价比路线**:不需要在每个环节都做到世界顶尖,但要确保全链条的自主可控和成本优势。当美国在用一座核电站喂数据中心的时候,中国在做的是用更低的成本、更广泛的电力网络、更贴近应用场景的算力部署来找到自己的位置。
|
||||
|
||||
---
|
||||
|
||||
## 四、Token:新时代的计价单位
|
||||
|
||||
### 4.1 Token 的本质是什么?
|
||||
|
||||
说了这么多,我们来聊聊最核心的概念:**Token 到底是什么?**
|
||||
|
||||
简单来说,**Token 是电力的加工计价单位。**
|
||||
|
||||
输入电力 → 驱动 GPU → 运行模型 → 产出 Token。这就是 AI 时代的基本生产函数。Token 是这个链条的最终产出物,就像工业时代的钢铁、石油时代的汽油一样。
|
||||
|
||||
但 Token 有一个非常特殊的性质:**相同成本的 Token,使用价值可以天差地别。**
|
||||
|
||||
### 4.2 同一个 Token,两种命运
|
||||
|
||||
请想象两个场景:
|
||||
|
||||
**场景 A**:一家药企的科研人员,用 100 万个 Token 让 AI 辅助分析蛋白质结构,推动了抗癌新药的研发进程。这些 Token 的价值,可能在未来拯救成千上万人的生命。
|
||||
|
||||
**场景 B**:一个无聊的用户,用 100 万个 Token 让 AI 生成了一堆没有意义的废话,看完就关掉了窗口。这些 Token 的价值,趋近于零。
|
||||
|
||||
**Token 的生产成本是一样的,电费是一样的,GPU 折旧是一样的。但使用价值的差异,可以大到无法衡量。**
|
||||
|
||||
这就是 AI 时代的核心困境:**我们正在以惊人的速度生产 Token,但如何提高 Token 的价值密度,才是真正的问题。**
|
||||
|
||||
### 4.3 泡沫的风险
|
||||
|
||||
当前 AI 行业的商业模型,很大程度上建立在"烧钱换增长"的逻辑之上。融资 → 买算力 → 训练模型 → 烧 Token → 融资更多钱 → 买更多算力……
|
||||
|
||||
AI 公司亏损是常态,盈利是例外。**整个行业的主要资金来源不是用户的付费,而是投资机构的融资。**
|
||||
|
||||
如果有一天,资本市场开始质疑这个循环的可持续性——当"你的 Token 创造了什么实际价值"变成一个必须回答的问题,泡沫就可能破裂。
|
||||
|
||||
而避免泡沫的关键,不在于生产更多 Token,而在于**每个 Token 是否被用在真正有价值的地方**。
|
||||
|
||||
---
|
||||
|
||||
## 五、回归本质:谁决定了 AI 时代的走向?
|
||||
|
||||
### 5.1 不是巨头,不是国家,而是你我
|
||||
|
||||
聊完巨头、聊完国家、聊完产业链,我们回到最初的问题:**我们,该怎么面对这个充满 AI 的世界?**
|
||||
|
||||
微软可以包下核电站,英伟达可以推出新芯片,沙特可以建数据中心——但这些只是供给侧的故事。
|
||||
|
||||
**AI 时代的结局,不是由供给决定的,而是由需求决定的。** 或者说得更准确一点:**Token 的价值,由每一个使用它的人决定。**
|
||||
|
||||
当我们在屏幕上输入每一个提示词、提出每一个问题时,我们就在给这个系统注入价值信号。你在用 Token 做什么?你是在高效地解决问题,还是在低效率地消耗算力?
|
||||
|
||||
**这不是一个宏大叙事,而是一个微观选择。** 亿万个微观选择的集合,最终会塑造这个行业的走向。
|
||||
|
||||
### 5.2 独立思考是这个时代最稀缺的能力
|
||||
|
||||
这个时代最危险的不是 AI 不够强大,而是人类放弃思考。
|
||||
|
||||
当 AI 可以帮你写文章、做决策、分析数据、甚至替你聊天的时候,**"自己思考"反而变成了最难能可贵的事情**。因为用 AI 思考太容易了——输入问题,得到答案,不需要动脑。
|
||||
|
||||
但如果你不再思考,你就变成了 AI 的附庸。你的 Token 将永远是低价值的——因为你只是在消费信息,而不是在创造价值。
|
||||
|
||||
**独立思考的能力,在这个时代不是可选项,而是必需品。**
|
||||
|
||||
### 5.3 提高 Token 的价值密度
|
||||
|
||||
最后,我想给每个人一个具体可操作的建议:**提高你生产/消费的每一个 Token 的价值密度。**
|
||||
|
||||
具体来说:
|
||||
- 用 AI 来学习一个你真正需要的技能,而不是生成一堆你不会再看的文字
|
||||
- 用 AI 来分析一个问题,而不是让它替你做一个你懒得做的决定
|
||||
- 用 AI 来辅助创造,而不是用它来替代思考
|
||||
|
||||
**每一个 Token 都是一张选票。你在为什么投票?**
|
||||
|
||||
---
|
||||
|
||||
## 六、结语
|
||||
|
||||
1979 年,三哩岛的核事故让整个世界对核能产生了恐惧。
|
||||
|
||||
45 年后,同一座核电站的另一台机组,正在为人类历史上最强大的智能机器提供动力。
|
||||
|
||||
**时代变了,但人性没有变。** 每一次技术革命,都有人抓住机会创造了伟大的价值,也有人被浪潮裹挟着随波逐流。
|
||||
|
||||
AI 时代不会因为巨头们的布局、国家间的博弈而自动走向美好的未来。它的走向,最终取决于每一个坐在这块屏幕前的我们——**是否还在独立思考,是否还在为每一个 Token 赋予真实的意义。**
|
||||
|
||||
这大概就是这个时代,我们每个人都必须回答的问题。
|
||||
|
||||
---
|
||||
|
||||
> **#独立思考 #AI #微软 #英伟达 #经济**
|
||||
@@ -0,0 +1,124 @@
|
||||
# 在宿舍 NAS 上搭建 Gitea:一个自己的 GitHub
|
||||
|
||||
> 校园网封了 22 端口?SMB 写文件权限炸了?sshpass 吃特殊字符?两天踩的坑都在这了。
|
||||
|
||||
## 起因
|
||||
|
||||
手上项目越来越多,GitHub 国内访问不稳定,Gitee 又有仓库数量限制。刚好手边有台绿联 DXP-2800 NAS(N100 处理器,8GB 内存,跑 Debian 12),不如自己搭个 Git 服务——代码完全在自己硬盘上,不用联网也能 push,想建多少个私有仓库都行。
|
||||
|
||||
## 选型
|
||||
|
||||
对比了几个方案:
|
||||
|
||||
| 方案 | 优点 | 缺点 |
|
||||
|------|------|------|
|
||||
| GitLab | 功能最全,内置 CI/CD | 吃内存,N100 扛不动 |
|
||||
| Gogs | Go 语言,轻量 | 社区不如 Gitea 活跃 |
|
||||
| Gitea | Go 语言,GitHub 风格,安装简单 | 够用就行 |
|
||||
|
||||
GitLab 最低要求 4GB 内存,加上 NAS 上已经跑了 14 个 Docker 容器(Halo 博客、qBittorrent、PostgreSQL、一堆 Cloudflare Tunnel……),资源不够。**Gitea** 用 SQLite 单用户跑,内存占用不到 256MB,选它。
|
||||
|
||||
## 部署
|
||||
|
||||
docker-compose 文件很简单:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
gitea:
|
||||
image: gitea/gitea:latest
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /volume1/docker/gitea/data:/data
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
ports:
|
||||
- "3000:3000" # Web UI
|
||||
- "2222:22" # SSH(避开 NAS 主机的 22 端口)
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
- GITEA__database__DB_TYPE=sqlite3
|
||||
- GITEA__server__DOMAIN=192.168.5.8
|
||||
- GITEA__server__SSH_DOMAIN=192.168.5.8
|
||||
- GITEA__server__SSH_PORT=2222
|
||||
- GITEA__server__ROOT_URL=http://192.168.5.8:3000/
|
||||
- GITEA__server__APP_NAME=LHY Git
|
||||
mem_limit: 512m
|
||||
cpus: 1
|
||||
```
|
||||
|
||||
`docker compose up -d`,一分钟起好。访问 `http://192.168.5.8:3000`,注册第一个账号即为管理员。
|
||||
|
||||
## 踩坑:SSH 排错
|
||||
|
||||
Gitea 部署完了,但到推送的时候卡住了。问题出在 SSH 认证链路。
|
||||
|
||||
### 第一关:GitHub 连不上
|
||||
|
||||
`ssh -T git@github.com` 一直 Permission denied,密钥指纹是对的,GitHub 后台也确认加好了。排查了半天发现——**校园网封了 22 端口**。
|
||||
|
||||
改走 443 秒通:
|
||||
|
||||
```bash
|
||||
ssh -T -p 443 git@ssh.github.com
|
||||
# Hi LHY0125! You've successfully authenticated...
|
||||
```
|
||||
|
||||
解决:在 `~/.ssh/config` 里把 GitHub 永久改成 443:
|
||||
|
||||
```
|
||||
Host github.com
|
||||
HostName ssh.github.com
|
||||
Port 443
|
||||
User git
|
||||
IdentityFile ~/.ssh/id_ed25519
|
||||
```
|
||||
|
||||
### 第二关:NAS 密钥认证失败
|
||||
|
||||
`ssh LHY@192.168.5.8` 每次都要输密码,即使公钥已经加到了 `authorized_keys`。
|
||||
|
||||
排查过程:
|
||||
|
||||
1. **SSH config 问题** — 配了不存在的 `id_rsa` 私钥,改了。
|
||||
2. **`authorized_keys` 换行丢失** — 通过 SMB(F: 盘)追加公钥时,旧文件末尾没有换行,导致新旧两行粘在一起。用 `cat -A` 检查后修复。
|
||||
3. **权限问题** — 这是坑最大的。SMB 写文件不会正确保留 Unix 权限,sshd 要求 `~/.ssh` 必须是 700、`authorized_keys` 必须是 600、家目录不能 group-writable。修复命令:
|
||||
|
||||
```bash
|
||||
chmod 700 ~/.ssh
|
||||
chmod 600 ~/.ssh/authorized_keys
|
||||
chmod 750 ~
|
||||
```
|
||||
|
||||
### 第三关:sshpass 吃特殊字符
|
||||
|
||||
密码里有个 `@`,`sshpass -p` 参数怎么传都报 Permission denied。试了引号、转义、文件读取都不行。后来发现不是工具问题,是密码本身在 NAS 上已经不是这个了——手动输入能登,说明只是自动化传输特殊字符有问题。**解决:不用密码,用密钥。**
|
||||
|
||||
## 推送
|
||||
|
||||
两个仓库 `novel-hub` 和 `rl-atari` 推上去。Novel 秒推,rl-atari 有 2.2G(含 PDF 文件),SSH 推这个体量的仓库慢得离谱,换成 HTTP 一次过:
|
||||
|
||||
```bash
|
||||
git remote set-url origin http://192.168.5.8:3000/LHY/rl-atari.git
|
||||
git push -u origin main
|
||||
```
|
||||
|
||||
推完切回 SSH,日常小 update 没压力。
|
||||
|
||||
## 效果
|
||||
|
||||
现在 `http://192.168.5.8:3000` 就是我的代码中心:
|
||||
|
||||
- Web 界面和 GitHub/Gitee 一模一样:Issues、Pull Request、Wiki、Actions
|
||||
- 局域网内 push/pull 走 NAS 千兆,几秒搞定
|
||||
- 不需要互联网,代码完全在自己硬盘上
|
||||
- 想建多少个私有仓库都行,不受任何限制
|
||||
|
||||
## 后续
|
||||
|
||||
下一步打算:
|
||||
- 用 Cloudflare Tunnel 把 Gitea 暴露到公网,不在宿舍也能 push
|
||||
- 给 Gitea 配 GitHub Actions Runner,实现本地 CI/CD
|
||||
- 把学校课程设计的代码库全部迁移过来
|
||||
|
||||
---
|
||||
|
||||
**总结**:自托管 Git 服务的门槛比想象中低很多。Docker 部署十分钟,SSH 排错花了大半天。核心教训——校园网封 22 端口、SMB 写文件要注意权限、密钥比密码靠谱。
|
||||
@@ -0,0 +1,408 @@
|
||||
---
|
||||
title: Docker 安装与入门指南
|
||||
date: 2026-05-08
|
||||
author: liuhangyv
|
||||
excerpt: 从零开始学习 Docker:详解 Windows 下通过 Docker Desktop 安装 Docker 的完整流程,以及云服务器(阿里云)上的 Docker 部署方式,附带常用命令速查。
|
||||
|
||||
---
|
||||
|
||||
# Docker 安装与入门指南
|
||||
|
||||
本文面向**零基础读者**,从环境准备到安装完成,一步一步带你上手 Docker。内容聚焦两种最常见的安装场景:
|
||||
|
||||
- **场景一**:Windows 本机通过 Docker Desktop 安装 Docker
|
||||
- **场景二**:云服务器(以阿里云为例)上安装 Docker
|
||||
|
||||
本文不涉及 Docker Compose、多容器编排等进阶内容,力求用最短的篇幅帮你把 Docker **跑起来**。
|
||||
|
||||
---
|
||||
|
||||
## 1. 什么是 Docker?为什么需要它?
|
||||
|
||||
Docker 是一个**容器化平台**,它把应用程序和它的所有依赖打包在一起,形成一个独立的"容器",这个容器可以在任何装了 Docker 的机器上运行,不会因为系统环境不同而出问题。
|
||||
|
||||
**一句话理解**:Docker 就像一个轻量级的虚拟机,但比虚拟机快得多、占用资源少得多。
|
||||
|
||||
**典型场景**:
|
||||
|
||||
- 你在 Windows 上开发,但服务器是 Linux——用 Docker,代码在哪跑都一样
|
||||
- 你想学数据库,但不想在本机装一堆服务——Docker 一行命令就能起一个 MySQL/PostgreSQL
|
||||
- 你想跑别人写的开源项目,但环境配置太复杂——Docker 一个命令全部搞定
|
||||
|
||||
---
|
||||
|
||||
## 2. 场景一:Windows 下安装 Docker Desktop
|
||||
|
||||
Docker Desktop 是 Docker 官方为 Windows 用户提供的一键安装方案,内置了 WSL2 后端、图形化管理界面,也是官方的推荐方式。
|
||||
|
||||
### 2.1 下载与安装
|
||||
|
||||
1. 访问 [Docker 官网](https://www.docker.com/products/docker-desktop/),点击 **Download for Windows**
|
||||
2. 下载完成后运行安装程序,**所有默认选项保持不动即可**,安装程序会自动配置好 WSL2
|
||||
3. 安装完成后重启电脑
|
||||
4. 重启后 Docker Desktop 会自动启动,你可以在系统托盘看到 Docker 的鲸鱼图标
|
||||
|
||||
> **说明**:Docker Desktop 安装时会自动安装 WSL2 并创建两个 WSL 发行版(`docker-desktop` 和 `docker-desktop-data`),你无需手动安装 Ubuntu,也不需要关心 WSL2 的细节。
|
||||
|
||||
### 2.2 验证安装
|
||||
|
||||
打开 **PowerShell** 或 **命令提示符**,执行:
|
||||
|
||||
```powershell
|
||||
# 检查 Docker 版本
|
||||
docker --version
|
||||
# 输出示例:Docker version 28.0.1, build ...
|
||||
|
||||
# 检查 Docker Compose 版本(已内置)
|
||||
docker compose version
|
||||
|
||||
# 运行测试容器
|
||||
docker run --rm hello-world
|
||||
```
|
||||
|
||||
看到 `Hello from Docker!` 就说明安装成功了。
|
||||
|
||||
### 2.3 日常使用
|
||||
|
||||
Docker Desktop 开机后会自动在后台运行。使用时直接在 PowerShell 或终端中敲 `docker` 命令即可,和 Linux 下的体验完全一致。
|
||||
|
||||
小技巧:右键点击系统托盘的鲸鱼图标,可以快速打开 Dashboard 图形化管理界面,查看所有容器、镜像、数据卷的状态。
|
||||
|
||||
---
|
||||
|
||||
## 3. 场景二:云服务器上安装 Docker
|
||||
|
||||
拥有一台云服务器是学习 Docker 的理想方式——它能 24 小时运行,你可以部署自己的服务并随时随地访问。
|
||||
|
||||
### 3.1 选购云服务器
|
||||
|
||||
以笔者的**阿里云 ECS** 为例:
|
||||
|
||||
| 项目 | 配置 |
|
||||
|------|------|
|
||||
| **实例规格** | 2 vCPU / 2 GiB 内存 |
|
||||
| **操作系统** | Ubuntu 22.04 LTS(64 位) |
|
||||
| **系统盘** | 40 GiB ESSD |
|
||||
| **公网 IP** | 101.133.128.193 |
|
||||
| **带宽** | 按量计费 |
|
||||
|
||||
> **学生党建议**:阿里云有学生优惠,一年几十块钱就能买到基础配置的 ECS,足够学习使用。
|
||||
|
||||
购买时注意:
|
||||
- 操作系统选 **Ubuntu 22.04** 或 **Ubuntu 24.04**,生态最好
|
||||
- 安全组(防火墙)默认只开放 22(SSH)端口,后续根据需要手动开放其他端口
|
||||
- 创建时选择密钥对登录,比密码更安全
|
||||
|
||||
### 3.2 登录服务器
|
||||
|
||||
```bash
|
||||
# 使用 SSH 连接(替换 IP 为你的服务器 IP)
|
||||
ssh root@你的服务器IP
|
||||
|
||||
# 如果使用密钥
|
||||
ssh -i ~/.ssh/你的密钥 root@你的服务器IP
|
||||
```
|
||||
|
||||
> 笔者的习惯:创建一个普通用户 `admin` 来管理,避免直接使用 `root`。并配置 `~/.ssh/authorized_keys` 实现免密登录。
|
||||
|
||||
### 3.3 安装 Docker(与 Ubuntu 下完全一致)
|
||||
|
||||
登录服务器后,执行的安装命令和 Linux 下完全一致。由于阿里云的 Ubuntu 是标准的 Linux 系统,安装步骤与上面 Windows 无关——下面是完整的安装命令:
|
||||
|
||||
```bash
|
||||
# 安装 Docker Engine(适用于 Ubuntu)
|
||||
sudo apt update
|
||||
sudo apt install -y ca-certificates curl gnupg lsb-release
|
||||
|
||||
sudo install -m 0755 -d /etc/apt/keyrings
|
||||
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
|
||||
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
|
||||
https://download.docker.com/linux/ubuntu \
|
||||
$(lsb_release -cs) stable" | \
|
||||
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
|
||||
sudo apt update
|
||||
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||||
|
||||
# 将当前用户加入 docker 组
|
||||
sudo usermod -aG docker $USER
|
||||
newgrp docker
|
||||
```
|
||||
|
||||
### 3.4 云服务器的额外配置
|
||||
|
||||
服务器重启后 Docker **会自动随系统启动**(通过 systemd 管理),无需额外配置。
|
||||
|
||||
但需要配置**安全组(防火墙)**,否则外部无法访问你的服务:
|
||||
|
||||
1. 登录阿里云控制台 → ECS → 安全组
|
||||
2. 添加规则,例如:
|
||||
|
||||
| 方向 | 端口 | 协议 | 用途 |
|
||||
|------|------|------|------|
|
||||
| 入方向 | 80 | TCP | HTTP |
|
||||
| 入方向 | 443 | TCP | HTTPS |
|
||||
| 入方向 | 8080 | TCP | 测试应用 |
|
||||
| 入方向 | 3000 | TCP | Node.js 开发 |
|
||||
|
||||
> ⚠️ 不要开放 22(SSH)的源 IP 为 `0.0.0.0/0`,建议仅允许你的 IP。数据库端口(如 3306、5432)也不要对公网开放。
|
||||
|
||||
---
|
||||
|
||||
## 4. Docker 基本使用
|
||||
|
||||
安装完成后,我们来上手几个最核心的命令。
|
||||
|
||||
### 4.1 运行你的第一个容器
|
||||
|
||||
```bash
|
||||
# 运行 Nginx 网页服务器
|
||||
docker run -d --name my-nginx -p 8080:80 nginx:latest
|
||||
```
|
||||
|
||||
参数说明:
|
||||
- `-d`:后台运行
|
||||
- `--name my-nginx`:给容器取名
|
||||
- `-p 8080:80`:把宿主机的 8080 端口映射到容器的 80 端口
|
||||
- `nginx:latest`:使用的镜像名和标签
|
||||
|
||||
现在打开浏览器,访问:
|
||||
- 本地:`http://localhost:8080`
|
||||
- 云服务器:`http://你的服务器IP:8080`
|
||||
|
||||
你应该能看到 Nginx 的欢迎页面。
|
||||
|
||||
### 4.2 常用命令速查
|
||||
|
||||
```bash
|
||||
# ========== 容器管理 ==========
|
||||
|
||||
# 查看运行中的容器
|
||||
docker ps
|
||||
|
||||
# 查看所有容器(包括已停止的)
|
||||
docker ps -a
|
||||
|
||||
# 停止容器
|
||||
docker stop 容器名
|
||||
|
||||
# 启动已停止的容器
|
||||
docker start 容器名
|
||||
|
||||
# 重启容器
|
||||
docker restart 容器名
|
||||
|
||||
# 删除容器(需先停止)
|
||||
docker rm 容器名
|
||||
|
||||
# 强制删除运行中的容器
|
||||
docker rm -f 容器名
|
||||
|
||||
# 进入容器内部
|
||||
docker exec -it 容器名 bash
|
||||
|
||||
# 查看容器日志(-f 实时跟踪)
|
||||
docker logs -f 容器名
|
||||
|
||||
# ========== 镜像管理 ==========
|
||||
|
||||
# 搜索镜像
|
||||
docker search nginx
|
||||
|
||||
# 拉取镜像
|
||||
docker pull 镜像名:标签
|
||||
|
||||
# 查看本地镜像
|
||||
docker images
|
||||
|
||||
# 删除镜像
|
||||
docker rmi 镜像名
|
||||
|
||||
# ========== 清理 ==========
|
||||
|
||||
# 清理停止的容器、未使用的镜像和网络
|
||||
docker system prune -a
|
||||
```
|
||||
|
||||
### 4.3 快速搭建一个数据库
|
||||
|
||||
这是学习 Docker 最实用的场景——一行命令起一个数据库:
|
||||
|
||||
```bash
|
||||
# PostgreSQL
|
||||
docker run -d \
|
||||
--name my-postgres \
|
||||
-e POSTGRES_USER=admin \
|
||||
-e POSTGRES_PASSWORD=your_password \
|
||||
-e POSTGRES_DB=mydb \
|
||||
-p 5432:5432 \
|
||||
-v pgdata:/var/lib/postgresql/data \
|
||||
postgres:16-bookworm
|
||||
|
||||
# MySQL
|
||||
docker run -d \
|
||||
--name my-mysql \
|
||||
-e MYSQL_ROOT_PASSWORD=your_password \
|
||||
-e MYSQL_DATABASE=mydb \
|
||||
-p 3306:3306 \
|
||||
-v mysqldata:/var/lib/mysql \
|
||||
mysql:8.0
|
||||
|
||||
# Redis
|
||||
docker run -d \
|
||||
--name my-redis \
|
||||
-p 6379:6379 \
|
||||
-v redisdata:/data \
|
||||
redis:7-alpine
|
||||
```
|
||||
|
||||
关键参数:
|
||||
- `-e`:设置环境变量(数据库密码等)
|
||||
- `-v 卷名:容器内路径`:持久化数据,容器删除后数据不丢失
|
||||
- `postgres:16-bookworm`:镜像名:标签,指定具体版本避免意外升级
|
||||
|
||||
---
|
||||
|
||||
## 5. 图形化管理 Docker
|
||||
|
||||
命令行功能强大,但对于初学者,图形化界面更直观。这里介绍两种方式——Windows 上的 Docker Desktop Dashboard,和云服务器上的 1Panel。
|
||||
|
||||
### 5.1 Docker Desktop Dashboard(Windows 本地)
|
||||
|
||||
Docker Desktop 自带了一个图形化管理界面,无需额外安装:
|
||||
|
||||
- **打开方式**:右键系统托盘的鲸鱼图标 → 点击 **Dashboard**
|
||||
- **功能**:
|
||||
- **Containers(容器)**:查看所有容器状态、启停、删除、查看日志、进入终端,全部鼠标点击完成
|
||||
- **Images(镜像)**:浏览本地镜像、拉取新镜像、删除无用镜像
|
||||
- **Volumes(数据卷)**:查看和管理持久化数据
|
||||
- **搜索**:内置 Docker Hub 搜索,找到镜像一键 Pull
|
||||
|
||||
对于日常的启停、看日志、删容器等操作,Dashboard 比敲命令方便得多。
|
||||
|
||||
### 5.2 1Panel —— 云服务器上的"应用商店"式管理
|
||||
|
||||
在云服务器上,没有图形界面可用。但借助 **1Panel** 这类 Linux 服务器管理面板,你可以通过浏览器像操作手机 App 一样管理 Docker。
|
||||
|
||||
1Panel 是一个开源的 Linux 服务器运维面板,内置了 Docker 可视化管理功能。笔者的阿里云服务器就在使用它。
|
||||
|
||||
**安装 1Panel**(一条命令完成):
|
||||
|
||||
```bash
|
||||
# SSH 登录云服务器后执行
|
||||
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh
|
||||
```
|
||||
|
||||
安装完成后会显示:
|
||||
|
||||
```
|
||||
===============================
|
||||
1Panel 安装成功!
|
||||
面板地址: http://你的IP:端口/
|
||||
用户名: xxxxxx
|
||||
密码: xxxxxx
|
||||
===============================
|
||||
```
|
||||
|
||||
> 安装前确保安全组已开放 1Panel 的访问端口(默认是随机端口,安装完成后会显示)。
|
||||
|
||||
**用 1Panel 管理 Docker**:
|
||||
|
||||
登录 1Panel 后,进入 **容器** 菜单:
|
||||
|
||||
| 功能 | 说明 |
|
||||
|------|------|
|
||||
| **应用商店** | 一键安装 MySQL、Redis、Nginx、WordPress 等 100+ 应用,填写表单即可部署 |
|
||||
| **容器管理** | 查看启停状态、资源占用、日志、终端,与 Docker Desktop 体验一致 |
|
||||
| **Compose 模板** | 粘贴 `docker-compose.yaml` 内容,点击部署,无需敲命令 |
|
||||
| **镜像管理** | 搜索、拉取、删除镜像,支持配置镜像加速 |
|
||||
| **网络/数据卷** | 可视化创建和管理网络与数据卷 |
|
||||
|
||||
**以安装 MySQL 为例**:
|
||||
|
||||
1. 左侧菜单 → **应用商店**
|
||||
2. 搜索 "MySQL",点击 **安装**
|
||||
3. 填写:数据库名、密码、端口(可保持默认 3306),勾选"端口外部访问"
|
||||
4. 点击 **确认**,等待十几秒即可完成
|
||||
|
||||
相比前面 4.3 节一长串的命令行参数,在 1Panel 里填几个表单框就搞定了。
|
||||
|
||||
> 笔者的 1Panel 实际配置:面板端口 `21471`,通过 Nginx 反向代理绑定域名,日常管理非常方便。
|
||||
|
||||
---
|
||||
|
||||
## 6. 下一步学什么?
|
||||
|
||||
当你已经能用 `docker run` 熟练启动单个容器后,下一步自然的学习路径:
|
||||
|
||||
1. **Docker Compose** —— 用 YAML 文件管理多容器应用,一条命令启动整个项目
|
||||
2. **Dockerfile** —— 自己编写镜像构建文件,把项目打包成镜像
|
||||
3. **数据持久化** —— 深入理解 Volume 和 Bind Mount
|
||||
4. **网络配置** —— 容器间通信、自定义网络
|
||||
|
||||
可以参考同一目录下的 [Docker 部署完全指南](./Docker部署完全指南.md) 深入学习后续内容。
|
||||
|
||||
---
|
||||
|
||||
## 附录:安装问题排查
|
||||
|
||||
### 问题一:`docker` 命令提示 "The command 'docker' was not found"
|
||||
|
||||
**原因**:Docker Desktop 未正确安装或未启动。
|
||||
|
||||
**解决**:
|
||||
|
||||
- 检查系统托盘中 Docker 图标是否存在;如果没有,从开始菜单手动启动 Docker Desktop
|
||||
- 等待鲸鱼图标停止动画后重试
|
||||
|
||||
### 问题二:Docker Desktop 启动后一直转圈(Starting...)
|
||||
|
||||
**原因**:WSL2 未正确安装或版本过旧。
|
||||
|
||||
**解决**:
|
||||
|
||||
```powershell
|
||||
# 以管理员身份打开 PowerShell
|
||||
wsl --update
|
||||
wsl --set-default-version 2
|
||||
|
||||
# 重启 Docker Desktop
|
||||
```
|
||||
|
||||
### 问题三:云服务器上访问服务端口失败
|
||||
|
||||
**原因**:安全组(防火墙)未开放对应端口。
|
||||
|
||||
**解决**:登录云服务器控制台,在安全组中添加入方向规则,开放对应端口。
|
||||
|
||||
### 问题四:拉取镜像速度慢
|
||||
|
||||
**原因**:Docker Hub 在国内访问较慢。
|
||||
|
||||
**解决**:配置国内镜像源。
|
||||
|
||||
**云服务器(Linux)**:
|
||||
|
||||
```bash
|
||||
sudo tee /etc/docker/daemon.json <<'EOF'
|
||||
{
|
||||
"registry-mirrors": [
|
||||
"https://docker.m.daocloud.io",
|
||||
"https://docker.1panel.live"
|
||||
]
|
||||
}
|
||||
EOF
|
||||
sudo systemctl restart docker
|
||||
```
|
||||
|
||||
**Docker Desktop(Windows)**:
|
||||
|
||||
打开 Docker Desktop → 右上角齿轮(Settings)→ Docker Engine,将上面的 `registry-mirrors` 配置合并到现有 JSON 中,点击 "Apply & Restart"。
|
||||
|
||||
---
|
||||
|
||||
*本文由河南理工大学人工智能协会整理*
|
||||
*2026年5月*
|
||||
@@ -401,13 +401,13 @@ Git是分布式版本控制系统,这意味着每个开发者的电脑上都
|
||||
|
||||
**本地仓库 vs 远程仓库**
|
||||
|
||||
| 特性 | 本地仓库 | 远程仓库 |
|
||||
|------|---------|---------|
|
||||
| **位置** | 你的电脑 | 服务器(GitHub/Gitee等) |
|
||||
| **用途** | 日常开发和提交 | 团队共享和备份 |
|
||||
| **操作** | `git commit` | `git push/pull` |
|
||||
| **网络要求** | 无需网络 | 需要网络连接 |
|
||||
| **所有权** | 完全可控 | 团队共享 |
|
||||
| 特性 | 本地仓库 | 远程仓库 |
|
||||
| -------- | ------------ | ------------------ |
|
||||
| **位置** | 你的电脑 | 服务器(GitHub/Gitee等) |
|
||||
| **用途** | 日常开发和提交 | 团队共享和备份 |
|
||||
| **操作** | `git commit` | `git push/pull` |
|
||||
| **网络要求** | 无需网络 | 需要网络连接 |
|
||||
| **所有权** | 完全可控 | 团队共享 |
|
||||
|
||||
**常见的远程仓库服务**:
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user