文章目录
- [Linux 服务器通过 tgz 离线部署 Docker](#Linux 服务器通过 tgz 离线部署 Docker)
Linux 服务器通过 tgz 离线部署 Docker
适用场景
当服务器无法连接公网,或者需要统一分发 Docker 二进制包时,可以使用 Docker 官方静态二进制包离线部署。该方式不依赖 yum、apt 等包管理器,适合 CentOS、麒麟、UOS 等 Linux 系统。
一、环境检查
部署前先在目标服务器上确认系统架构和内核版本:
bash
uname -m
uname -r
cat /etc/os-release
Docker 要求 Linux 内核版本不低于 3.10;麒麟 V10 等服务器系统通常默认满足要求。
如果服务器曾经安装过 Docker、Podman 或其他容器运行时,建议先清理旧版本,避免二进制冲突:
bash
sudo yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine podman 2>/dev/null || true
二、下载 Docker tgz 包
在一台可以联网的机器上,从 Docker 官方静态二进制包地址下载对应版本和架构的安装包:
text
https://download.docker.com/linux/static/stable/
常见目录包括:
| 架构 | 目录 | 适用环境 |
|---|---|---|
| x86_64 | x86_64/ |
Intel / AMD 服务器 |
| aarch64 | aarch64/ |
鲲鹏、飞腾、ARM64 服务器 |
例如下载 x86_64 架构的某个版本:
bash
wget https://download.docker.com/linux/static/stable/x86_64/docker-27.5.1.tgz
下载完成后,将 .tgz 文件上传到目标服务器,例如放到 /opt/docker-install/ 目录。
三、解压并安装二进制文件
进入安装包所在目录并解压:
bash
cd /opt/docker-install
tar -zxvf docker-27.5.1.tgz
解压后会生成一个 docker/ 目录,里面包含:
text
docker/
├── containerd
├── containerd-shim-runc-v2
├── ctr
├── docker
├── dockerd
├── docker-init
├── docker-proxy
└── runc
将这些二进制文件复制到系统路径:
bash
sudo cp docker/* /usr/bin/
sudo chmod +x /usr/bin/docker*
sudo chmod +x /usr/bin/containerd*
sudo chmod +x /usr/bin/runc
注意不要只复制 docker 命令,dockerd、containerd、runc 等组件也必须一起部署,否则 Docker 无法正常启动。
四、创建 systemd 服务
执行:
bash
sudo vim /etc/systemd/system/docker.service
写入以下内容:
ini
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
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 chmod +x /etc/systemd/system/docker.service
sudo systemctl daemon-reload
如果服务器运行在麒麟等启用 SELinux 的系统上,且容器启动异常,可临时在 ExecStart 中增加 --selinux-enabled=false 进行排查;生产环境更建议根据安全规范配置 SELinux 策略。
五、配置 Docker 守护进程
创建配置目录和配置文件:
bash
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json
示例配置:
json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"data-root": "/var/lib/docker"
}
如果有镜像加速需求,可以补充 registry-mirrors;但离线环境中通常不需要配置公网镜像源。
配置完成后再次重载:
bash
sudo systemctl daemon-reload
六、启动 Docker 并设置开机自启
bash
sudo systemctl enable --now docker
sudo systemctl status docker
查看版本和运行信息:
bash
docker version
docker info
如果 docker version 能同时显示 Client 和 Server 信息,说明部署成功。
七、离线镜像导入
离线环境无法执行 docker pull,镜像需要提前在有网机器上导出:
bash
docker save -o java-8.tar library/java:8
上传到目标服务器后导入:
bash
docker load -i java-8.tar
导入后可用以下命令确认:
bash
docker images
八、常见问题排查
| 问题 | 排查方法 |
|---|---|
| 启动失败 | 执行 journalctl -u docker -f 查看详细日志 |
| 架构不匹配 | 用 uname -m 确认,重新下载对应架构 tgz |
| 旧版本冲突 | 卸载旧 Docker/Podman,清理残留二进制文件 |
| SELinux 拦截 | 检查审计日志,必要时调整策略或临时关闭 |
| 磁盘空间不足 | 通过 data-root 将数据目录迁移到大盘分区 |
部署要点小结
tgz 部署的核心流程是:确认架构 → 下载静态包 → 解压到 /usr/bin → 配置 systemd → 配置 daemon.json → 启动并验证。
相比 rpm/deb 安装,这种方式更适合内网、信创和麒麟环境;缺点是升级时需要手动替换二进制文件,并重新执行 systemctl daemon-reload 和 systemctl restart docker。