环境准备:安装Docker、配置Git仓库、基础网络设置
好了,到了真正动手的时候。这一章我们把“地基”打好——Docker、Git仓库、基础网络。这三样东西,说白了就是CI流水线的“三驾马车”。我见过太多团队,流水线跑不起来,最后发现连Docker都没装对版本。嗯,咱们一步步来。
1. 安装Docker
Docker现在几乎成了CI/CD的标配。为什么?因为它能把环境彻底“打包”,让你在开发机、测试机、生产机上跑一模一样的容器。我个人习惯用社区版(Docker CE),足够稳定,而且免费。
1.1 在Ubuntu上安装Docker CE
# 更新包索引
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 CE
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# 验证安装
sudo docker run hello-world
我曾经碰到过一个坑:安装完后,普通用户执行 docker 命令要加 sudo。其实加个用户组就能解决。
小提示:把当前用户加入 docker 组,免去每次输sudo的麻烦。
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world
注意:加入docker组后,当前用户对docker有root权限。安全要求高的环境,建议用sudo或单独的管理用户。
1.2 在macOS / Windows上安装
用Docker Desktop吧,图形界面顺手得很。我个人觉得,mac用户直接去官网下载 .dmg 双击安装;Windows用户最好启用WSL2后端——性能好很多。我以前在Windows上跑Jenkins agent,用Hyper-V后端,容器启动慢得让人抓狂。后来换成WSL2,快了不止一倍。
2. 配置Git仓库
Git是CI流水线的“源码入口”。流水线从哪拉代码?就是Git仓库。我建议至少准备一个私有仓库,不管是GitHub、GitLab还是自建的Gitea。咱们这里用GitHub为例。
2.1 生成SSH密钥并添加到GitHub
# 生成密钥(邮箱换成你自己的)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 查看公钥
cat ~/.ssh/id_ed25519.pub
把输出的公钥复制,去GitHub → Settings → SSH and GPG keys → New SSH key 贴进去。
小提示:使用 ed25519 算法比传统的RSA更安全、更高效。我见过很多老项目还在用1024位RSA——别学他们。
2.2 配置全局用户信息
git config --global user.name "你的名字"
git config --global user.email "your_email@example.com"
git config --global init.defaultBranch main
这里有个细节:init.defaultBranch main 是新版Git的推荐设置。GitHub从2020年起就默认用 main 代替 master 了。我们做CI也跟上时代。
2.3 创建一个测试仓库并推送
mkdir test-ci-repo && cd test-ci-repo
git init
echo "# CI Test Repo" > README.md
git add .
git commit -m "initial commit"
git remote add origin git@github.com:你的用户名/test-ci-repo.git
git push -u origin main
我建议你亲自跑一遍,确保 push 成功。不然流水线克隆代码时会卡住。
3. 基础网络设置
CI流水线免不了要拉镜像、拉代码、发通知。网络不通,一切都白搭。我们主要关注三点:DNS、代理、防火墙。
3.1 DNS配置
Docker默认用宿主的DNS,但有时容器里解析不了内网域名。我踩过这个坑:公司的GitLab用的内网域名 gitlab.company.local,容器里解析不了,流水线拉代码超时。后来在 /etc/docker/daemon.json 里指定了DNS:
{
"dns": ["192.168.1.1", "8.8.8.8"]
}
然后重启Docker:
sudo systemctl restart docker
3.2 代理配置
如果你的开发环境需要代理才能访问外网,Docker也要配代理。我习惯用 systemd 的方式:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080"
Environment="HTTPS_PROXY=http://proxy.example.com:8080"
Environment="NO_PROXY=localhost,127.0.0.1,.local"
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
重要:NO_PROXY 记得加上内网IP段和域名,否则容器拉本地私有镜像也会走代理,那速度你懂的。
3.3 防火墙检查
CI流水线常用端口:
| 服务 | 端口 | 说明 |
|---|---|---|
| Docker Registry | 5000(HTTP)/ 443(HTTPS) | 镜像仓库 |
| Git SSH | 22 | Git拉取代码 |
| Git HTTPS | 443 | Git拉取代码 |
| Jenkins主节点 | 8080(HTTP) | Web界面 |
| Jenkins agent | 50000(JNLP) | Agent连接 |
用 nc 或者 telnet 快速测试连通性:
nc -zv github.com 22
telnet gitlab.company.local 443
其实,我通常直接写个脚本,批量检测这些端口,省得一个个敲。
4. 本章核心知识图谱
下面这张图把这一章的结构梳理清楚,方便你回头对照。
5. 验证一切就绪
环境准备完,别急着往下走。先跑个“冒烟测试”:
- Docker:
docker run --rm alpine echo hello - Git:
git clone git@github.com:你的用户名/test-ci-repo.git - 网络:
curl -I https://hub.docker.com
三条全部通过,就可以安心进入下一阶段了。
最后的提醒:如果你在团队里搭建环境,记得把Docker和Git的版本写进文档里固定下来。我曾经因为团队里有人装了Docker 20.10,有人装了24.0,结果compose文件语法不兼容,排查了半天——嗯,版本锁定很重要。