环境准备:安装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. 本章核心知识图谱

下面这张图把这一章的结构梳理清楚,方便你回头对照。

环境准备知识体系 安装Docker 配置Git仓库 基础网络设置 Ubuntu安装 macOS / Windows安装 用户组与权限 SSH密钥生成与添加 全局用户配置 创建并推送测试仓库 DNS配置 代理配置(HTTP/HTTPS) 防火墙端口检查 🔑 关键点 三部分缺一不可,顺序不重要, 但都必须在流水线调试前验证通过。

5. 验证一切就绪

环境准备完,别急着往下走。先跑个“冒烟测试”:

  1. Docker:docker run --rm alpine echo hello
  2. Git:git clone git@github.com:你的用户名/test-ci-repo.git
  3. 网络:curl -I https://hub.docker.com

三条全部通过,就可以安心进入下一阶段了。

最后的提醒:如果你在团队里搭建环境,记得把Docker和Git的版本写进文档里固定下来。我曾经因为团队里有人装了Docker 20.10,有人装了24.0,结果compose文件语法不兼容,排查了半天——嗯,版本锁定很重要。