1. 为什么需要手动解压安装 Docker
在 Linux 系统上安装 Docker 通常有几种主流方式:通过系统包管理器(apt/yum)、使用官方便捷脚本、或者手动解压二进制包。前两种方式虽然简单,但在某些特殊场景下会遇到问题:
- 生产环境服务器无法连接外网时
- 需要安装特定版本时(包管理器的版本往往滞后)
- 系统版本太老或太新导致依赖冲突时
- 需要完全控制安装路径和配置时
手动解压安装就像自己组装电脑一样,虽然步骤稍多,但能完全掌控每个环节。我最近在给一批离线服务器部署容器环境时,就采用了这种方式,实测比折腾包管理器省心得多。
2. 准备工作与环境检查
2.1 系统兼容性确认
Docker 对 Linux 内核有最低要求:
- 64位系统(运行
uname -m应显示 x86_64 或 aarch64) - 内核版本 3.10+(运行
uname -r查看) - 已安装基础工具:curl、tar、gzip
重要提示:如果是在生产环境操作,建议先在测试机验证整个过程。我曾经因为跳过验证步骤,导致批量部署时出现内核模块不兼容的问题。
2.2 下载正确的二进制包
访问 Docker 官方 GitHub 仓库获取最新稳定版:
bash复制# 获取最新 Docker 版本号
DOCKER_VERSION=$(curl -s https://api.github.com/repos/moby/moby/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
# 下载二进制包
curl -LO "https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKER_VERSION}.tgz"
# 下载 docker-compose
COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
curl -LO "https://github.com/docker/compose/releases/download/v${COMPOSE_VERSION}/docker-compose-linux-x86_64"
如果系统是 ARM 架构(如树莓派),需要将 x86_64 替换为 aarch64。这个细节很容易被忽略,我有次给 ARM 服务器装错版本,浪费了半小时排查。
3. 详细安装步骤
3.1 解压与安装 Docker
bash复制# 解压 Docker 包
tar xzvf docker-${DOCKER_VERSION}.tgz
# 将二进制文件移动到系统路径
sudo cp docker/* /usr/bin/
# 验证安装
docker --version
dockerd --version
此时直接运行 dockerd 会报错,因为还需要配置系统服务。这里有个小技巧:可以先手动启动 dockerd 测试基础功能:
bash复制sudo dockerd &
3.2 配置系统服务
创建 systemd 服务文件 /etc/systemd/system/docker.service:
ini复制[Unit]
Description=Docker Application Container Engine
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
然后启用服务:
bash复制sudo systemctl daemon-reload
sudo systemctl enable docker
sudo systemctl start docker
踩坑记录:如果遇到
cgroup mount错误,可能需要修改/etc/default/grub添加systemd.unified_cgroup_hierarchy=0后更新 grub。这个问题在新版内核上特别常见。
3.3 安装 Docker Compose
bash复制sudo cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
4. 安装后必要配置
4.1 用户组权限管理
默认只有 root 能运行 docker 命令,这既不安全也不方便。更优做法是将用户加入 docker 组:
bash复制sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker # 立即生效
安全提示:虽然方便,但 docker 组实际上等同于 root 权限。在生产环境建议配合 sudo 使用,或者配置更细粒度的授权策略。
4.2 配置镜像加速
国内访问 Docker Hub 很慢,需要配置镜像加速器。创建或修改 /etc/docker/daemon.json:
json复制{
"registry-mirrors": [
"https://registry.cn-hangzhou.aliyuncs.com",
"https://hub-mirror.c.163.com"
]
}
然后重启服务:
bash复制sudo systemctl restart docker
5. 验证与排错
5.1 基础功能测试
运行 hello-world 容器验证基础功能:
bash复制docker run --rm hello-world
如果看到欢迎信息,说明安装成功。如果卡住,可能是网络问题,试试:
bash复制sudo dockerd --debug # 查看详细日志
5.2 常见问题解决
问题1:Cannot connect to the Docker daemon
- 检查服务状态:
sudo systemctl status docker - 查看日志:
journalctl -u docker -n 50 - 常见原因:SELinux 阻止、防火墙规则、磁盘空间不足
问题2:iptables/nftables conflict
新版 Docker 默认使用 nftables,如果系统有旧版 iptables 规则会导致冲突。解决方案:
bash复制sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
问题3:no space left on device
Docker 默认使用 /var/lib/docker 存储数据。如果根分区空间不足,可以修改存储路径:
json复制// /etc/docker/daemon.json
{
"data-root": "/path/to/larger/disk"
}
6. 进阶配置建议
6.1 日志轮转配置
默认情况下 Docker 日志会无限增长。创建 /etc/docker/daemon.json 添加:
json复制{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
6.2 生产环境调优
- 限制容器资源:
--cpus,--memory参数 - 启用用户命名空间隔离:
--userns=host - 配置 TLS 远程访问(如果开启远程 API)
6.3 卸载方法
如果需要卸载:
bash复制sudo systemctl stop docker
sudo rm -rf /usr/bin/docker* /usr/local/bin/docker-compose
sudo rm -rf /var/lib/docker
手动安装的最大优势就是卸载时能完全清理干净,不像包管理器会残留各种依赖。