2. 环境准备

说实话,很多新手一上来就急着写代码、配服务,结果卡在最基础的环境搭建上。我见过太多人花了两天时间装Docker,最后发现是网络源没配对。这一章,咱们就把这些「地基」打牢。

我会带你过一遍Linux常用命令、虚拟机/云服务器的选择、SSH配置,最后装上Docker和Docker Compose。嗯,每一步我都会穿插一些我踩过的坑,你跟着走就行。

本章目标: 从零搭建一套可远程操作的Docker运行环境,确保后续所有服务化部署实验都能顺畅进行。

2.1 Linux基础命令回顾

你可能会问:「我Windows/Mac用得好好的,为啥非要学Linux?」因为生产环境99%都是Linux。Docker原生跑在Linux内核上,Windows和Mac也是靠虚拟机套了一层。说白了,绕不开。

我个人习惯用Ubuntu 20.04/22.04 LTS,社区活跃、文档全、包管理方便。下面这几个命令,你最好练到肌肉记忆。

类别 命令 说明
文件操作 ls -la、cd、pwd、cp -r、mv、rm -rf 查看、切换、复制、移动、删除
权限管理 chmod 755、chown user:group 修改文件权限和所有者
文本编辑 vim、nano、cat、tail -f 编辑和查看日志
网络诊断 ping、curl、netstat -tlnp、ss -tlnp 检查连通性和端口监听
进程管理 ps aux、top、kill -9 查看和终止进程
包管理 apt update、apt install -y、apt upgrade Ubuntu软件安装与更新
我的小习惯: 每次登录新服务器,第一件事就是 apt update && apt upgrade -y。别问我为什么,有一次我忘了更新,装Docker时依赖冲突搞了半小时。

2.2 安装虚拟机或云服务器

你有两个选择:本地虚拟机(适合学习、测试)或云服务器(适合真实部署)。我建议你两个都试试,但初期用虚拟机成本更低。

2.2.1 本地虚拟机方案

我用的是VirtualBox + Vagrant。Vagrant能一键拉起虚拟机,省去手动安装系统的麻烦。

# 安装Vagrant后,创建一个项目目录
mkdir my-docker-lab && cd my-docker-lab

# 初始化一个Ubuntu 22.04虚拟机
vagrant init ubuntu/jammy64

# 启动虚拟机
vagrant up

# SSH登录
vagrant ssh

Vagrant会自动配置端口转发和共享目录。我个人习惯把项目代码放在宿主机,通过共享目录同步到虚拟机里改。

2.2.2 云服务器方案

如果你有云服务商账号(阿里云、腾讯云、AWS等),选一台2核4G的ECS或EC2就够了。系统选Ubuntu 22.04 LTS,安全组记得开放22端口(SSH)和后续会用到的端口(比如80、443、2375等)。

注意: 云服务器默认密码登录不安全。我曾经有一台服务器被扫到弱密码,直接被植入挖矿程序。所以,拿到服务器第一件事就是配置SSH密钥登录,然后禁用密码登录。

2.3 配置SSH远程连接

SSH是连接Linux服务器的标准方式。配置好了,你就能像操作本地电脑一样操作远程服务器。

2.3.1 生成SSH密钥对

在本地终端执行:

ssh-keygen -t ed25519 -C "your_email@example.com"

一路回车,会在 ~/.ssh/ 下生成 id_ed25519(私钥)和 id_ed25519.pub(公钥)。

2.3.2 将公钥复制到服务器

用 ssh-copy-id 一键搞定:

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your-server-ip

如果没有这个命令,手动追加也行:

cat ~/.ssh/id_ed25519.pub | ssh user@your-server-ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

2.3.3 禁用密码登录(重要)

登录服务器,编辑SSH配置文件:

sudo vim /etc/ssh/sshd_config

找到并修改以下两行:

PasswordAuthentication no
PubkeyAuthentication yes

然后重启SSH服务:

sudo systemctl restart sshd
避坑指南: 修改配置前,先开一个新终端窗口测试密钥登录是否正常。万一配置错了,你还有旧会话可以补救。我曾经手滑把 PermitRootLogin 设成了 no,结果自己也被踢出去了……还好有VNC控制台。

2.4 安装Docker和Docker Compose

终于到重头戏了。Docker的安装方式很多,我推荐用官方脚本,干净利落。

2.4.1 安装Docker Engine

# 更新包索引
sudo apt update

# 安装依赖
sudo apt install -y ca-certificates curl

# 添加Docker官方GPG密钥
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# 添加Docker仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

安装完成后,验证一下:

sudo docker run hello-world

看到「Hello from Docker!」就说明成功了。

2.4.2 将当前用户加入docker组

每次敲 sudo docker 很烦,对吧?把用户加入docker组,就不用加sudo了:

sudo usermod -aG docker $USER
newgrp docker   # 或者退出重新登录
安全提醒: docker组内的用户权限等同于root。如果你在多人共用的服务器上,要谨慎分配。我一般只在个人开发机上这么干。

2.4.3 安装Docker Compose

新版Docker已经内置了Compose插件(docker compose,注意没有横杠)。验证一下:

docker compose version

如果显示版本号(比如 v2.27.0),就OK了。如果你用的是旧版Docker,需要单独安装:

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

2.5 本章知识体系总览

下面这张图帮你理清整个环境准备的流程和依赖关系:

环境准备知识体系 环境准备知识体系总览 Linux基础命令 虚拟机 (VirtualBox+Vagrant) 云服务器 (ECS/EC2) SSH远程连接配置 Docker Engine + Docker Compose ✅ 可远程操作的Docker运行环境 提示:每一步都依赖上一步,建议按顺序操作,不要跳步

2.6 验证环境

装完别急着走,跑几个命令确认一切正常:

# 检查Docker版本
docker --version

# 检查Docker Compose版本
docker compose version

# 运行一个Nginx容器测试
docker run -d -p 8080:80 --name test-nginx nginx:alpine

# 访问测试(在浏览器打开 http://你的IP:8080)
curl http://localhost:8080

# 清理测试容器
docker stop test-nginx && docker rm test-nginx

如果看到Nginx的欢迎页面,恭喜你,环境准备全部完成!

我的经验: 第一次装Docker时,我卡在「hello-world」镜像拉取失败上。后来发现是DNS问题,在 /etc/docker/daemon.json 里加了 "dns": ["8.8.8.8", "114.114.114.114"] 就好了。如果你也遇到类似问题,不妨试试。

好了,环境已经就绪。接下来,我们就可以正式开始服务化部署的实战了。