
简介这份资源面向需要在 Linux 环境下快速搭建容器运行环境的开发与运维人员尤其适合刚接触容器化部署、希望一次性完成 Docker 与 Docker Compose 安装配置的初学者和测试人员。压缩包共 4 个文件整体约 84.53MB包含 Docker 安装包tgz、systemd 服务配置文件service、自动化安装脚本sh以及 Docker Compose 编排文件覆盖从引擎安装到多容器编排的完整链路无需逐条手动执行命令即可完成环境准备。目前已有 265 人学习下载说明其在同类安装资源中具备一定参考价值。借助其中的安装脚本与服务配置读者可以省去手动下载、解压、注册服务等繁琐步骤快速获得可用的 Docker 运行环境并利用 Compose 文件实践多容器应用的统一编排与启停为后续部署测试和生产环境迁移打下基础。1. Docker 与 Docker Compose 安装包从离线包到一键编排的落地路径手里只有一台不能连外网的服务器或者内网机器连镜像仓库都访问不了这时候谈docker pull就是空话。真正卡住人的往往不是命令本身而是「安装包从哪来、怎么装、装完 compose 怎么配」。这篇讲的就是围绕docker 和 docker-compose 安装包这条线把离线安装、版本对齐、编排落地一次说清楚。适合两类人一类是刚接触容器、想在自己机器上把 docker 安装教程走通的新手另一类是在内网、信创环境或麒麟系统里做部署需要离线安装包和 docker-compose 二进制的一线运维。核心结论先放这docker 引擎和 compose 是两套独立的安装包版本必须对齐否则编排文件里的语法会直接报错。2. 安装包到底包含什么引擎、CLI、compose 三件套拆解很多人以为「docker 安装包」就是一个 exe 或者一个 rpm装完就万事大吉。实际上一套完整的容器运行环境至少由三部分组成理解这三者的关系后面选包和排错才不会懵。2.1 引擎、客户端、编排器各自的职责Docker Engine 是后台守护进程dockerd负责真正跑容器、管镜像、管网络和存储。Docker CLI 是你敲的docker命令它只是个客户端通过 socket 跟守护进程通信。Docker Compose 则是独立的一个二进制v2 之后是docker-compose或作为 docker CLI 插件docker compose它读compose.yaml把里面定义的多容器应用翻译成一堆引擎 API 调用。这三者可以分开装。Linux 上常见做法是用发行版仓库装 engine cli再单独下 compose 二进制Windows 和 macOS 上 Docker Desktop 把三者打包成一个安装包省事但体积大。内网离线场景下你往往需要自己凑齐这三样engine 的静态二进制包docker-xx.tgz、compose 的独立二进制、以及可选的镜像离线包。提示compose v1Python 写的docker-compose和 v2Go 写的命令是docker compose差别很大v1 已经停止维护新部署一律上 v2。2.2 离线安装包和在线安装的取舍在线安装走官方脚本或包管理器优点是自动处理依赖缺点是必须有网、且要能访问对应仓库。离线安装包的优势是可控、可复制适合批量部署和内网。代价是你得自己解决依赖比如 engine 静态包依赖iptables、libc、cgroup这些系统组件缺一个dockerd就起不来。选型上我的习惯是能联网的开发机用官方仓库装图省心生产内网一律用离线包版本锁死避免某天自动升级把编排搞崩。下面这张表是两种方式的对比方便你按场景选。维度在线安装离线安装包网络要求需访问官方仓库完全离线版本控制易被自动升级手动锁定依赖处理包管理器自动需手动补齐适用场景开发机、测试环境内网、信创、批量部署典型产物一条安装命令.tgz/.deb/.rpm compose 二进制2.3 版本对齐为什么 compose 会报语法错最常见的翻车现场engine 装的是老版本compose 下了个最新的 v2.32.1结果compose.yaml里用了新语法引擎不认报unsupported config option。反过来engine 很新但 compose 是 v1docker compose命令根本不存在。对齐原则很简单compose v2 的二进制对 engine 版本要求不高但compose.yaml里用到的deploy、profiles、depends_on条件语法需要 engine 达到对应版本。稳妥做法是 engine 用较新的稳定版compose 用同期的 v2 版本。查版本用下面两条命令装完先跑一遍确认。# 查看引擎和客户端版本 docker version # 查看 compose 版本v2 是 docker compose注意中间是空格 docker compose versiondocker version会分别打印 Client 和 Server 两段Server 段出不来说明守护进程没起来这时候别急着怀疑 compose先解决引擎。docker compose version输出形如Docker Compose version v2.x.x如果提示docker: compose is not a docker command说明 compose 插件没装或没放进 CLI 插件目录。3. Linux 离线安装 Docker 引擎静态包解压到 systemd 托管内网 Linux 是最典型的离线场景这一章把从拿到安装包到dockerd被 systemd 托管的完整流程走一遍。以常见的 x86_64 为例ARM 或麒麟系统把包名里的架构换掉即可步骤一致。3.1 下载与解压静态二进制包官方提供的是静态编译的docker-version.tgz里面包含dockerd、docker、containerd、runc等一堆二进制。拿到包后传到目标机器解压到/usr/bin。# 解压静态包-C 指定目标目录--strip-components 去掉顶层目录 tar -xzvf docker-24.0.7.tgz \ --strip-components1 \ -C /usr/bin \ docker/docker docker/dockerd docker/containerd docker/runc docker/ctr # 确认关键二进制就位 ls -l /usr/bin/docker /usr/bin/dockerd /usr/bin/containerd--strip-components1的作用是剥掉压缩包里那层docker/目录否则二进制会散落在/usr/bin/docker/下systemd 找不到。只挑需要的几个文件解压能少占空间但如果你不确定依赖直接全量解压到/usr/bin也行。解压完docker和dockerd必须在同一目录否则 CLI 找不到守护进程。3.2 配置 systemd 服务单元静态包不带服务文件得自己写一个/etc/systemd/system/docker.service让 systemd 能拉起和守护dockerd。[Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target firewalld.service Wantsnetwork-online.target [Service] Typenotify ExecStart/usr/bin/dockerd -H unix:///var/run/docker.sock ExecReload/bin/kill -s HUP $MAINPID LimitNOFILEinfinity LimitNPROCinfinity TimeoutStartSec0 Delegateyes KillModeprocess Restarton-failure StartLimitBurst3 StartLimitInterval60s [Install] WantedBymulti-user.targetTypenotify表示dockerd启动完会主动通知 systemd这样systemctl start不会假成功。Delegateyes让 docker 能自己管理 cgroup 子层级不加这个在部分系统上容器起不来。ExecStart里的-H unix:///var/run/docker.sock是默认监听地址保持默认即可。3.3 启动、验证与开机自启服务文件写好后重载 systemd启动并设为开机自启然后跑一个最小验证。# 重载配置并启动 systemctl daemon-reload systemctl enable --now docker # 查看状态确认 active (running) systemctl status docker --no-pager # 最小验证跑一个 hello-world需本地有镜像或能拉取 docker run --rm hello-worldenable --now一步完成开机自启和立即启动。systemctl status里如果看到Active: active (running)就说明守护进程活了。docker run那步在纯离线环境会失败因为拉不到镜像这时候用docker load导入一个离线镜像包再验证或者直接docker info看引擎信息是否正常输出。注意如果systemctl status显示start request repeated too quickly多半是dockerd启动即崩用journalctl -u docker -n 50看具体报错常见原因是 iptables 缺失或 cgroup 版本不匹配。4. Docker Compose 安装包单文件二进制与 CLI 插件两种装法compose 的安装比引擎简单得多因为它就是一个静态编译的单文件二进制。但装在哪、叫什么名字直接决定你用docker-compose还是docker compose。4.1 独立二进制装法放到 PATH 并赋权最直接的方式是把 compose 二进制下载下来改名放到/usr/local/bin加执行权限。# 下载对应架构的 compose 二进制离线场景提前传好 # 放到 PATH 并重命名为 docker-compose install -m 755 docker-compose-linux-x86_64 /usr/local/bin/docker-compose # 验证 docker-compose versioninstall -m 755一步完成复制和赋权比cp加chmod干净。这样装完命令是docker-compose带横杠属于 v2 的独立调用方式。注意别把它和 v1 的 Python 版搞混v2 的二进制同样叫docker-compose但version输出里会写明Docker Compose version v2.x.x。4.2 CLI 插件装法让 docker compose 生效如果你习惯docker compose空格这种子命令写法需要把二进制放到 CLI 插件目录命名规则是docker-compose放在~/.docker/cli-plugins/或/usr/local/lib/docker/cli-plugins/。# 创建插件目录用户级 mkdir -p ~/.docker/cli-plugins # 放入插件命名必须是 docker-compose install -m 755 docker-compose-linux-x86_64 ~/.docker/cli-plugins/docker-compose # 验证子命令形式 docker compose version插件目录的命名规则是硬性的文件名必须是docker-composedocker CLI 启动时会扫描这个目录把符合命名规则的二进制注册成子命令。放对之后docker compose就能用了。系统级安装把路径换成/usr/local/lib/docker/cli-plugins/对所有用户生效。4.3 两种装法的差异与选择两种装法功能完全一样区别只在调用形式和生效范围。下面这张表帮你快速决定。装法命令形式生效范围适合谁独立二进制docker-compose up看 PATH习惯老命令、脚本里写死docker-compose的CLI 插件docker compose up用户级或系统级新项目、想统一用docker子命令的我的建议是新部署一律用插件装法命令统一未来官方主推也是这个方向。老脚本里如果写死了docker-compose那就两种都装互不冲突因为一个是 PATH 里的可执行文件一个是 CLI 插件。5. 避坑与排查安装包里最容易翻车的五个点装 docker 和 compose 看着简单实际踩的坑一点不少。这一章按「现象 → 原因 → 解决」列五个高频问题都是我在内网和信创环境里真实遇到过的。5.1 守护进程起不来报 iptables 相关错误现象systemctl start docker失败journalctl里看到Failed to start Docker Application Container Engine伴随 iptables 或modprobe报错。原因离线精简系统里iptables或iptables-legacy没装或者内核模块br_netfilter、overlay没加载。docker 默认用 iptables 做 NAT 和端口映射缺了直接崩。解决先确认iptables -V能输出没有就装对应包再检查内核模块lsmod | grep overlay和lsmod | grep br_netfilter缺了用modprobe overlay modprobe br_netfilter加载并写进/etc/modules-load.d/持久化。5.2 compose 报 unsupported config option现象docker compose up直接报unsupported config option: xxx指向compose.yaml里某个字段。原因compose 文件用了新语法但引擎版本太老不认识这个配置项。典型的是deploy.resources或profiles。解决要么升级引擎到支持该语法的版本要么把 compose 文件降级到引擎支持的格式。用docker compose config先校验文件它会指出具体哪一行不兼容。别硬改先对齐版本。5.3 离线环境 docker run 拉不到镜像现象引擎装好了docker run hello-world卡在Unable to find image locally然后超时。原因纯离线环境没有镜像仓库docker run默认去 Docker Hub 拉自然失败。这不是安装包的问题是镜像来源的问题。解决在有网的机器上docker pull后docker save -o xxx.tar image:tag导出传到目标机docker load -i xxx.tar导入。批量场景把常用镜像一次性导出配合 compose 的image字段直接用本地镜像。5.4 麒麟等系统上二进制不兼容现象解压完dockerd一执行就报cannot execute binary file或GLIBC not found。原因下载的静态包架构不对或者系统 glibc 版本太低。麒麟系统常见的是 ARM64 架构却下了 x86_64 的包。解决uname -m确认架构aarch64 就下aarch64或arm64版本的包。glibc 问题优先用官方静态包它自带大部分依赖实在不行换用发行版自带的 docker 包。5.5 权限问题导致必须 sudo现象每次敲docker都要加sudo不加就报permission denied连不上 socket。原因/var/run/docker.sock默认属主是 root普通用户没权限。解决把用户加进 docker 组usermod -aG docker $USER然后重新登录生效。注意这一步等于给了该用户 root 级权限生产环境谨慎别随便加。6. 用 compose 编排一个多容器应用验证整套安装装完不验证等于没装。这一章用一个最小但完整的多容器例子把 engine 和 compose 一起跑通顺便讲几个进阶技巧。6.1 写一个 compose.yaml 跑通服务编排下面这个例子起一个 web 服务加一个缓存覆盖了镜像、端口、依赖、环境变量几个核心字段。services: web: image: nginx:alpine ports: - 8080:80 depends_on: - cache restart: unless-stopped cache: image: redis:7-alpine command: redis-server --appendonly yes volumes: - cache-data:/data volumes: cache-data:depends_on保证启动顺序但注意它只保证容器先起不保证服务就绪真要等就绪得配healthcheck。restart: unless-stopped让容器异常退出后自动重启生产必备。volumes声明具名卷数据持久化到cache-data删容器不丢数据。6.2 启动、查看与清理的完整命令链# 后台启动-d 分离模式 docker compose up -d # 查看服务状态和端口映射 docker compose ps # 看某个服务日志-f 跟随 docker compose logs -f web # 停止并删除容器和网络保留卷 docker compose down # 连卷一起删慎用 docker compose down -vup -d是最常用的启动方式前台跑会占住终端。ps能看到每个容器的状态和端口。logs -f排查启动失败必用。down默认保留具名卷加-v才删这个设计是为了防手滑丢数据记住别在生产随手加-v。6.3 验证安装是否真正可用的三个检查点装完别只看命令能跑做三个检查才算稳。第一docker info能完整输出引擎信息包括存储驱动和 cgroup 版本第二docker compose config能无错解析你的编排文件第三跑一次up -d再down确认容器能正常起停、网络能创建销毁。三个都过这套安装包才算真正落地。我自己的习惯是每台新机器装完先跑一遍这三步把结果记进部署清单。踩过的坑告诉我安装包本身很少出问题出问题的永远是版本对齐和系统依赖。把这两样锁死后面编排就是顺水推舟。希望帮到你。本文还有配套的精品资源点击获取