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。

相关推荐
重生之小比特1 小时前
【Linux系统】13 基础IO(上)
linux·运维·服务器
CCCCCCCCharlie1 小时前
从0到1:一个字节的磁盘之旅
linux·开发语言·c++
羑悻的小杀马特1 小时前
超越Bridge:全面掌握Docker网络隔离与通信的底层逻辑!
运维·网络·docker·容器
运维小斌1 小时前
麒麟 V10 ARM64 离线部署 OceanBase:8 步实施手册
linux·数据库·oceanbase·麒麟
着迷不白1 小时前
生产环境标准的Linux系统安装到服务器
linux·云计算
Thomas.Sir1 小时前
第34课:微服务Docker容器化部署 & 生产环境上线
spring cloud·docker·微服务
吹什么轩1 小时前
linux系统复习:进程优先级与O(1)调度
java·linux·算法
开开心心就好2 小时前
安卓PDF处理工具,免费无广告零弹窗
android·服务器·开发语言·算法·pdf·ocr
电梯界知识分子2 小时前
江西赣州赣县三层设计师自建房:1700mm中空极限利用,全观光铝合金电梯的精度与防震处理
大数据·服务器·网络·人工智能·家用电梯