3、安装Docker:Docker的安装与验证、配置Docker镜像加速器、非root用户管理Docker

好,咱们继续。上一章我们把Linux环境准备好了,现在该请出Docker这位主角了。

为什么要用Docker?说白了,就是为了“环境一致性”。你想想看,我在本地跑得好好的Ollama,传到服务器上就报错,这种事我遇到过太多次了。Docker把应用和它的依赖打包成一个镜像,走到哪跑到哪,省心。

这一章,我会带你完成三件事:安装Docker、配个镜像加速器、让普通用户也能用Docker。一步步来,别急。

3.1 安装Docker

我个人习惯用官方脚本安装,干净利落。当然,你也可以用系统自带的包管理器,但版本可能比较旧。

先更新一下包索引,然后安装一些依赖,让apt支持HTTPS:

sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release

接下来,添加Docker官方的GPG密钥和仓库。这一步是为了确保你下载的软件包是官方签名的,没被篡改过。

# 添加GPG密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

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

嗯,这里要注意,lsb_release -cs 会输出你的Ubuntu版本代号,比如 jammyfocal。Docker会根据这个自动匹配正确的仓库。

仓库加好了,再更新一次,然后安装Docker引擎:

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

安装完成后,Docker服务会自动启动。你可以检查一下状态:

sudo systemctl status docker

看到 active (running) 就对了。如果没启动,手动来一下:

sudo systemctl start docker
sudo systemctl enable docker   # 设置开机自启
小提示: 我在项目中遇到过,有些云服务器默认会禁用一些服务端口或内核模块。如果Docker启动失败,先检查一下 systemctl status docker 的日志,多半是 iptablesoverlay 模块的问题。

3.2 验证Docker安装

装没装好,跑个经典的 hello-world 镜像就知道了:

sudo docker run hello-world

如果看到类似下面的输出,恭喜你,Docker已经正常工作了:

Hello from Docker!
This message shows that your installation appears to be working correctly.

为什么会这样?Docker会先从本地找 hello-world 镜像,找不到就去Docker Hub拉取,然后创建一个容器运行它。整个过程验证了Docker的拉取、创建、运行三个核心能力。

你也可以看看当前Docker的版本信息:

docker --version
docker info

docker info 会输出很多信息,包括容器数量、镜像数量、存储驱动等。我一般用它来快速诊断环境。

3.3 配置Docker镜像加速器

在国内,直接从Docker Hub拉取镜像,那速度……嗯,你懂的。我曾经等一个几百兆的镜像等了一个小时,最后超时失败了。所以,镜像加速器几乎是必配的。

配置方法很简单,修改Docker的守护进程配置文件 /etc/docker/daemon.json。如果文件不存在,就新建一个:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://你的加速器地址"]
}
EOF

加速器地址从哪里来?我推荐几个常用的:

服务商 加速器地址 备注
阿里云 https://你的ID.mirror.aliyuncs.com 需要注册阿里云账号,获取专属地址
中科大 https://docker.mirrors.ustc.edu.cn 公共加速器,无需注册
网易 http://hub-mirror.c.163.com 公共加速器,无需注册
腾讯云 https://mirror.ccs.tencentyun.com 公共加速器,无需注册

我个人习惯用阿里云的,因为速度稳定。你如果没有阿里云账号,用中科大的也行。

配置好之后,重启Docker让配置生效:

sudo systemctl daemon-reload
sudo systemctl restart docker

验证一下加速器是否生效:

docker info | grep -A 1 "Registry Mirrors"

如果看到你配置的地址,就说明成功了。现在再拉个镜像试试,速度应该快多了。

注意: 加速器地址必须是HTTPS(除了网易那个是HTTP)。另外,不要同时配置多个加速器,Docker只会用第一个可用的。我曾经一次配了三个,结果它只认第一个,后面的全浪费了。

3.4 非root用户管理Docker

每次用Docker都要加 sudo,是不是很烦?我刚开始用Docker时也觉得麻烦,后来才知道,把用户加入 docker 组就行了。

Docker守护进程启动时会创建一个 docker 用户组,但默认只有root用户在里面。我们把当前用户加进去:

sudo usermod -aG docker $USER

注意,这里的 $USER 会自动替换成你的当前用户名。如果你用的是其他用户,比如 ollama,就写成:

sudo usermod -aG docker ollama

修改完用户组后,需要重新登录才能生效。你可以退出当前会话再登录,或者直接执行:

newgrp docker

验证一下:

docker run hello-world

如果不用 sudo 也能正常运行,就搞定了。

安全提醒: 把用户加入 docker 组,相当于给了这个用户root权限。因为Docker可以挂载宿主机目录、执行特权操作。所以,只给信任的用户加这个组。我在生产环境上,一般只给运维和开发负责人加,其他人还是用 sudo

3.5 本章知识体系

为了让你更直观地理解这一章的内容,我画了一张流程图,把Docker安装、加速器配置、用户权限管理串起来:

Docker安装与配置流程 安装Docker引擎 验证:docker run hello-world 配置镜像加速器 非root用户管理Docker 关键命令 sudo apt install docker-ce sudo docker run hello-world sudo vim /etc/docker/daemon.json sudo systemctl restart docker sudo usermod -aG docker $USER newgrp docker docker info | grep Mirrors docker run hello-world

这张图把这一章的核心步骤串起来了。你照着这个流程走,基本不会出问题。

好了,Docker环境已经就绪。下一章,我们会用Docker来部署Ollama,那才是真正的好戏开场。


公众号:蓝海资料掘金营,微信deep3321