1. 项目概述
在Linux系统中安装Docker是开发者经常需要面对的基础操作之一。Xubuntu作为Ubuntu的轻量级衍生版本,以其简洁高效的特性受到许多开发者的青睐。本文将详细介绍在Xubuntu 22.04 LTS系统上获取Docker资源的两种主流方法:通过官方仓库安装和离线下载安装包方式。
我曾在多个Xubuntu环境中部署过Docker,实测这两种方法各有优劣。官方仓库安装简单快捷但依赖网络质量,离线方式则适合无外网或网络受限的环境。下面将结合我的实际经验,详细解析每种方法的操作步骤和注意事项。
2. 环境准备与系统检查
2.1 系统版本确认
在开始安装前,首先需要确认系统版本信息。打开终端(Ctrl+Alt+T)执行:
bash复制lsb_release -a
预期输出应包含"22.04"版本号和"jammy"代号。我遇到过因系统版本不匹配导致的依赖问题,所以这一步不能省略。
2.2 系统更新
即使是最新安装的系统,也建议先更新软件包索引:
bash复制sudo apt update && sudo apt upgrade -y
这个步骤可以避免因系统组件版本过旧导致的依赖冲突。有一次我跳过了这步,结果在安装过程中遇到了恼人的依赖错误,不得不回滚重来。
2.3 卸载旧版本
如果系统上存在旧版Docker,需要先彻底卸载:
bash复制sudo apt remove docker docker-engine docker.io containerd runc
残留的配置文件也需要清理:
bash复制sudo apt autoremove --purge docker*
注意:生产环境中如果已有容器在运行,务必先备份数据再执行卸载操作。
3. 方法一:通过官方仓库安装
3.1 安装依赖工具
首先安装必要的工具包:
bash复制sudo apt install \
ca-certificates \
curl \
gnupg \
lsb-release
这些基础工具在大多数Xubuntu最小化安装中可能不存在。我曾经在一个精简版环境中因缺少gnupg导致后续步骤失败。
3.2 添加Docker官方GPG密钥
为保证软件来源可信,需要添加Docker的GPG密钥:
bash复制sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
这里有几个关键点需要注意:
mkdir -p确保目录存在且不会报错--dearmor参数将密钥转换为apt可识别的格式- 如果网络连接有问题,可以尝试使用国内镜像源
3.3 设置稳定版仓库
接下来设置稳定版(stable)仓库:
bash复制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
这个命令做了三件事:
- 根据当前系统架构(amd64/arm64等)配置仓库
- 指定使用之前添加的GPG密钥验证
- 根据系统版本代号(jammy)选择正确的仓库路径
3.4 安装Docker引擎
更新apt索引后安装Docker:
bash复制sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
安装完成后验证版本:
bash复制docker --version
containerd --version
典型输出类似:
code复制Docker version 20.10.17, build 100c701
containerd containerd.io 1.6.6, build 10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
4. 方法二:离线下载安装包
4.1 下载离线安装包
当主机无法连接互联网时,可以从其他设备下载所需deb包:
访问Docker官方仓库:
https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/
需要下载的主要包有(具体版本号可能会有更新):
- docker-ce_20.10.17~3-0~ubuntu-jammy_amd64.deb
- docker-ce-cli_20.10.17~3-0~ubuntu-jammy_amd64.deb
- containerd.io_1.6.6-1_amd64.deb
- docker-compose-plugin_2.6.0~ubuntu-jammy_amd64.deb
提示:下载前务必确认系统架构(amd64/arm64)和Ubuntu版本代号(jammy)
4.2 传输安装包到目标主机
将下载的deb包通过U盘、内网共享等方式传输到Xubuntu主机。我通常会在家目录下创建专门目录存放:
bash复制mkdir ~/docker_debs
# 假设文件已复制到该目录
4.3 手动安装deb包
按依赖顺序安装各个包:
bash复制sudo dpkg -i ~/docker_debs/containerd.io*.deb
sudo dpkg -i ~/docker_debs/docker-ce-cli*.deb
sudo dpkg -i ~/docker_debs/docker-ce*.deb
sudo dpkg -i ~/docker_debs/docker-compose-plugin*.deb
如果遇到依赖问题(常见于最小化安装的系统),可以尝试:
bash复制sudo apt-get install -f
这条命令会自动安装缺失的依赖项。
5. 安装后配置
5.1 非root用户权限配置
默认情况下,Docker需要sudo权限。为方便日常使用,可以将用户加入docker组:
bash复制sudo usermod -aG docker $USER
newgrp docker
这个改动需要重新登录才能生效。我曾经遇到过新会话未生效的情况,简单的解决方法是重启终端或执行:
bash复制exec su - $USER
5.2 服务管理
检查Docker服务状态:
bash复制sudo systemctl status docker
常用服务命令:
bash复制sudo systemctl start docker # 启动
sudo systemctl stop docker # 停止
sudo systemctl enable docker # 设置开机自启
5.3 配置镜像加速
国内用户建议配置镜像加速器。创建或修改配置文件:
bash复制sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://<your-mirror>.mirror.aliyuncs.com"]
}
EOF
然后重启服务:
bash复制sudo systemctl daemon-reload
sudo systemctl restart docker
6. 验证安装
6.1 基础功能测试
运行测试容器验证安装:
bash复制docker run hello-world
成功输出应包含"Hello from Docker!"等信息。我第一次看到这个输出时,花了半小时研究它是如何工作的 - 这个简单的镜像实际上包含了一个完整的微型Linux系统和编译好的Go程序。
6.2 组件完整性检查
检查各组件是否正常工作:
bash复制docker info # 显示系统级信息
docker version # 显示客户端和服务端版本
docker stats # 显示容器资源使用情况(需有运行中的容器)
7. 常见问题与解决方案
7.1 GPG密钥错误
错误现象:
code复制W: GPG error: https://download.docker.com/linux/ubuntu jammy InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY XXXXXXXXXXXXXXXX
解决方案:
bash复制sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys XXXXXXXXXXXXXXXX
7.2 网络连接问题
如果从官方仓库下载速度慢,可以尝试更换国内源。编辑docker.list文件:
bash复制sudo sed -i 's@https://download.docker.com@https://mirrors.aliyun.com/docker-ce@g' /etc/apt/sources.list.d/docker.list
sudo apt update
7.3 依赖冲突
有时会遇到与系统已有软件包的冲突。可以尝试:
bash复制sudo apt --fix-broken install
如果问题依旧,可能需要手动解决特定依赖关系。我曾经遇到过containerd与旧版本runc的冲突,最终通过完全卸载后重新安装解决。
7.4 存储驱动问题
某些环境下可能需要调整存储驱动。编辑/etc/docker/daemon.json:
json复制{
"storage-driver": "overlay2"
}
可用驱动可以通过docker info | grep "Storage Driver"查看。
8. 维护与升级
8.1 常规升级
对于仓库安装方式,升级很简单:
bash复制sudo apt update
sudo apt upgrade
系统会自动处理依赖关系。建议定期检查更新,特别是安全更新。
8.2 离线升级
离线环境升级需要下载新版deb包,然后按安装步骤重新执行。建议升级前:
- 备份重要容器和数据
- 记录当前版本信息
- 查看版本变更日志了解不兼容变更
8.3 版本回滚
如果新版本出现问题,可以降级到特定版本:
bash复制sudo apt install docker-ce=<VERSION> docker-ce-cli=<VERSION> containerd.io=<VERSION>
版本号可以通过apt-cache madison docker-ce查询。
9. 两种方法对比与选择建议
9.1 官方仓库安装优缺点
优点:
- 安装过程简单,一条命令即可完成
- 自动处理依赖关系
- 便于后续升级维护
- 官方源保证软件完整性
缺点:
- 需要稳定的网络连接
- 对国内用户可能下载速度较慢
- 依赖第三方仓库可用性
9.2 离线安装优缺点
优点:
- 不依赖网络环境
- 可以精确控制安装版本
- 适合批量部署相同环境
缺点:
- 需要手动下载和管理安装包
- 依赖关系需要自行解决
- 升级维护相对复杂
9.3 选择建议
根据我的经验:
- 开发环境或个人使用:推荐官方仓库安装
- 生产环境或内网服务器:建议下载离线包后通过内部仓库管理
- 批量部署:可以结合Ansible等工具实现自动化离线安装
10. 扩展配置与优化
10.1 日志配置
默认情况下,Docker日志会无限制增长。可以通过修改daemon.json限制:
json复制{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
这会将每个容器日志限制为最多3个文件,每个文件10MB。
10.2 存储位置修改
默认Docker将镜像和容器存储在/var/lib/docker。要修改存储位置:
- 停止Docker服务
- 移动现有数据(如果有)
- 创建符号链接或直接修改daemon.json:
json复制{
"data-root": "/path/to/new/location"
}
10.3 资源限制
可以通过修改daemon.json限制Docker资源使用:
json复制{
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 64000,
"Soft": 64000
}
}
}
对于单个容器的限制,可以在运行容器时通过--memory、--cpus等参数指定。