3. 环境准备:Linux基础命令、Docker安装与配置、Git基础操作

说实话,做回滚保护和镜像校验,最怕什么?

最怕环境没搭好,后面全白干。我见过太多人,一上来就写脚本、配流水线,结果连个 docker pull 都跑不通,或者 Git 分支乱成一锅粥。嗯,咱们先把地基打牢。

这一章,我会带你过一遍最核心的环境准备。不是那种「从零学 Linux」的废话,而是挑出跟回滚、镜像校验强相关的命令和配置。你跟着敲一遍,后面实战才不会卡壳。

3.1 Linux 基础命令:够用就行

我个人习惯,服务器上只装最小化系统。但有几个命令,你必须刻在脑子里。

3.1.1 文件与目录操作

  • 查看目录结构:ls -la —— 别只用 ls,看不到隐藏文件会踩坑。
  • 切换目录:cd /data/deploy
  • 创建目录:mkdir -p /data/backup/{images,scripts} —— 一次性建多层,省事。
  • 复制与移动:cp -a 保留权限,mv 用于重命名或移动。
  • 删除:rm -rf —— 慎用!我建议先 ls 确认路径再删。
我的习惯: 每次执行 rm -rf 前,我都会先敲一遍 echo 打印路径,确认无误再删。别笑,这习惯救过我两次。

3.1.2 文件内容查看与编辑

  • 实时查看日志:tail -f app.log —— 排查回滚失败时,这个命令是救命稻草。
  • 搜索内容:grep -rn "error" /var/log/ —— 配合 -i 忽略大小写。
  • 统计行数:wc -l —— 检查镜像层数或配置文件行数时常用。
  • 文本编辑:vim 或 nano —— 我习惯用 vim,但新手用 nano 更友好。

3.1.3 权限与用户管理

镜像校验和回滚操作,经常涉及文件权限问题。我曾经因为一个 chmod 没加对,导致回滚脚本执行失败,线上挂了 10 分钟。

  • 修改权限:chmod +x script.sh —— 给脚本加执行权限。
  • 修改所有者:chown user:group file —— 确保 Docker 和 Jenkins 用户能读写。
  • 查看当前用户:whoami

3.1.4 网络与进程

  • 端口监听:ss -tlnp —— 比 netstat 更快,查看 Docker 守护进程是否在 2375/2376 端口。
  • 进程查看:ps aux | grep docker
  • 磁盘空间:df -h —— 镜像校验前,先确认磁盘够用,否则拉取大镜像会失败。
注意: 生产服务器上,不要随意用 rm -rf / 或 chmod 777。我见过有人图省事,直接把整个 /data 目录改成 777,结果被黑客利用,镜像被篡改。权限能小则小。

3.2 Docker 安装与配置:镜像校验的基石

Docker 的安装其实不复杂,但配置才是关键。尤其是镜像校验,跟 Docker 的配置项息息相关。

3.2.1 安装 Docker Engine

我推荐用官方脚本安装,干净利落:

# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release

# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker Engine
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
验证安装: 运行 docker --version 和 docker run hello-world。如果看到 "Hello from Docker!",说明安装成功。

3.2.2 配置镜像加速与安全

国内拉取 Docker Hub 镜像,慢得让人抓狂。我建议配置镜像加速器:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://mirror.ccs.tencentyun.com"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "insecure-registries": [],
  "disable-legacy-registry": true
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

这里有个关键点:insecure-registries。如果你用自建的私有仓库(比如 Harbor),且没有配置 HTTPS,就必须把这个仓库地址加进去。否则 Docker 会拒绝拉取。

安全提醒: 生产环境一定要用 HTTPS 的镜像仓库。我曾经图省事,用了 HTTP 仓库,结果中间人篡改了镜像,导致线上服务崩溃。从那以后,我所有私有仓库都强制走 TLS。

3.2.3 配置 Docker 用户组

