简介这份资源面向需要在Linux环境下部署容器化应用的开发与运维人员提供Docker与Docker Compose的离线安装包解决内网或受限网络下无法直接拉取安装文件的问题。压缩包共4个文件包含tgz安装包、service系统服务文件、sh安装脚本以及docker-compose配置文件整体约84.53MB覆盖从引擎安装到服务注册、再到多容器编排的完整链路。其中tgz为Docker主程序包service用于配置开机自启sh脚本可简化安装流程docker-compose文件则便于一键编排多容器应用。资源已有266人学习下载适合刚接触容器技术、希望快速搭建本地或测试环境的开发者参考也可作为运维人员批量部署时的基础素材帮助减少手动配置环节提升环境搭建效率。1. 离线环境里装 Docker为什么我劝你手里常备一套安装包有些活是半夜来的。某次给一个内网机房做交付机器全是 CentOS 7网口不通外网yum 源指向的地址根本连不上而业务方要求第二天早上八点前把容器跑起来。那一刻你才会意识到yum install docker-ce这种平时敲得飞起的命令在断网环境里就是一行废纸。docker 和 docker-compose 安装包这类资源解决的正是这个场景把二进制、rpm 包、依赖和 compose 可执行文件提前攒在手里到了现场直接离线装不依赖任何在线源。这套东西适合谁一是经常做内网交付、等保环境、专网部署的运维和交付工程师二是需要在多台隔离机器上批量铺 Docker 的测试同学三是自己搭实验环境、又不想每次都被网络问题卡住的人。它不是什么高深技术本质就是「把在线安装的每一步换成离线可复现的每一步」。但恰恰是这种基础活翻车率最高——版本对不上、依赖缺一个、compose 和 docker 版本打架任何一个都能让你在机房干坐到天亮。下面我按「先搞懂装的是什么 → 怎么离线装 → 怎么验证 → 坑在哪」的顺序把整套流程拆开讲。2. 先分清三个东西docker engine、docker-compose、安装包形态很多人一上来就找「docker 安装包」但没想清楚自己要的到底是哪个组件、哪种格式。这一步没分清后面必然返工。2.1 docker engine 和 docker-compose 是两码事docker engine 是那个跑容器的守护进程核心是dockerd配套还有docker命令行客户端、containerd、runc这些组件。你平时敲的docker run、docker ps走的是客户端连守护进程。而 docker-compose 是一个独立的编排工具早期是 Python 写的v1后来用 Go 重写成了 v2命令也从docker-compose变成了docker compose注意中间是空格。两者版本是解耦的engine 装 20.10compose 装 v2.20 完全没问题但如果你拿一个很老的 compose v1 去配新 engine某些字段会不认。常见做法是engine 用官方仓库的 rpm/deb 包compose 单独下一个二进制文件扔到/usr/local/bin。这样两个东西可以各自升级互不牵连。2.2 安装包的三种形态选错就白下形态典型文件适用场景注意点二进制 tgzdocker-24.0.7.tgz任意 Linux解压即用需手动配 systemdrpm 包docker-ce-*.rpm等一组CentOS/RHEL/openEuler依赖多要一起下全deb 包docker-ce_*.deb等一组Ubuntu/Debian同样要凑齐依赖二进制 tgz 最省心解压出docker目录里面containerd、runc、dockerd全有拷到/usr/bin就能用缺点是 systemd 服务文件得自己写。rpm/deb 包的好处是能走系统包管理卸载干净坏处是依赖链长——docker-ce依赖containerd.io、docker-ce-cli、docker-buildx-plugin、docker-ce-rootless-extras少一个就装不上。所以离线场景我一般优先推荐二进制包除非对方明确要求走包管理。2.3 版本怎么选别追最新追「和系统内核匹配」docker 对内核有要求基本线是 3.10 以上但要用 overlay2 存储驱动建议 4.x 以上。CentOS 7 默认内核 3.10能用但偶尔有玄学问题。选版本时看两点一是 engine 版本别太新24.x 是当前比较稳的长期选择二是 compose 用 v2 系列v1 已经停止维护新项目别再用了。提示离线包里最好把 engine、compose、以及对应的 systemd 服务文件放同一个目录交付时一个压缩包搞定别东一个西一个。3. 离线安装实操从解压到 systemd 托管这一章是能直接抄作业的部分。假设你拿到的是一个包含二进制包和 compose 二进制的目录目标机器是 x86_64 的 Linux。3.1 二进制方式装 engine先把包传上去解压并铺开文件# 解压 docker 二进制包得到 docker/ 目录 tar -xzvf docker-24.0.7.tgz # 把可执行文件拷到系统路径 sudo cp docker/* /usr/bin/ # 确认关键组件都在 ls -l /usr/bin/dockerd /usr/bin/docker /usr/bin/containerd /usr/bin/runc逻辑说明docker-24.0.7.tgz解压后是一个docker目录里面平铺着所有二进制。cp docker/* /usr/bin/把它们一次性铺到系统 PATH 下。最后一步是自检四个文件缺任何一个后面dockerd都起不来。参数上没什么可调的路径固定即可。3.2 写 systemd 服务文件二进制方式没有自动注册服务得手写一个/usr/lib/systemd/system/docker.service[Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target firewalld.service Wantsnetwork-online.target [Service] Typenotify ExecStart/usr/bin/dockerd ExecReload/bin/kill -s HUP $MAINPID LimitNOFILEinfinity LimitNPROCinfinity TimeoutStartSec0 Delegateyes KillModeprocess Restarton-failure StartLimitBurst3 StartLimitInterval60s [Install] WantedBymulti-user.target逻辑说明Typenotify表示 dockerd 启动完会主动通知 systemd这是官方推荐写法。LimitNOFILEinfinity放开文件描述符限制容器多的时候不加这个会报 too many open files。Delegateyes让 docker 能自己管理 cgroup不加的话容器里再起 systemd 会出问题。这些参数不是可选项是踩过坑之后固定下来的。3.3 装 docker-compose 并验证compose v2 就是一个二进制文件改名放好即可# 放到用户级或系统级路径这里用系统级 sudo cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose # 启动 docker 并设为开机自启 sudo systemctl daemon-reload sudo systemctl enable --now docker # 验证两个组件 docker version docker-compose version逻辑说明compose 二进制必须加执行权限否则报 permission denied。daemon-reload是让 systemd 重新读服务文件改完 service 必须执行。enable --now一步完成开机自启和立即启动。验证时docker version要能看到 Client 和 Server 两段只有 Client 说明守护进程没起来docker-compose version输出 v2.x 才算对。3.4 用一个小 compose 文件跑通闭环装完不验证等于没装。写个最小docker-compose.ymlservices: web: image: nginx:alpine ports: - 8080:80 restart: unless-stopped# 后台拉起 docker-compose up -d # 看状态和日志 docker-compose ps docker-compose logs --tail20 # 收尾清理 docker-compose down逻辑说明services是 v2 的顶层键v1 里是versionservicesv2 可以省略 version。restart: unless-stopped表示除非手动停否则挂了自动重启。up -d后台启动ps看容器状态logs排查启动失败。能跑通这一套说明 engine 和 compose 都正常了。注意这里用的nginx:alpine镜像需要提前docker save成 tar 带到离线机器否则up会卡在拉镜像。4. 避坑与排查五个让我在机房熬夜的瞬间离线装 Docker 的坑大多不是技术难而是细节漏。下面五条都是真实翻过的车。4.1 现象dockerd 起不来日志报 iptables 相关错误原因系统装了 firewalld 或 iptables 规则冲突docker 默认要自己管 iptables 链被占用就起不来。 解决先systemctl stop firewalld systemctl disable firewalld或者给 dockerd 加--iptablesfalse参数但这样容器网络要自己配。生产环境更稳的做法是保留 firewalld在 docker.service 的After里加上 firewalld.service让启动顺序正确。4.2 现象docker-compose 命令找不到或提示 command not found原因二进制没加执行权限或者放到了不在 PATH 的目录。 解决chmod x是必须的放/usr/local/bin一般都在 PATH 里如果还找不到echo $PATH确认一下必要时软链到/usr/bin。4.3 现象compose up 卡在 pulling image最后超时原因离线机器没有镜像compose 默认会去拉。 解决在有网机器上docker save nginx:alpine -o nginx.tar拷到离线机docker load -i nginx.tar再up。或者 compose 文件里写image时确保本地已有。这是离线场景最高频的坑没有之一。4.4 现象容器起来了但访问不了映射端口原因宿主机防火墙没放行或者net.ipv4.ip_forward没开。 解决sysctl net.ipv4.ip_forward看是不是 1不是就sysctl -w net.ipv4.ip_forward1并写进/etc/sysctl.conf。防火墙侧firewall-cmd --add-port8080/tcp --permanent firewall-cmd --reload。4.5 现象卸载重装后旧配置残留新版本行为诡异原因/var/lib/docker和/etc/docker没清干净旧数据和新版本打架。 解决彻底卸载时systemctl stop docker然后删/var/lib/docker、/etc/docker、/usr/bin/docker*、/usr/bin/containerd*再重装。别嫌麻烦残留数据是黑匣子出问题最难查。注意每次离线交付前我都会在一台干净的虚拟机上把整套流程走一遍确认无误再上真机。这个习惯救过我不止一次。5. 进阶技巧把安装包做成可复用的离线交付包装一次是本事能反复装、快速装才是效率。我现在的做法是把 engine 二进制、compose 二进制、systemd 服务文件、一个install.sh脚本、以及几个常用镜像的 tar 包全部塞进一个目录打成压缩包。到现场解压跑一个脚本五分钟内环境就绪。脚本核心逻辑是这样#!/bin/bash set -e # 任何一步失败立即退出避免半装状态 # 1. 铺二进制 cp docker/* /usr/bin/ cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose chmod x /usr/local/bin/docker-compose # 2. 装服务文件 cp docker.service /usr/lib/systemd/system/ systemctl daemon-reload systemctl enable --now docker # 3. 加载预置镜像 for img in images/*.tar; do docker load -i $img done # 4. 自检 docker version docker-compose version echo 环境就绪逻辑说明set -e是关键任何一步失败脚本立刻停不会出现「二进制拷了一半、服务没注册」的中间态。镜像预加载放在服务启动之后因为docker load需要守护进程在跑。最后的自检输出「环境就绪」是给交付验收看的一眼就知道成没成。验证方法上我一般会额外跑一个docker run --rm hello-world这个镜像小、启动快能同时验证 engine、镜像加载、容器运行三层。如果 hello-world 都跑不起来别急着上业务先回头查。从那以后我每次做离线交付都会强制走一遍「干净虚拟机全流程 hello-world 验证」确认无误才碰真机。这套安装包本身不复杂值钱的是那份「提前想到所有断网场景」的准备。希望帮到你。本文还有配套的精品资源点击获取