Leon's Blog

分享一点有趣的技术

0%

最简虚拟机配置

image-20250606105520769

日常工作中,有时候组内服务器权限限制,一些小的项目尝试在本地跑会更方便。这个博客主要记录一些vmware使用中的要点,方便自己日后回顾,因此多为命令行罗列,具体细节理解提供可参考博客链接。

内存空间管理

交换空间和内存扩展

在编译诸如LLVM等项目时,经常会由于内存空间不够而中断,可以通过扩展内存或是扩展交换空间的方式解决这个问题。step by step的详细介绍可以参考VMware 交换空间博客介绍。如下是简易的steps:

  1. 虚拟机设置

    • 修改虚拟机内存,点击确定
  2. 点击编辑,首选项,扩展内存(需要关机)

  3. 下载gparted

    1
    sudo apt install gparted
  4. 运行gparted,然后将unused的灰色内存空间勾选为linux-swap

  5. 在gparted中,点击swap空间(我的在sda4上),点击information,记录uuid号

  6. sudo vim /etc/fstab,修改swapspace处:

    image-20250606125138939

  7. sudo swapon /dev/sda4,启用swapspace

  8. 用free -m指令查看:

    image-20250606125728013

​ 可以看到成功扩容了Mem和Swap

SSH配置相关

ssh配置比较基础,直接参考博客即可:ssh配置

PIP和APT包管理

pip和apt工具是开发过程中常用的两个包管理工具,区别如下:

  • pip:Python包的安装工具,用于从Python Package Index (PyPI) 安装Python库。
  • apt:Debian/Ubuntu系统的包管理工具,用于安装系统和应用程序级别的软件(主要是用C/C++等编译的二进制程序,也包括Python、Perl等脚本语言编写的系统级工具)。

更详细的对比见下表:

对比维度 pip (Python 包管理) apt (Debian/Ubuntu 系统包管理)
管理对象 Python 库和程序 系统级软件(C/C++程序、服务等)
依赖范围 仅 Python 依赖 系统级依赖(共享库、系统服务等)
安装位置 用户目录或虚拟环境(~/.local/lib) 系统目录(/usr, /bin, /etc)
隔离机制 虚拟环境 全局安装
包来源 PyPI(Python 包索引) Ubuntu/Debian 官方仓库和 PPA
安装权限 普通用户权限 需要 sudo 权限
跨平台支持 支持所有操作系统 仅限 Debian/Ubuntu 系 Linux
依赖解析 简单树状结构 复杂拓扑关系
典型用途 pip install numpy sudo apt install python3-numpy
版本控制 可精确指定版本 安装仓库提供的稳定版本
配置文件 requirements.txt /etc/apt/sources.list
包结构 Wheel 或源码包 预编译 .deb 包
安装示例 TensorFlow, Flask, PyTorch gcc, nginx, docker

PIP换源

临时换源,用清华镜像:

1
pip install package -i https://pypi.tuna.tsinghua.edu.cn/simple

常用国内镜像源:

镜像名称 URL 推荐指数
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple ⭐⭐⭐⭐⭐
阿里云 https://mirrors.aliyun.com/pypi/simple ⭐⭐⭐⭐
中科大 https://pypi.mirrors.ustc.edu.cn/simple ⭐⭐⭐⭐
豆瓣 https://pypi.doubanio.com/simple ⭐⭐⭐
华为云 https://repo.huaweicloud.com/repository/pypi/simple ⭐⭐⭐⭐

apt换源

直接修改sources.list,需要sudo权限。

1
2
sudo sed -i 's|http://.*archive.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list
sudo sed -i 's|http://.*security.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list

Proxy代理配置

