简介:面向 x86 Linux 环境的 Docker 与 Docker Compose 离线安装包,适合开发、测试和运维人员在无法直连外网、需定制镜像仓库或要统一下发部署时使用。rar 压缩包内共 4 个文件:Docker 27.3.1 的 tgz 二进制压缩包,可直接解压以获得 docker 主程序;docker.service 单元文件,用于将 Docker 注册为 systemd 系统服务,实现开机自启与统一管理;install.sh 一键安装脚本,自动完成解压、服务配置和路径写入,减少手工操作;docker-compose 可执行组件,便于通过 YAML 定义并编排多容器应用。整体约 84.53MB,文件结构清晰,按脚本顺序执行即可完成基础部署。当前已有 264 人学习下载。借助这套资源,读者能快速搭建可离线复用的容器运行环境,既保持开发、测试与生产环境一致,又避免了逐项检索依赖的麻烦;配合服务文件和 Compose 工具,还能在多台服务器上批量初始化、批量启动多容器项目,大幅提升交付效率。
1. 安装包选型和准备工作:先把路子理顺
做运维和开发的兄弟应该都有同感,Docker 本身已经不单单是"装个容器"这么简单了,它已经成了本地开发、CI/CD、服务部署整个链条里的基础设施。而 docker-compose(现在官方更推荐叫 Docker Compose Plugin)解决的问题也很直接:当你的项目依赖 MySQL、Redis、Nginx、后端服务这一大堆容器的时候,一条命令全部拉起来,省去手动 docker run 写一长串参数的痛苦。
先说结论:如果你是 Windows 用户,直接装 Docker Desktop 是最省心的路子;如果你是 Linux 服务器(尤其是 CentOS 7、Ubuntu 22.04 这类),用包管理器装 Docker Engine,再单独装 docker-compose 插件;如果你在麒麟、统信这类国产化系统上离线部署,那就得提前准备好离线安装包,不然折腾死你。
这篇博文我把三种场景全都捋一遍,包括安装包怎么选、国内镜像源怎么配、docker-compose 版本坑怎么避、以及我在实际部署中踩过的那些坑。适合刚入门的、也适合已经在用但想优化安装流程的朋友。
动手之前,有几件事必须先想明白,不然装到一半容易卡壳。
1.1 确认操作系统和内核版本
Docker 对内核版本有硬性要求(旧版本尤其明显),Linux 内核低于 3.10 基本跑不起来。Windows 上则要求 Win10 64 位专业版/企业版/教育版(家庭版也能装但要用 WSL2 还得额外配置),而且必须在 BIOS 里开启虚拟化。macOS 这边要求 2010 年之后的机型,并且系统版本不能太老。
检查 Linux 内核版本直接执行:
uname -r我遇到过不止一次,CentOS 7 默认内核 3.10.0,装完 Docker 20.10 之后有个别内核模块加载异常,cgroup 相关功能不完整,容器启不来。这种情况与其跟内核较劲,不如直接升级内核到 5.x,或者用 Docker 官方推荐的 CentOS 自带yum install docker-ce能装上的最新版本,问题会少很多。
1.2 确定安装方式:在线、离线还是桌面版
安装包的选择跟你的网络环境强绑定。开发机上网络通畅,直接走官方源或国内镜像源在线安装;生产内网环境没外网,就得在能联网的机器上把 rpm/deb 包和 compose 二进制全拉下来,打包带进去;Windows 用户如果不想装 Docker Desktop(比如机器配置一般、虚拟机占用太高),也可以只装 Docker CLI + 远程连接到 Linux 主机上的 Docker daemon,这种方式适合做远程开发调试。
我的建议是先把场景定下来,再往下走,别上来就一把梭。
2. Linux 下 Docker 安装包的获取与安装全流程
Linux 下装 Docker 我一般分两类:有外网的和没外网的。两类场景我都跑过很多次,下面把命令和思路都给全。
2.1 有外网环境:官方源 + 国内镜像源加速
先说 Ubuntu / Debian 系。官方文档给的那套流程本身没问题,但国内机器直接访问 download.docker.com 经常慢成蜗牛,时间全浪费在下载上。所以我把源地址替换成清华或者阿里云的镜像站,速度快了几个数量级。
Ubuntu 的安装步骤(以 22.04 为例),一条条来:
# 安装依赖 sudo apt-get update sudo apt-get install -y ca-certificates curl gnupg lsb-release # 添加 Docker 官方 GPG 密钥(用国内镜像源拉取) curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 写入软件源(阿里云镜像) echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 正式安装 sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin注意最后一条命令里的docker-compose-plugin,这个就是官方推荐的新版 Compose V2 插件。装完以后直接用docker compose version验证(注意没有中间的横杠了)。
CentOS / RHEL 系的操作思路一样,只是包管理器从 apt 换成 yum/dnf,软件源地址指向阿里云:
sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin # 启动并设置开机自启 sudo systemctl enable docker --now装完以后docker info看一眼,确认运行状态正常,再做镜像加速。
2.2 离线环境:打包依赖传进去装
内网服务器没有外网,是最让人头疼的场景,尤其是国产化环境——麒麟、统信、中科方德这些,网上教程还少,很多坑只能自己趟。我总结出一套通用打法:找一台和离线机器操作系统完全一致、位数一致的联网机器,下载好所有依赖包,打成 tar 包带进去。
以 CentOS 7.9 为例,在联网机器上下载:
# 创建目录存放所有 rpm 包 mkdir -p /opt/docker-offline && cd /opt/docker-offline # 只下载不安装(这里用 yumdownloader 或 dnf download) yum install -y yum-utils yumdownloader --resolve docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-ce-rootless-extras # 打成一个包 tar czf docker-offline-centos7.tar.gz *.rpm把 tar 包拷到内网服务器上,解压后执行:
tar xzf docker-offline-centos7.tar.gz yum localinstall -y *.rpm如果是麒麟系统,命令风格跟 CentOS 接近但又有差异,建议直接用rpm -ivh *.rpm --nodeps强行装,但一定要提前把依赖库补齐,比如libcgroup、iptables、device-mapper-persistent-data这些,缺哪个补哪个。
装完检查一下:
systemctl daemon-reload systemctl start docker systemctl enable docker docker version2.3 安装后的必做配置:镜像加速
这一步不做,你在国内拉镜像基本就是煎熬。Docker 默认的 Docker Hub 镜像源速度慢不说,还经常超时。我一般直接配置/etc/docker/daemon.json,写入国内镜像源地址:
{ "registry-mirrors": [ "https://docker.m.daocloud.io", "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com" ] }然后重启 Docker:
systemctl daemon-reload systemctl restart docker加速这玩意儿不一定每个源都稳定,像中科大源偶尔会挂,所以我建议多填几个,尽量排在前面的是相对能用的。也可以用阿里云容器镜像服务的专属加速地址,每个人账号都有一个专属域名,这个速度最稳。
3. docker-compose 安装包获取:别再用老一套 pip 装了
docker-compose 的安装是重灾区,很多老教程还在让你用pip install docker-compose,这种装法装的是 Python 版的 Compose V1,官方早就停止维护了。现在统一用 V2 插件形式,要么装docker-compose-plugin包,要么直接下载二进制放到 PATH 里,二选一。
3.1 包管理器安装(首选)
最省事的方式就是跟 Docker 一起装。Ubuntu 用 apt、CentOS 用 yum,安装 docker 时把docker-compose-plugin一并装上就行,这就是官方源里的标准包,版本跟随 Docker Engine 一起更新,不需要单独管。这是我最推荐的安装方式,没有之一。
docker compose version看到类似Docker Compose version v2.24.x的输出,说明就位了。
3.2 手动下载二进制(需要特定版本时用)
有时候官方源里的 compose 版本滞后,或者你需要升到指定版本来匹配项目里的version字段定义,这时就得从 GitHub 直接拉二进制了:
# 以 v2.24.5 为例 DOCKER_COMPOSE_VERSION="v2.24.5" curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose但这里有个坑:从 GitHub 下载在国内经常慢到没脾气。所以我一般建议去国内镜像站拉,比如把地址改成https://mirror.ghproxy.com/https://github.com/docker/compose/releases/download/...这种代理前缀,速度快很多。也可以用阿里云、腾讯云的镜像仓库,各有各的加速域名。
3.3 版本管理和升级的正确姿势
想升级 docker-compose 到指定版本,我踩过的坑是:直接用docker compose version检查当前版本,如果在 2.x 以下,优先卸载旧的 Python 版本。
# 卸载旧版本(如果是 pip 装的) pip uninstall docker-compose # 升级到指定版本(以 2.23.x 为例) curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose version重点:V2 版本的二进制文件名是docker-compose-linux-x86_64,如果你在 ARM 机器(比如树莓派、华为鲲鹏)上装,要换成docker-compose-linux-aarch64。这个我吃过亏,文件下下来一执行就提示Exec format error,折腾半天才想起来架构不对。
4. Windows 环境安装:到底用 Docker Desktop 还是分离方案
Windows 装 Docker 是新手问得最多的。Docker Desktop 自带 Docker Engine、Compose V2、Kubernetes 单机版、图形化管理界面,安装包直接从官网拉就行。安装包下载慢的问题,可以通过配置 Windows 上的 hosts 或使用代理解决,实在不想折腾就找国内下载站分流。
4.1 Docker Desktop 的安装细节
Docker Desktop 的安装过程本身不复杂,但它依赖 WSL2 或者 Hyper-V,这个前置条件不能忽略。建议先装好 WSL2:
wsl --install wsl --set-default-version 2然后下载 Docker Desktop Installer.exe,双击安装。安装完启动,首次启动会提示需要启用 WSL 内核更新,按提示下载 wsl_update_x64.msi 装上就好。
Docker Desktop 装好以后自带docker-compose命令,不需要额外安装,这是它方便的地方。日常使用中我比较推荐在 Windows 上把文件放在 WSL2 的 Linux 文件系统里,不要放在/mnt/c/...这种挂载目录下,因为跨文件系统的 IO 性能损耗非常明显。以前有个项目在 Windows 目录下挂载到容器,构建一次要五分钟,挪到 WSL2 目录里两分钟搞定。
4.2 不装 Docker Desktop 的方案
如果你跟我一样不太想让 Docker Desktop 常驻系统托盘占内存,或者你的 Windows 版本不支持 Hyper-V,那就换个思路:装 Docker CLI + 远程连到一台 Linux 机器上的 Docker daemon。
大致流程是:Windows 上用 chocolatey 装 docker-cli(choco install docker-cli),或者直接下载 docker.exe 放到 PATH 里,然后用环境变量指向远程主机:
$env:DOCKER_HOST = "tcp://192.168.1.100:2375" docker ps不过这个方案涉及 Docker daemon 的安全配置,远程端口不能裸奔,必须启用 TLS 认证,不然别人扫到你的 2375 端口就麻烦了。小白可以先用 Docker Desktop,进阶再考虑这种玩法。
5. 实操案例:用 docker-compose 一键拉起常用基础服务
安装包配置好之后,就该让 docker-compose 发挥真正的作用了。我直接放两个线上环境里跑得很稳的配置,覆盖 MySQL 8.0 和 Redis 主从复制,完全是生产可用级别的参考。
5.1 MySQL 8.0 的 compose 配置
写一个docker-compose.yml:
services: mysql8: image: mysql:8.0 container_name: mysql8 restart: always environment: MYSQL_ROOT_PASSWORD: "YourStrongPass123" TZ: "Asia/Shanghai" ports: - "3306:3306" volumes: - ./mysql/data:/var/lib/mysql - ./mysql/conf:/etc/mysql/conf.d - ./mysql/logs:/logs command: - "--character-set-server=utf8mb4" - "--collation-server=utf8mb4_unicode_ci" - "--lower_case_table_names=1"这里有个关键点:MySQL 8.0 默认的认证插件是caching_sha2_password,如果客户端(比如老的 Navicat 版本、PHP 老驱动)不支持,连接会报错。解决方式是在命令里加一行--default-authentication-plugin=mysql_native_password,或者你接受新驱动只认新插件也行。我建议能升客户端就升客户端,别在服务器上降低安全标准。
5.2 Redis 主从复制的 compose 配置
Redis 主从配置网上有各种版本,我这个是实测稳定版:
services: redis-master: image: redis:7.0 container_name: redis-master restart: always ports: - "6379:6379" command: redis-server --appendonly yes --requirepass "MasterPass123" redis-slave: image: redis:7.0 container_name: redis-slave restart: always depends_on: - redis-master ports: - "6380:6379" command: redis-server --slaveof redis-master 6379 --masterauth "MasterPass123" --requirepass "SlavePass123"执行docker compose up -d,等个几秒钟,进入从节点验证一下:
docker exec -it redis-slave redis-cli -a SlavePass123 127.0.0.1:6379> info replication # Replication role:slave master_host:redis-master master_link_status:up看见master_link_status:up就说明主从关系已经建立,数据在同步了。这套配置里最容易被忽略的是--masterauth参数,主节点开启密码验证后,从节点不配这个参数永远连不上主节点,日志里只会反复刷MASTER <-> REPLICA sync started然后超时。
5.3 镜像拉取慢的临时变通方案
如果镜像加速配了还是慢,尤其是拉 redis、mysql 这种常用基础镜像,可以临时换个更具体的镜像源地址。举例,把redis:7.0换成docker.m.daocloud.io/library/redis:7.0,相当于手动指定加速源的完整路径。这个做法在测试环境救过我好几次,虽然生产环境还是建议把镜像加速配置好。
6. 安装和部署中的常见问题与排查技巧
这部分我把实际运维中碰到过的、网上讨论热度也高的问题整理成一张速查表,每个问题都附上排查思路,不是只丢一句"重启解决"。
6.1 常见问题速查表
| 问题现象 | 排查思路 | 解决方案 |
|---|---|---|
| docker pull 卡住或超时 | 镜像源不通或没配加速 | 配置 daemon.json 加速地址,换可用源,重启 docker |
docker-compose 提示command not found | 二进制没进 PATH | 用which docker-compose查找,软链到 /usr/local/bin/ 或 /usr/bin/ |
执行 docker-compose 报Exec format error | 下载了错误架构的二进制 | 确认机器架构,x86_64 和 aarch64 选对版本 |
| Windows 下容器内访问宿主机服务失败 | WSL2 IP 变化导致 | 用host.docker.internal代替 localhost 访问宿主机服务 |
| MySQL 容器启动后连接报认证错误 | caching_sha2_password 插件不兼容 | 客户端升级驱动,或降级用 mysql_native_password |
| daemon.json 配置后 docker 启动失败 | JSON 格式错或源不可用 | docker info看报错,逐行检查 JSON 语法,去掉问题源 |
| Redis 从节点同步一直超时 | masterauth 没用对 | 仔细核对主从配置中的 requirepass 和 masterauth |
6.2 我曾经踩过的几个印象深刻的坑
第一个是麒麟系统下的 docker-compose 离线安装。麒麟和 CentOS 同源,但软件仓库里的包名有差异,docker-compose-plugin在麒麟仓库里搜不到,只能自己下载官方静态二进制。然后静态二进制运行时依赖 glibc 版本,麒麟 V10 的 glibc 是 2.28,如果下载的 docker-compose 是用更高版本 glibc 编译的,会出现version GLIBC_2.29 not found的报错。这个只能换老一点的 compose 版本,或者换 Linux 版编译产物,没别的办法。
第二个是 Compose 文件里version字段的问题。旧教程里都写version: '3.8',但 Compose V2 已经完全不看这个字段了,文件里写了反而会在某些新版本里触发警告。我现在的习惯是直接删掉version行,让它省心一点。
第三个是docker-compose up -d已经跑起来的服务,改了 yml 配置后忘了重新构建镜像。经常遇到同事改了环境变量说没生效,其实就是用了旧缓存。规范操作是先docker compose down,再用docker compose up -d --build重新拉起,这样容器重建时才会真正加载新配置。
6.3 给新手的入门建议
最后我想说的是,安装包这块其实没有太多玄学,核心就两点:一是选对系统对应的安装方式,二是把镜像加速配置好。很多朋友一上来就卡在下载慢、源不通这些环境问题上,其实换一个镜像地址就全通了,没必要硬磕官方源。
如果你平时就自己写代码、起几个容器做测试,优先把 Docker Engine + docker-compose-plugin 装好就够了,桌面版不是必须的。如果你是尝试在 Windows 上做全套开发调试,那 Docker Desktop 确实能帮你省掉大量环境隔离的麻烦,前提是电脑内存够大,不然跑几个容器就卡得不行。
我实际用下来,Linux 服务器上直接装引擎加插件,是运行最稳、资源占用最少、长期维护最省心的方案,这个选择到现在没后悔过。
本文还有配套的精品资源,点击获取