为了避免每次执行 Docker 命令都要加 sudo,可以把当前用户加入 docker 组:

sudo usermod -aG docker $USER
newgrp docker

嗯,这里要注意:加入 docker 组后,该用户就拥有了 root 权限。所以,只给信任的用户加。

3.3 Git 基础操作:版本控制的命脉

回滚保护,说白了就是靠 Git 的版本管理。你想想看,如果没有 Git,你怎么知道哪个版本是稳定的?怎么快速切回上一个版本?

3.3.1 配置 Git 全局信息

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global core.autocrlf input  # 防止换行符问题

3.3.2 克隆与分支操作

  • 克隆仓库:git clone https://github.com/your/project.git
  • 查看分支:git branch -a —— 查看所有分支,包括远程。
  • 创建并切换分支:git checkout -b release/v1.2.3
  • 切换分支:git checkout main
回滚的核心操作:
# 查看提交历史
git log --oneline -10

# 回滚到指定提交(保留历史)
git revert HEAD~1

# 强制回滚到指定提交(丢弃历史,慎用)
git reset --hard <commit-hash>

我个人强烈推荐用 git revert 而不是 git reset --hard。前者会生成一个新的提交,保留完整历史;后者会丢失历史,一旦出错很难恢复。

3.3.3 标签管理:镜像版本的锚点

镜像校验时,我们通常用 Git 标签来关联镜像版本。比如:

# 创建标签
git tag -a v1.2.3 -m "Release version 1.2.3"

# 推送标签到远程
git push origin v1.2.3

# 查看所有标签
git tag -l

# 删除本地标签
git tag -d v1.2.3

# 删除远程标签
git push origin --delete v1.2.3

为什么标签重要?因为回滚时,你只需要知道「我要回到 v1.2.3 这个版本」,然后根据标签找到对应的镜像摘要,进行校验和部署。没有标签,你只能靠 commit hash,那可读性太差了。

3.3.4 合并与冲突处理

回滚时,经常需要把修复分支合并到主分支。我建议用 --no-ff 保留合并历史:

git checkout main
git merge --no-ff hotfix/v1.2.4

如果遇到冲突,别慌。用 git status 查看冲突文件,手动解决后:

git add resolved-file.txt
git commit -m "Resolve merge conflict for hotfix"
我的经验: 在合并前,先用 git diff main...hotfix/v1.2.4 查看差异,确认没有意外改动。我曾经因为没看 diff,合并时把别人的代码覆盖了,被同事追着骂了一下午。

3.4 本章知识体系总览

下面这张图,帮你把本章的核心逻辑串起来:

环境准备知识体系 环境准备知识体系 Linux 基础命令 Docker 安装与配置 Git 基础操作 文件操作 权限管理 网络进程 日志查看 安装引擎 镜像加速 安全配置 用户组 分支管理 标签管理 回滚操作 冲突处理 三者联动:Git 标签 → 镜像版本 → Docker 拉取校验 → 回滚

3.5 快速验证清单

环境搭好后,我建议你跑一遍这个清单,确保所有环节都通了:

检查项 命令/操作 预期结果
Docker 运行正常 docker run hello-world 输出 Hello from Docker!
镜像加速生效 docker info | grep -A 5 "Registry Mirrors" 显示配置的镜像加速地址
Git 配置正确 git config --list 显示 user.name 和 user.email
Git 标签可用 git tag -a test-tag -m "test" && git tag -d test-tag 创建和删除标签无报错
磁盘空间充足 df -h /var/lib/docker 可用空间 > 20GB

最后说一句: 环境准备看起来琐碎,但它是整个课程的根基。我见过太多人,后面镜像校验失败、回滚脚本报错,最后发现是 Docker 配置不对或者 Git 分支没切对。花 30 分钟把环境配好,后面能省 3 小时排查时间。

好了,环境就绪。下一节,我们开始真正接触镜像签名和校验机制。