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 会拒绝拉取。
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 本章知识体系总览
下面这张图,帮你把本章的核心逻辑串起来:
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 小时排查时间。
好了,环境就绪。下一节,我们开始真正接触镜像签名和校验机制。