下载东西可以配置proxy,翻墙加速,步骤如下:

  1. clash for windows设置LAN为打开状态

  2. 在服务器的terminal中设置环境变量:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # download 代理
    export http_proxy="http://192.168.31.174:7890"
    export https_proxy="http://192.168.31.174:7890"

    # 验证代理
    git config --global --get http.proxy
    git config --global --get https.proxy

    # 只对github 做代理
    git config --global http.https://github.com.proxy https://192.168.31.174:7890

    git config --global http.https.proxy https://192.168.31.174:7890
    git config --global http.http.proxy http://192.168.31.174:7890

    # 取消代理
    git config --global --unset http.proxy
    git config --global --unset https.proxy
    git config --global --unset http.https://github.com.proxy

参考VMware虚拟机通过宿主机的clash for windows访问外部节点,可以编写一个小的脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/bin/bash
# encoding: utf-8

Proxy_IP=192.168.1.10
Proxy_Port=7890

# Set System Proxy
function xyon(){
export https_proxy=http://$Proxy_IP:$Proxy_Port
export http_proxy=http://$Proxy_IP:$Proxy_Port
export all_proxy=socks5://$Proxy_IP:$Proxy_Port
echo -e "System Proxy is $Proxy_IP:$Proxy_Port"
}

# unSet System Proxy
function xyoff(){
unset all_proxy
unset https_proxy
unset http_proxy
echo -e "System Proxy is Disabled"
}

# Default Function is Set Proxy
if [ $# != 0 ]
then
if [ $1 == 'off' ]
then
xyoff
elif [ $1 == 'on' ]
then
xyon
else
echo "Please Input on or off!"
fi
else
echo "Please input command."
fi

Docker命令大全

容器生命周期管理

命令 说明 常用参数
docker run 创建并启动新容器 -it(交互式)
-d(后台运行)
--name(命名)
-p(端口映射)
-v(卷挂载)
--rm(退出后自动删除)
docker start 启动已停止的容器 -a(附加输出)
-i(交互式)
docker stop 停止运行中的容器 -t(超时时间)
docker restart 重启容器
docker pause/unpause 暂停/恢复容器进程
docker rm 删除容器 -f(强制删除运行中容器)
-v(同时删除卷)

容器运维操作

命令 说明 常用参数
docker exec 在运行中容器执行命令 -it(交互式终端)
-e(设置环境变量)
docker ps 查看容器列表 -a(显示所有容器)
-q(仅显示ID)
--format(自定义格式)
docker logs 查看容器日志 -f(实时跟踪)
--tail N(显示最后N行)
docker inspect 查看容器详情 --format '{{.NetworkSettings.IPAddress}}'(提取特定信息)
docker stats 实时监控容器资源 --no-stream(单次输出)

镜像管理

命令 说明 常用参数
docker pull 拉取镜像 -a(所有标签)
--platform(指定架构)
docker push 推送镜像到仓库
docker build 构建镜像 -t(打标签)
--no-cache(禁用缓存)
-f(指定Dockerfile)
docker images 列出本地镜像 -q(仅显示ID)
--digests(显示摘要)
docker rmi 删除镜像 -f(强制删除)
docker tag 给镜像打标签
docker history 查看镜像构建历史

数据管理

命令 说明 常用参数
docker volume create 创建数据卷 --name
docker volume ls 列出数据卷
docker volume inspect 查看卷详情
docker volume rm 删除数据卷

网络管理

命令 说明 常用参数
docker network create 创建网络 --driver(驱动类型)
--subnet(子网)
docker network ls 列出网络
docker network connect 连接容器到网络
docker network inspect 查看网络详情

系统管理

命令 说明 常用参数
docker system df 查看磁盘使用
docker system prune 清理无用资源 -a(包括未使用镜像)
--volumes(包括卷)
docker info 显示系统信息
docker version 显示版本信息

组合命令示例

场景 命令示例
运行Web服务 docker run -d -p 80:80 --name webserver nginx
调试容器 docker exec -it webserver bash
备份数据 docker run --volumes-from db -v $(pwd):/backup busybox tar cvf /backup/backup.tar /dbdata
查看实时日志 docker logs -f app
构建多架构镜像 docker buildx build --platform linux/amd64,linux/arm64 -t myapp .