first commit
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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/)
|
||||
Reference in New Issue
Block a user