first commit

This commit is contained in:
2026-05-10 10:56:52 +08:00
commit 9dec38db60
35 changed files with 8206 additions and 0 deletions
+754
View File
@@ -0,0 +1,754 @@
# Docker 使用手册
## 📖 目录
- [1. Docker 简介](#1-docker-简介)
- [2. 安装 Docker](#2-安装-docker)
- [3. Docker 基本概念](#3-docker-基本概念)
- [4. 镜像管理](#4-镜像管理)
- [5. 容器管理](#5-容器管理)
- [6. Dockerfile 构建](#6-dockerfile-构建)
- [7. Docker Compose](#7-docker-compose)
- [8. 数据管理(Volume)](#8-数据管理volume)
- [9. 网络管理](#9-网络管理)
- [10. 常用命令速查](#10-常用命令速查)
- [11. 最佳实践与注意事项](#11-最佳实践与注意事项)
---
## 1. Docker 简介
Docker 是一个开源的应用容器引擎,让开发者可以打包应用及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 或 Windows 机器上。
### 核心优势
- **轻量级**:容器共享宿主机内核,无需虚拟化完整 OS
- **快速启动**:秒级启动,相比虚拟机分钟级启动更快
- **环境一致**:消除"在我机器上能跑"的问题
- **高效资源**:内存、硬盘、CPU 占用远小于虚拟机
- **易于迁移**:一次构建,随处运行
---
## 2. 安装 Docker
### 2.1 Ubuntu / Debian
```bash
# 更新软件包索引
sudo apt update
# 安装依赖
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 添加 Docker 源
sudo add-apt-repository -y "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 启动并设置开机自启
sudo systemctl enable docker
sudo systemctl start docker
# 将当前用户加入 docker 组(免 sudo 执行)
sudo usermod -aG docker $USER
```
### 2.2 CentOS / RHEL
```bash
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl enable docker
sudo systemctl start docker
```
### 2.3 macOS
下载 [Docker Desktop for Mac](https://hub.docker.com/editions/community/docker-ce-desktop-mac/)
### 2.4 Windows
下载 [Docker Desktop for Windows](https://hub.docker.com/editions/community/docker-ce-desktop-windows/)
### 2.5 验证安装
```bash
docker --version
docker run hello-world
```
---
## 3. Docker 基本概念
| 概念 | 说明 |
|------|------|
| **镜像(Image)** | 一个只读的模板,包含创建容器的说明 |
| **容器(Container)** | 镜像的运行实例,可被启动、停止、删除 |
| **仓库(Repository)** | 集中存放镜像的地方,如 Docker Hub |
| **Dockerfile** | 自动化构建镜像的脚本文件 |
| **Volume** | 持久化存储数据卷 |
| **网络(Network)** | 容器间的通信通道 |
### 三者的关系
```
Dockerfile (构建) --> Image (镜像) --> run --> Container (容器)
↑
Docker Hub (仓库)
```
---
## 4. 镜像管理
### 4.1 搜索镜像
```bash
docker search nginx
docker search --filter stars=1000 ubuntu
```
### 4.2 拉取镜像
```bash
docker pull nginx:latest # 拉取最新版
docker pull ubuntu:20.04 # 拉取指定标签
docker pull registry.cn-hangzhou.aliyuncs.com/library/nginx # 国内镜像加速
```
### 4.3 查看本地镜像
```bash
docker images # 查看所有镜像
docker images -q # 只显示镜像 ID
docker image ls --filter dangling=true # 查看悬空镜像
```
### 4.4 删除镜像
```bash
docker rmi nginx:latest # 删除指定镜像
docker rmi -f <image_id> # 强制删除
docker image prune # 删除悬空镜像
docker image prune -a # 删除所有未使用的镜像
```
### 4.5 镜像标签与导出
```bash
# 打标签
docker tag ubuntu:20.04 myubuntu:v1
# 导出镜像为 tar 文件
docker save -o ubuntu.tar ubuntu:20.04
# 从 tar 文件导入镜像
docker load -i ubuntu.tar
```
### 4.6 登录与推送
```bash
docker login # 登录 Docker Hub
docker push username/myapp:v1 # 推送镜像
```
---
## 5. 容器管理
### 5.1 创建并启动容器
```bash
# 基本启动
docker run nginx
# 后台运行(-d)
docker run -d nginx
# 端口映射(-p 宿主机端口:容器端口)
docker run -d -p 8080:80 nginx
# 命名容器(--name)
docker run -d --name my-nginx -p 8080:80 nginx
# 设置环境变量(-e)
docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
# 挂载数据卷(-v)
docker run -d -v /host/data:/container/data nginx
# 自动删除(--rm,容器停止后自动删除)
docker run --rm -it ubuntu bash
# 交互模式(-it)
docker run -it ubuntu bash
```
### 5.2 查看容器
```bash
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器(含已停止)
docker ps -q # 只显示容器 ID
docker container ls -a # 同 docker ps -a
```
### 5.3 停止、启动、重启容器
```bash
docker stop <container_id/name> # 停止容器
docker start <container_id/name> # 启动已停止的容器
docker restart <container_id/name> # 重启容器
docker pause <container_id/name> # 暂停容器
docker unpause <container_id/name> # 恢复暂停的容器
```
### 5.4 进入容器
```bash
# 推荐方式(exit 不会导致容器停止)
docker exec -it <container_id/name> bash
# 如果容器没有 bash,可以用 sh
docker exec -it <container_id/name> sh
# attach 方式(exit 会导致容器停止)
docker attach <container_id/name>
```
### 5.5 查看日志
```bash
docker logs <container_id/name> # 查看所有日志
docker logs -f <container_id/name> # 实时跟踪日志
docker logs --tail 100 <container_id/name> # 查看最近 100 行
docker logs -t <container_id/name> # 显示时间戳
```
### 5.6 容器内部文件操作
```bash
# 从宿主机拷贝文件到容器
docker cp /host/file.txt container_id:/container/path/
# 从容器拷贝文件到宿主机
docker cp container_id:/container/file.txt /host/path/
```
### 5.7 删除容器
```bash
docker rm <container_id/name> # 删除已停止的容器
docker rm -f <container_id/name> # 强制删除运行中的容器
docker container prune # 删除所有已停止的容器
docker rm $(docker ps -aq) # 删除所有容器
```
### 5.8 查看容器详细信息
```bash
docker inspect <container_id/name> # 查看容器详细信息(JSON)
docker inspect --format '{{.NetworkSettings.IPAddress}}' <container_id>
docker top <container_id/name> # 查看容器中的进程
docker stats # 查看所有容器的资源使用
```
---
## 6. Dockerfile 构建
### 6.1 Dockerfile 指令详解
```dockerfile
# 指定基础镜像
FROM ubuntu:20.04
# 维护者信息
LABEL maintainer="yourname@example.com"
# 设置环境变量
ENV APP_HOME /app
ENV TZ Asia/Shanghai
# 设置工作目录
WORKDIR $APP_HOME
# 运行命令(构建时执行)
RUN apt update && apt install -y python3 python3-pip nginx
# 复制文件到镜像
COPY ./app /app
ADD ./archive.tar.gz /tmp/ # ADD 支持自动解压 tar 和远程 URL
# 暴露端口(仅声明,不实际映射)
EXPOSE 80 443
# 设置卷
VOLUME ["/data", "/config"]
# 运行用户
USER appuser
# 启动命令
CMD ["python3", "app.py"]
# 或使用 ENTRYPOINT(可追加参数)
ENTRYPOINT ["python3"]
CMD ["app.py"] # 作为 ENTRYPOINT 的默认参数
```
### 6.2 构建镜像
```bash
docker build -t myapp:v1 . # 当前目录构建
docker build -t myapp:v1 -f Dockerfile.prod . # 指定 Dockerfile
docker build --no-cache -t myapp:v1 . # 不使用缓存
```
### 6.3 多阶段构建
```dockerfile
# 阶段一:编译
FROM golang:1.19 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
# 阶段二:运行(极小镜像)
FROM alpine:latest
RUN apk add --no-cache ca-certificates
WORKDIR /root/
COPY --from=builder /app/myapp .
EXPOSE 8080
CMD ["./myapp"]
```
### 6.4 优化建议
```dockerfile
# ✅ 合并 RUN 命令,减少层数
RUN apt update && \
apt install -y curl nginx && \
rm -rf /var/lib/apt/lists/*
# ✅ 使用 .dockerignore 忽略不必要的文件
# .dockerignore 文件内容:
# node_modules
# .git
# *.log
# Dockerfile
```
---
## 7. Docker Compose
### 7.1 安装 Docker Compose
```bash
# Linux
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# Ubuntu 通过 apt
sudo apt install -y docker-compose
# 验证
docker-compose --version
```
### 7.2 docker-compose.yml 示例
```yaml
version: '3.8'
services:
# Web 服务
web:
image: nginx:latest
container_name: my-web
ports:
- "8080:80"
- "443:443"
volumes:
- ./html:/usr/share/nginx/html:ro
- ./nginx.conf:/etc/nginx/nginx.conf:ro
networks:
- app-net
depends_on:
- api
restart: always
# API 服务
api:
build:
context: ./api
dockerfile: Dockerfile
container_name: my-api
environment:
- DB_HOST=db
- DB_PORT=3306
volumes:
- ./api:/app
networks:
- app-net
depends_on:
db:
condition: service_healthy
restart: unless-stopped
# 数据库
db:
image: mysql:5.7
container_name: my-db
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-root123}
MYSQL_DATABASE: myapp
volumes:
- mysql-data:/var/lib/mysql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
networks:
- app-net
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
restart: always
# Redis 缓存
redis:
image: redis:7-alpine
container_name: my-redis
ports:
- "6379:6379"
volumes:
- redis-data:/data
networks:
- app-net
restart: always
volumes:
mysql-data:
driver: local
redis-data:
driver: local
networks:
app-net:
driver: bridge
```
### 7.3 Compose 常用命令
```bash
# 启动所有服务(-d 后台运行)
docker-compose up -d
# 构建并启动
docker-compose up -d --build
# 停止并删除容器
docker-compose down
# 停止并删除容器 + 数据卷
docker-compose down -v
# 查看日志
docker-compose logs -f
# 查看服务状态
docker-compose ps
# 重启服务
docker-compose restart
# 执行命令
docker-compose exec web bash
# 查看镜像
docker-compose images
# 拉取最新镜像
docker-compose pull
# 指定配置文件
docker-compose -f docker-compose.prod.yml up -d
```
### 7.4 环境变量管理
```bash
# 创建 .env 文件
echo "DB_PASSWORD=mysecret" > .env
echo "APP_ENV=production" >> .env
# 在 compose 文件中使用 ${VAR_NAME} 引用
# 默认值语法:${VAR_NAME:-default_value}
```
---
## 8. 数据管理(Volume)
### 8.1 Volume 类型
| 类型 | 说明 | 适用场景 |
|------|------|----------|
| **命名卷** | docker 管理的卷,存储在 `/var/lib/docker/volumes/` | 持久化数据库数据 |
| **绑定挂载** | 挂载宿主机目录到容器 | 开发时热更新代码 |
| **tmpfs 挂载** | 存储在内存中 | 敏感数据,临时文件 |
### 8.2 管理 Volume
```bash
# 创建卷
docker volume create my-volume
# 查看卷
docker volume ls
docker volume inspect my-volume
# 删除卷
docker volume rm my-volume
docker volume prune # 删除所有未使用的卷
# 使用卷运行容器
docker run -d -v my-volume:/data nginx
# 绑定挂载
docker run -d -v /host/path:/container/path nginx
# 只读挂载
docker run -d -v /host/path:/container/path:ro nginx
# tmpfs 挂载
docker run -d --tmpfs /tmp:rw,noexec,nosuid,size=100m nginx
```
### 8.3 容器间共享数据
```bash
# 创建数据卷容器
docker create -v /shared-data --name data-container ubuntu
# 其他容器使用 --volumes-from 共享
docker run -d --volumes-from data-container --name app1 nginx
docker run -d --volumes-from data-container --name app2 nginx
```
---
## 9. 网络管理
### 9.1 网络类型
| 网络模式 | 说明 | 适用场景 |
|----------|------|----------|
| **bridge** | 默认,通过虚拟网桥通信 | 单机容器间通信 |
| **host** | 直接使用宿主机网络 | 高性能场景 |
| **none** | 无网络 | 安全隔离 |
| **overlay** | 跨主机通信 | 多节点集群 |
### 9.2 管理网络
```bash
# 创建网络
docker network create --driver bridge my-network
# 创建带子网的网络
docker network create --subnet=172.20.0.0/16 --ip-range=172.20.10.0/24 my-network
# 查看网络
docker network ls
docker network inspect my-network
# 连接容器到网络
docker network connect my-network container_name
# 断开容器网络
docker network disconnect my-network container_name
# 删除网络
docker network rm my-network
docker network prune # 删除所有未使用的网络
```
### 9.3 指定 IP 运行
```bash
docker run -d --network my-network --ip 172.20.10.10 nginx
```
### 9.4 容器间 DNS 解析
同一自定义网络下的容器,可以通过容器名直接通信:
```bash
docker run -d --network my-network --name web nginx
docker run -d --network my-network --name app alpine ping web
```
---
## 10. 常用命令速查
### 10.1 镜像操作
| 命令 | 说明 |
|------|------|
| `docker images` | 列出镜像 |
| `docker pull <image>` | 拉取镜像 |
| `docker push <image>` | 推送镜像 |
| `docker rmi <image>` | 删除镜像 |
| `docker build -t <tag> .` | 构建镜像 |
| `docker tag <old> <new>` | 打标签 |
| `docker save -o file.tar <image>` | 导出镜像 |
| `docker load -i file.tar` | 导入镜像 |
| `docker image prune` | 清理悬空镜像 |
### 10.2 容器操作
| 命令 | 说明 |
|------|------|
| `docker ps -a` | 查看所有容器 |
| `docker run -d --name <name> <image>` | 后台运行容器 |
| `docker exec -it <name> bash` | 进入容器 |
| `docker logs -f <name>` | 查看日志 |
| `docker stop <name>` | 停止容器 |
| `docker start <name>` | 启动容器 |
| `docker restart <name>` | 重启容器 |
| `docker rm -f <name>` | 强制删除容器 |
| `docker cp <name>:/path /local` | 拷贝文件 |
| `docker inspect <name>` | 查看详情 |
| `docker stats` | 查看资源占用 |
| `docker container prune` | 清理已停止容器 |
### 10.3 系统维护
| 命令 | 说明 |
|------|------|
| `docker info` | Docker 系统信息 |
| `docker version` | 版本信息 |
| `docker system df` | 查看磁盘占用 |
| `docker system prune -a` | 清理所有未使用资源 |
| `docker system prune -a --volumes` | 清理全部(含卷) |
---
## 11. 最佳实践与注意事项
### 11.1 安全建议
1. **不使用 root 用户运行容器**:在 Dockerfile 中使用 `USER` 指定非 root 用户
2. **镜像最小化**:使用 alpine 等精简基础镜像
3. **限制资源**:
```bash
docker run -d \
--memory="512m" \
--cpus="1.0" \
--memory-swap="1g" \
--read-only \
nginx
```
4. **定期扫描漏洞**:使用 `docker scan` 或 Trivy 扫描镜像
### 11.2 性能优化
1. **使用 `.dockerignore`**:避免将不必要的文件构建到镜像中
2. **合并 RUN 指令**:减少镜像层数
3. **利用构建缓存**:将不常变化的指令放在 Dockerfile 前面
4. **选择合适的基础镜像**:alpine (~5MB) vs ubuntu (~200MB)
### 11.3 日志与调试
```bash
# 限制容器日志大小(在 docker-compose.yml 中)
services:
app:
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
# 全局设置(daemon.json)
# /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
```
### 11.4 镜像加速器配置
```bash
# /etc/docker/daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
# 重启 Docker
sudo systemctl restart docker
```
### 11.5 清理空间
```bash
# 一键清理(慎用!会删除未使用的镜像、容器、网络、构建缓存)
docker system prune -a
# 只清理构建缓存
docker builder prune
# 查看空间占用
docker system df
```
### 11.6 常见问题排查
```bash
# 1. 容器无法启动 -> 查看日志
docker logs <container_id>
# 2. 端口冲突 -> 查看占用
sudo netstat -tlnp | grep 80
# 3. 磁盘空间不足 -> 清理
docker system prune -a
docker volume prune
# 4. 容器间无法通信 -> 检查网络
docker network inspect <network_name>
# 5. 进入排查模式
docker run -it --rm --network container:<目标容器名> nicolaka/netshoot
```
---
## 附录:资源链接
- [Docker 官方文档](https://docs.docker.com/)
- [Docker Hub](https://hub.docker.com/)
- [Docker Compose 官方文档](https://docs.docker.com/compose/)
- [Dockerfile 最佳实践](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/)
- [Play With Docker(在线实验)](https://labs.play-with-docker.com/)
---
*本文档由 Docker 虚拟机管理助手生成,持续更新中...*
+431
View File
@@ -0,0 +1,431 @@
# Git 使用手册
> 版本: 1.0
> 适用系统: Ubuntu 20.04 / 通用
> Git 版本: 2.25.1+
---
## 目录
1. [Git 简介](#1-git-简介)
2. [安装与配置](#2-安装与配置)
3. [基础操作](#3-基础操作)
4. [分支管理](#4-分支管理)
5. [远程仓库](#5-远程仓库)
6. [撤销与回退](#6-撤销与回退)
7. [标签管理](#7-标签管理)
8. [常见工作流程](#8-常见工作流程)
9. [常用命令速查表](#9-常用命令速查表)
---
## 1. Git 简介
Git 是一个**分布式版本控制系统**,由 Linus Torvalds 于 2005 年创建。它能够高效地处理从小型到大型项目的版本管理,是目前最流行的版本控制工具。
### 核心特点
- **分布式**: 每个开发者本地都有完整的代码仓库
- **高效**: 针对文件差异和分支操作进行了优化
- **数据完整性**: 所有数据在存储前都会计算校验和
- **支持非线性开发**: 轻量级分支,鼓励分支开发
---
## 2. 安装与配置
### 2.1 在 Ubuntu/Debian 上安装
```bash
# 更新软件包列表
sudo apt update
# 安装 Git
sudo apt install -y git
# 验证安装
git --version
```
### 2.2 在 CentOS/RHEL 上安装
```bash
sudo yum install -y git
```
### 2.3 基本配置
```bash
# 配置用户名(提交时记录)
git config --global user.name "Your Name"
# 配置邮箱
git config --global user.email "your_email@example.com"
# 配置默认分支名(Git 2.28+)
git config --global init.defaultBranch main
# 配置默认文本编辑器
git config --global core.editor "vim"
# 查看当前配置
git config --list
```
> 配置文件的优先级: 项目级 `.git/config` > 全局 `~/.gitconfig` > 系统级 `/etc/gitconfig`
---
## 3. 基础操作
### 3.1 创建仓库
```bash
# 在当前目录初始化新仓库
git init
# 克隆远程仓库
git clone <仓库地址>
git clone <仓库地址> <本地目录名>
```
### 3.2 文件状态
Git 文件有三种状态:**已修改 (modified)**、**已暂存 (staged)**、**已提交 (committed)**
```bash
# 查看文件状态
git status
# 以简洁模式查看
git status -s
```
状态标识说明:
- `??` - 未跟踪的文件
- `M` - 已修改
- `A` - 已暂存
- `D` - 已删除
### 3.3 添加与提交
```bash
# 添加文件到暂存区
git add <文件名> # 添加指定文件
git add . # 添加所有变更
git add -A # 添加所有变更(包括删除)
git add -p # 交互式分段添加
# 提交到本地仓库
git commit -m "提交说明"
git commit -am "提交说明" # 跳过 git add(仅对已跟踪文件有效)
# 修改最后一次提交
git commit --amend -m "新的提交说明"
```
### 3.4 查看历史
```bash
# 查看提交历史
git log
git log --oneline # 简洁模式
git log --graph # 图形化显示
git log --all # 显示所有分支
git log -p # 显示差异内容
git log --author="名字" # 按作者筛选
git log --since="2024-01-01" # 按时间筛选
# 查看某个文件的修改历史
git log -p <文件名>
git blame <文件名> # 每行最后修改者
```
---
## 4. 分支管理
### 4.1 创建与切换
```bash
# 查看分支列表
git branch # 本地分支
git branch -r # 远程分支
git branch -a # 所有分支
# 创建分支
git branch <分支名>
# 切换分支
git checkout <分支名>
git switch <分支名> # 新式语法
# 创建并切换分支
git checkout -b <分支名>
git switch -c <分支名>
# 重命名分支
git branch -m <旧名> <新名>
```
### 4.2 合并与变基
```bash
# 合并指定分支到当前分支
git merge <分支名>
# 变基操作(将当前分支的提交移至目标分支顶端)
git rebase <分支名>
# 交互式变基(合并、修改提交记录)
git rebase -i HEAD~3 # 修改最近 3 个提交
```
> **合并 vs 变基**: 合并保留完整历史,变基使历史更线性。公共分支推荐使用合并,个人分支可使用变基。
### 4.3 删除分支
```bash
# 删除本地分支
git branch -d <分支名> # 安全删除(会检查是否已合并)
git branch -D <分支名> # 强制删除
# 删除远程分支
git push origin --delete <分支名>
```
---
## 5. 远程仓库
### 5.1 管理远程仓库
```bash
# 查看远程仓库
git remote -v
# 添加远程仓库
git remote add origin <仓库地址>
# 修改远程仓库地址
git remote set-url origin <新地址>
# 删除远程仓库
git remote remove origin
```
### 5.2 推送与拉取
```bash
# 推送到远程仓库
git push origin <分支名>
git push -u origin <分支名> # 首次推送,建立关联
git push --all # 推送所有分支
git push origin --tags # 推送所有标签
# 拉取远程更新
git pull # 拉取并合并(相当于 fetch + merge)
git pull --rebase # 拉取并变基(推荐)
git fetch # 仅拉取,不自动合并
```
### 5.3 处理冲突
```bash
# 当合并或拉取产生冲突时:
# 1. 编辑冲突文件,保留需要的内容
# 2. 标记为已解决
git add <已解决冲突的文件>
# 3. 完成合并
git commit
# 中止合并
git merge --abort
```
---
## 6. 撤销与回退
### 6.1 撤销工作区修改
```bash
# 恢复文件到最近一次提交的状态
git checkout -- <文件名>
git restore <文件名> # 新式语法
```
### 6.2 撤销暂存区
```bash
# 将文件从暂存区移出(保留工作区修改)
git reset HEAD <文件名>
git restore --staged <文件名> # 新式语法
```
### 6.3 回退提交
```bash
# 软重置(保留工作区和暂存区修改)
git reset --soft HEAD~1
# 混合重置(保留工作区,清空暂存区)- 默认模式
git reset --mixed HEAD~1
# 硬重置(丢弃所有修改)- 谨慎使用!
git reset --hard HEAD~1
# 回退到指定提交
git reset --hard <提交哈希>
# 生成一个新的反向提交来撤销修改
git revert HEAD # 撤销最近一次提交
git revert <提交哈希>
```
> `git reset` 与 `git revert` 的区别:`reset` 会删除提交历史,`revert` 会保留历史并新增一个反向提交。公共分支应使用 `revert`。
---
## 7. 标签管理
```bash
# 创建标签
git tag <标签名> # 轻量标签
git tag -a <标签名> -m "说明" # 附注标签
# 查看标签
git tag
git tag -l "v1.*" # 匹配模式
# 推送标签到远程
git push origin <标签名>
git push origin --tags
# 删除标签
git tag -d <标签名>
git push origin --delete <标签名>
```
---
## 8. 常见工作流程
### 8.1 Git Flow 工作流
适用于有固定发布周期的项目:
- `main` - 主分支,存放稳定版本
- `develop` - 开发分支
- `feature/*` - 功能分支
- `release/*` - 发布分支
- `hotfix/*` - 紧急修复分支
### 8.2 GitHub Flow
适用于持续交付的项目:
1. 从 `main` 创建功能分支
2. 提交修改
3. 发起 Pull Request
4. 代码评审 + 自动化测试
5. 合并回 `main`
6. 立即部署
### 8.3 日常开发流程示例
```bash
# 1. 更新主分支
git checkout main
git pull
# 2. 创建功能分支
git checkout -b feature/my-feature
# 3. 开发并提交
git add .
git commit -m "feat: 添加新功能"
# 4. 同步上游变更
git fetch origin
git rebase origin/main
# 5. 推送并创建 Pull Request
git push -u origin feature/my-feature
```
---
## 9. 常用命令速查表
| 操作 | 命令 |
|------|------|
| 初始化仓库 | `git init` |
| 克隆仓库 | `git clone <url>` |
| 查看状态 | `git status` |
| 添加文件 | `git add <file>` |
| 提交 | `git commit -m "msg"` |
| 查看日志 | `git log --oneline --graph` |
| 创建分支 | `git branch <name>` |
| 切换分支 | `git switch <name>` |
| 创建+切换 | `git switch -c <name>` |
| 合并分支 | `git merge <name>` |
| 推送 | `git push origin <branch>` |
| 拉取 | `git pull --rebase` |
| 查看差异 | `git diff` |
| 暂存修改 | `git stash` |
| 恢复暂存 | `git stash pop` |
| 查看远程 | `git remote -v` |
---
## 附录
### .gitignore 文件示例
```gitignore
# 编译输出
*.o
*.class
*.exe
*.dll
# 依赖目录
node_modules/
vendor/
__pycache__/
# IDE 配置
.vscode/
.idea/
*.swp
# 系统文件
.DS_Store
Thumbs.db
# 环境配置
.env
*.local
```
### 提交信息规范
推荐使用 [Conventional Commits](https://www.conventionalcommits.org/) 规范:
```
<类型>(<范围>): <简短描述>
<详细描述>
<尾部信息>
```
类型包括:`feat`、`fix`、`docs`、`style`、`refactor`、`test`、`chore` 等。
---
> 本文档持续更新中...
> 更多信息请访问 [Git 官方文档](https://git-scm.com/doc)
Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

+189
View File
@@ -0,0 +1,189 @@
# NVM (Node Version Manager) 使用文档
## 一、什么是 NVM?
NVM(Node Version Manager)是一个用于管理多个 Node.js 版本的工具。它可以让你在同一台机器上安装、切换和使用不同版本的 Node.js,非常适合需要兼顾不同项目 Node.js 版本需求的开发者。
---
## 二、安装 NVM
### 2.1 一键安装
```bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
```
### 2.2 加载 NVM
安装完成后,需要重新加载终端或者执行以下命令使 nvm 生效:
```bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
```
### 2.3 验证安装
```bash
nvm --version
```
---
## 三、配置镜像源(加速 Node.js 下载)
在国内使用 nvm 下载 Node.js 时,建议配置淘宝镜像源以提高下载速度。
### 临时配置(仅当前会话生效)
```bash
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
```
### 永久配置(写入 shell 配置文件)
```bash
echo 'export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node' >> ~/.bashrc
source ~/.bashrc
```
---
## 四、NVM 常用命令
### 4.1 安装 Node.js
```bash
# 安装最新稳定版
nvm install node
# 安装指定版本
nvm install 20.11.0
# 安装最新的 LTS 版本
nvm install --lts
```
### 4.2 查看可安装的版本
```bash
# 列出所有可安装的版本
nvm ls-remote
# 列出所有 LTS 版本
nvm ls-remote --lts
```
### 4.3 切换 Node.js 版本
```bash
# 使用指定版本
nvm use 20.11.0
# 使用最新稳定版
nvm use node
# 使用最新的 LTS 版本
nvm use --lts
```
### 4.4 查看已安装的版本
```bash
nvm ls
```
### 4.5 设置默认版本
```bash
# 设置系统默认使用的 Node.js 版本
nvm alias default 20.11.0
# 将最新稳定版设为默认
nvm alias default node
```
### 4.6 卸载 Node.js 版本
```bash
nvm uninstall 20.11.0
```
---
## 五、版本管理实践
### 5.1 为项目指定 Node.js 版本
在项目根目录创建 `.nvmrc` 文件:
```bash
# .nvmrc 文件内容示例
20.11.0
```
然后在该目录下运行 `nvm use` 即可自动切换到对应版本。
### 5.2 查看当前使用的版本
```bash
node -v
npm -v
```
### 5.3 版本别名管理
```bash
# 创建别名
nvm alias myapp 20.11.0
# 使用别名切换
nvm use myapp
# 删除别名
nvm unalias myapp
```
---
## 六、常见问题
### 6.1 命令找不到(command not found)
如果重启终端后出现 `nvm: command not found`,请确保已将 nvm 加载命令添加到 `~/.bashrc`、`~/.zshrc` 或 `~/.profile` 文件中。
### 6.2 下载速度慢
配置淘宝镜像源即可解决:
```bash
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
```
### 6.3 权限问题
使用 nvm 安装的 Node.js 不需要 `sudo` 权限,如果遇到权限问题,请检查是否使用了系统自带的 Node.js。
---
## 七、常用命令速查表
| 命令 | 说明 |
|------|------|
| `nvm --version` | 查看 nvm 版本 |
| `nvm install <version>` | 安装指定版本 |
| `nvm install node` | 安装最新稳定版 |
| `nvm install --lts` | 安装最新 LTS 版本 |
| `nvm use <version>` | 切换使用指定版本 |
| `nvm ls` | 列出已安装版本 |
| `nvm ls-remote` | 列出远程所有版本 |
| `nvm alias default <version>` | 设置默认版本 |
| `nvm uninstall <version>` | 卸载指定版本 |
| `nvm current` | 显示当前使用的版本 |
---
> 文档版本: v1.0
> 最后更新: 2025年
+424
View File
@@ -0,0 +1,424 @@
# uv 使用文档
> uv 是一个用 Rust 编写的极速 Python 包管理与工具链管理器,由 Astral 公司(Ruff 作者)开发。
> 它可替代 pip、pip-tools、pipx、poetry、pyenv、virtualenv 等多个工具。
---
## 目录
1. [简介](#1-简介)
2. [安装与配置](#2-安装与配置)
3. [核心命令速查](#3-核心命令速查)
4. [Python 版本管理](#4-python-版本管理)
5. [虚拟环境管理](#5-虚拟环境管理)
6. [包管理](#6-包管理)
7. [项目工作流](#7-项目工作流)
8. [镜像源配置](#8-镜像源配置)
9. [常见问题](#9-常见问题)
---
## 1. 简介
### 1.1 什么是 uv?
uv 是一个"大一统"的 Python 工具链,具备以下核心能力:
| 功能 | 对应传统工具 |
|------|------------|
| Python 版本安装与管理 | pyenv |
| 虚拟环境创建 | venv / virtualenv |
| 包安装 | pip |
| 依赖锁定 | pip-tools / poetry |
| 工具包运行 | pipx |
| 脚本依赖管理 | 原生支持 |
### 1.2 核心优势
- **极快速度**:比 pip 快 10-100 倍
- **单一二进制**:无需 Python 即可安装 uv
- **兼容性强**:兼容 pip 的工作流和 requirements.txt
- **全面替代**:一个工具解决 Python 环境所有问题
---
## 2. 安装与配置
### 2.1 一键安装(推荐)
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```
安装后重启终端或执行:
```bash
source $HOME/.local/bin/env
```
### 2.2 其他安装方式
**macOS (Homebrew):**
```bash
brew install uv
```
**Linux (apt/手动):**
```bash
# 下载二进制
curl -LsSf https://astral.sh/uv/install.sh | sh
```
**Windows (PowerShell):**
```powershell
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
```
### 2.3 验证安装
```bash
uv --version
# 输出示例: uv 0.11.11 (x86_64-unknown-linux-gnu)
```
### 2.4 配置国内镜像源(加速)
创建配置文件 `~/.config/uv/uv.toml`:
```toml
# Python 版本下载镜像源
python-install-mirror = "https://registry.npmmirror.com/-/binary/python-build-standalone/"
# pip 包下载镜像源(阿里云)
[[index]]
url = "https://mirrors.aliyun.com/pypi/simple/"
default = true
```
也可通过环境变量临时设置:
```bash
export UV_PYTHON_INSTALL_MIRROR="https://registry.npmmirror.com/-/binary/python-build-standalone/"
```
---
## 3. 核心命令速查
| 命令 | 说明 |
|------|------|
| `uv python install <版本>` | 安装指定 Python 版本 |
| `uv python list` | 列出可用的 Python 版本 |
| `uv venv` | 创建虚拟环境 |
| `uv pip install <包>` | 安装 Python 包 |
| `uv pip sync requirements.txt` | 同步依赖 |
| `uv run <文件>` | 在虚拟环境中运行脚本 |
| `uv add <包>` | 向项目添加依赖 |
| `uv lock` | 生成锁定文件 |
| `uv tool run <工具>` | 运行工具包(类似 pipx) |
| `uv init` | 初始化新项目 |
| `uv build` | 构建分发包 |
---
## 4. Python 版本管理
### 4.1 查看可安装的 Python 版本
```bash
# 列出所有可下载的版本
uv python list --only-downloads
# 列出已安装的版本
uv python list
```
### 4.2 安装指定 Python 版本
```bash
# 安装最新 Python 3.12
uv python install 3.12
# 安装具体版本
uv python install 3.11.11
# 安装多个版本
uv python install 3.10 3.11 3.12
```
### 4.3 查看与切换当前 Python
```bash
# 查看当前使用的 Python
uv python
# 查找特定版本的路径
uv python find 3.11
# 为项目固定 Python 版本
uv python pin 3.12
```
### 4.4 卸载 Python 版本
```bash
# uv 安装的 Python 存储在 ~/.local/share/uv/python/
# 直接删除对应目录即可
rm -rf ~/.local/share/uv/python/cpython-3.10*
```
---
## 5. 虚拟环境管理
### 5.1 创建虚拟环境
```bash
# 在当前目录创建 .venv(使用默认 Python)
uv venv
# 指定 Python 版本创建
uv venv --python 3.12
# 指定名称
uv venv myenv
```
### 5.2 激活虚拟环境
```bash
# Linux / macOS
source .venv/bin/activate
# Windows
.venv\Scripts\activate
```
> **提示**:uv 会自动检测并使用当前目录下的 `.venv`,无需手动激活也可通过 `uv run` 使用。
### 5.3 删除虚拟环境
```bash
# 直接删除 .venv 目录即可
rm -rf .venv
```
---
## 6. 包管理
uv 兼容 pip 的全部功能,且速度更快。
### 6.1 安装包
```bash
# 安装单个包
uv pip install requests
# 安装指定版本
uv pip install "flask>=2.0"
# 从 requirements.txt 安装
uv pip install -r requirements.txt
# 从 pyproject.toml 安装
uv pip install -e .
```
### 6.2 管理已安装的包
```bash
# 列出已安装的包
uv pip list
# 查看包信息
uv pip show requests
# 检查依赖冲突
uv pip check
# 卸载包
uv pip uninstall requests
```
### 6.3 依赖锁定
```bash
# 根据 requirements.in 编译出锁定文件
uv pip compile requirements.in -o requirements.txt
# 同步环境到锁定状态
uv pip sync requirements.txt
```
---
## 7. 项目工作流
### 7.1 初始化新项目
```bash
# 创建新项目
uv init my_project
cd my_project
# 添加依赖
uv add requests flask
# 安装所有依赖
uv sync
# 运行项目
uv run python main.py
```
### 7.2 脚本依赖管理(Shebang 方式)
在 Python 脚本顶部添加内联元数据,自动管理依赖:
```python
# /// script
# dependencies = [
# "requests>=2.28",
# "rich>=13.0",
# ]
# ///
import requests
from rich import print
response = requests.get("https://api.github.com")
print(response.status_code)
```
运行方式:
```bash
uv run script.py
```
> uv 会自动创建隔离环境并安装依赖,无需手动管理!
### 7.3 工具包管理(替代 pipx)
```bash
# 安装工具包
uv tool install ruff
# 运行工具(无需安装)
uv tool run black --help
# 列出已安装的工具
uv tool list
# 升级工具
uv tool upgrade ruff
# 卸载工具
uv tool uninstall ruff
```
---
## 8. 镜像源配置
### 8.1 配置文件方式
编辑 `~/.config/uv/uv.toml`:
```toml
# ========== Python 版本下载镜像 ==========
python-install-mirror = "https://registry.npmmirror.com/-/binary/python-build-standalone/"
# ========== 包下载镜像源 ==========
[[index]]
url = "https://mirrors.aliyun.com/pypi/simple/"
default = true
# 可配置多个备用镜像源
[[index]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple/"
```
### 8.2 环境变量方式
```bash
# Python 版本下载镜像
export UV_PYTHON_INSTALL_MIRROR="https://registry.npmmirror.com/-/binary/python-build-standalone/"
# 包下载镜像(临时覆盖)
export UV_INDEX_URL="https://mirrors.aliyun.com/pypi/simple/"
```
### 8.3 常用国内镜像源
| 镜像源 | Python 版本镜像 URL | PyPI 镜像 URL |
|--------|-------------------|--------------|
| 华为云 | `https://repo.huaweicloud.com/python` | `https://mirrors.huaweicloud.com/repository/pypi/simple` |
| 阿里云 | - | `https://mirrors.aliyun.com/pypi/simple/` |
| 清华大学 | `https://mirrors.tuna.tsinghua.edu.cn/python` | `https://pypi.tuna.tsinghua.edu.cn/simple/` |
| 中科大 | `https://mirrors.ustc.edu.cn/python` | `https://pypi.mirrors.ustc.edu.cn/simple/` |
---
## 9. 常见问题
### Q1: 安装时遇到权限问题?
```bash
# 确保 ~/.local/bin 在 PATH 中
export PATH="$HOME/.local/bin:$PATH"
```
### Q2: 如何更新 uv?
```bash
uv self update
```
### Q3: uv 和 pip 能否共存?
完全可以。uv 兼容 pip 的工作流,两者可共存使用。建议逐步迁移到 uv。
### Q4: 如何查看帮助?
```bash
# 通用帮助
uv help
# 子命令帮助
uv python --help
uv pip --help
```
### Q5: 如何卸载 uv?
```bash
# 删除二进制文件
rm ~/.local/bin/uv ~/.local/bin/uvx
# 删除配置
rm -rf ~/.config/uv
# 删除缓存
rm -rf ~/.cache/uv
# 删除安装的 Python 版本
rm -rf ~/.local/share/uv
```
### Q6: 为什么我执行 `uv python install` 下载很慢?
请检查是否已配置国内镜像源(参见第 8 节),或手动设置:
```bash
export UV_PYTHON_INSTALL_MIRROR="https://registry.npmmirror.com/-/binary/python-build-standalone/"
```
---
## 参考资源
- [uv 官方文档](https://docs.astral.sh/uv/)
- [uv GitHub 仓库](https://github.com/astral-sh/uv)
- [华为云 Python 镜像](https://repo.huaweicloud.com/python)
- [阿里云 PyPI 镜像](https://mirrors.aliyun.com/pypi/simple/)