完整的 Docker + Docker Compose 部署教程亲测有效

一、前置环境检查

开始前先确认系统架构与内核版本,这决定了你要下载哪一种安装包。

bash 复制代码
# 查看系统架构(x86_64 或 aarch64)
uname -m
# 查看内核版本(需 ≥ 3.10,推荐 4.18+)
uname -r
# 查看发行版信息(确认是否为麒麟 V10 / CentOS / Ubuntu 等)
cat /etc/os-release
输出架构 对应安装包 官方下载地址
x86_64 docker-xxx.tgz (x86) download.docker.com/linux/stati...
aarch64 (ARM64) docker-xxx.tgz (aarch64) download.docker.com/linux/stati...
Docker Compose 二进制文件从 GitHub Releases 下载:github.com/docker/comp... ,文件命名规则为 docker-compose-linux-x86_64docker-compose-linux-aarch64,请严格对应架构。

二、Docker 离线安装(以麒麟 ARM64 / CentOS 通用二进制方式)

二进制方式适用于所有 Linux 发行版(含麒麟 V10 x86 / ARM64、CentOS),博客原文以下载 docker-20.10.7.tgz 为例,操作步骤如下。

1. 解压并部署二进制文件

bash 复制代码
# 解压 docker 安装包
tar xvf docker-20.10.7.tgz
# 将 docker 全部二进制文件复制到 /usr/bin
cp -p docker/* /usr/bin/
# 验证可执行权限
ls -l /usr/bin/docker*
# 应看到 dockerd、docker 等文件均为 -rwxr-xr-x

2. 准备 docker.service 系统配置文件

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
#TasksMax=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target

如需自定义 Docker 数据存储路径,可同时创建 /etc/docker/daemon.json

bash 复制代码
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
  "data-root": "/data/docker",
  "registry-mirrors": ["https://docker.m.daocloud.io"]
}
EOF

3. 启动并设置开机自启

bash 复制代码
chmod +x /etc/systemd/system/docker.service
systemctl daemon-reload
systemctl start docker
systemctl enable docker.service

4. 验证安装

bash 复制代码
docker -v          # 输出 Docker version 20.10.7, build xxx 即成功
docker info        # 查看 Storage Driver、Cgroup、Registry Mirrors 等
systemctl status docker   # Active: active (running)

三、Docker Compose 离线安装

Docker Compose 是独立二进制文件,与 Docker 引擎解耦,安装非常简单。

1. 下载并上传

从 GitHub Releases 选择与架构对应的文件(本例为 ARM64),上传到服务器任意目录,例如 /data

2. 部署到系统路径

bash 复制代码
# 移动并重命名为 docker-compose
mv /data/docker-compose-linux-aarch64 /usr/local/bin/docker-compose
# 授予可执行权限
chmod +x /usr/local/bin/docker-compose

3. 验证

bash 复制代码
docker-compose -v
# 输出示例:Docker Compose version v2.24.5

提示:Compose V2 已原生支持 docker compose(空格形式,作为 Docker CLI 插件)。如使用插件形式,可将二进制放到 /usr/local/libexec/docker/cli-plugins//usr/libexec/docker/cli-plugins/ 目录下,命名为 docker-compose


四、Docker 与 Docker Compose 版本对应关系

Compose 文件格式版本与 Docker 引擎版本必须匹配,否则 docker-compose up 会报错。常用对照如下:

Compose 文件格式与 Docker Engine 兼容矩阵

Compose 文件版本 所需 Docker Engine 最低版本
Compose spec(最新规范) 19.03.0+
3.8 19.03.0+
3.7 18.06.0+
3.6 18.02.0+
3.5 17.12.0+
3.4 17.09.0+
3.3 17.06.0+
3.2 17.04.0+
3.1 1.13.1+
3.0 1.13.0+
2.4 17.12.0+
2.3 17.06.0+
2.2 1.13.0+
2.1 1.12.0+
2.0 1.10.0+
1.0 1.9.1+

Docker 引擎与 Compose V1 / V2 对应关系

Docker 引擎版本 Compose V1(独立二进制) Compose V2(插件/独立二进制)
Docker 20.10.0+ 1.29.2 v2.0.0 -- v2.15.1
Docker 23.0.0+ 已停止维护 v2.17.0 -- v2.18.1
Docker 24.0.0+ 已停止维护 v2.19.0 -- v2.21.0
Docker 26.0.0+ 已停止维护 v2.24.0+

关键提示:Docker 官方自 2023 年 7 月起停止维护 Compose V1 ,新部署请使用 V2(docker composedocker-compose v2.x 二进制);Docker 20.10 这类老版本搭配 Compose 1.29.2 + 文件格式 3.x 仍是常见稳定组合。


五、快速使用示例

1. 单容器部署(Nginx)

bash 复制代码
# 拉取镜像
docker pull nginx:latest
# 启动并挂载端口
docker run -d --name my-nginx -p 8080:80 nginx:latest
# 验证
docker ps
curl http://localhost:8080

2. Docker Compose 多容器部署

创建 docker-compose.yml

yaml 复制代码
version: "3.8"          # 对应 Docker Engine 19.03.0+
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - app
  app:
    image: myapp:1.0
    restart: always
    environment:
      - ENV=prod

执行常用命令:

bash 复制代码
docker-compose up -d        # 后台启动所有服务
docker-compose ps           # 查看服务状态
docker-compose logs -f      # 查看日志
docker-compose down         # 停止并删除容器/网络

六、Docker 完全卸载

A. Ubuntu / Debian 系统(apt 安装方式)

参考博客引用的「ubuntu完全卸载docker及再次安装」,完整清理步骤如下:

bash 复制代码
# 1. 停止 docker 相关服务
sudo systemctl stop docker docker.socket containerd
# 2. 卸载所有 docker 相关包
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker.io docker-doc
# 3. 卸载不再需要的依赖
sudo apt-get autoremove -y
sudo apt-get autoclean
# 4. 删除数据、配置、运行时残留(关键,否则重装后会沿用旧数据)
sudo rm -rf /var/lib/docker          # 镜像与容器数据
sudo rm -rf /var/lib/containerd      # containerd 数据
sudo rm -rf /etc/docker              # daemon.json 等配置
sudo rm -rf /var/run/docker.sock     # socket 文件
sudo rm -rf /etc/systemd/system/docker.service*  # 若为手动部署需删除

B. CentOS / 麒麟系统(yum / 二进制安装方式)

bash 复制代码
# yum 安装的卸载
sudo systemctl stop docker docker.socket containerd
sudo yum remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo rm -rf /var/lib/docker /var/lib/containerd /etc/docker /var/run/docker.sock

二进制手动部署的卸载(与上文离线安装对应,需删除所有手动放置的文件):

bash 复制代码
systemctl stop docker docker.socket containerd
systemctl disable docker.service containerd.service
rm -f /etc/systemd/system/docker.service /usr/lib/systemd/system/docker.service
rm -f /usr/lib/systemd/system/containerd.service
rm -f /usr/bin/docker /usr/bin/dockerd /usr/bin/docker-init /usr/bin/docker-proxy /usr/bin/containerd /usr/bin/containerd-shim* /usr/bin/runc /usr/bin/ctr
rm -rf /var/lib/docker /var/lib/containerd /etc/docker /var/run/docker.sock
systemctl daemon-reload

C. Docker Compose 卸载

只删除二进制文件即可:

bash 复制代码
# 独立二进制形式
rm -f /usr/local/bin/docker-compose
# CLI 插件形式(按实际目录)
rm -f /usr/local/libexec/docker/cli-plugins/docker-compose
rm -f /usr/libexec/docker/cli-plugins/docker-compose
# apt / yum 安装的插件
sudo apt-get purge -y docker-compose-plugin
sudo yum remove -y docker-compose-plugin

D. 验证卸载干净

bash 复制代码
docker -v                 # 应提示 command not found
docker-compose -v         # 应提示 command not found
systemctl status docker   # 应显示 Unit docker.service could not be found
ls /var/lib/docker        # 目录不存在
which dockerd docker docker-compose   # 均无输出

七、常见报错与排查

报错现象 可能原因 解决方案
Failed to start docker.service: Unit not found systemd 未加载到 service 文件或路径错误 确认文件位于 /etc/systemd/system//usr/lib/systemd/system/,执行 systemctl daemon-reload 后重试
Cannot connect to the Docker daemon at unix:///var/run/docker.sock dockerd 未启动或 socket 权限不足 systemctl start docker;或将当前用户加入 docker 组:usermod -aG docker $USER 后重新登录
iptables failed: iptables -t nat ... 系统防火墙与 docker iptables 冲突(CentOS 7 firewalld 常见) systemctl restart docker 重新加载规则;或避免关闭 firewalld,使用 firewall-cmd 开放端口
overlay2 不支持 / Storage driver 报错 内核过老或文件系统不支持 升级内核至 4.x+;CentOS 7 需确保使用 xfs 且 d_type=truexfs_info / 查看 ftype=1)
docker: Error response from daemon: cgroup ... cgroup 版本不匹配或 cgroups 未挂载 检查 `docker info grep -i cgroup,必要时在 GRUB 添加 cgroup_enable=memory swapaccount=1`
Compose 报 version is unsupported yml 顶层 version 字段高于当前 Docker Engine 支持范围 对照上方兼容矩阵调整 version,或直接删除该字段(Compose V2 推荐)
ARM 服务器安装报 seccomp 错误 缺少系统依赖库(libseccomp 等) 在外网机用 repoquery --requires --resolve --recursive docker-ce 提前下载所有依赖一并离线安装
镜像拉取超时 / i/o timeout 网络或镜像源不可达 配置 daemon.json 中的 registry-mirrorssystemctl restart docker;离线环境用 docker save/docker load 导入

八、镜像加速配置(可选)

国内环境推荐配置镜像加速,编辑 /etc/docker/daemon.json

json 复制代码
{
  "data-root": "/data/docker",
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com",
    "https://hub-mirror.c.163.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}
bash 复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info | grep -A 3 "Registry Mirrors"   # 验证加速器是否生效

配置 log-driverlog-opts 可防止长期运行容器日志占满磁盘,是生产环境的通用最佳实践。

以上内容覆盖了博客引用源的核心操作:麒麟/ARM64 离线二进制部署、Compose V2 二进制安装、Compose 文件格式与 Docker Engine 兼容矩阵、Ubuntu/CentOS/二进制三种卸载方式,以及部署全流程的常见报错处理。按对应架构替换下载链接即可在 x86_64 与 aarch64 双平台复用同一套流程。

相关推荐
乌恩大侠2 小时前
【Sionna】docker build ubuntu cuda
ubuntu·docker·容器·spark·o-ru·ai-ran
FungLeo2 小时前
成为全栈·Node 后端篇·容器化:给 Node 应用写一个像样的 Dockerfile
docker·node.js·dockerfile·成为全栈·后端服务容器·docker 容器
梅梅绵绵冰3 小时前
Docker容器化平台
docker·容器·eureka
我是唐青枫3 小时前
Docker diff 详解:看清容器里到底改了什么
docker·容器
jiao糖瓜子5 小时前
Docker 完全指南:从镜像容器到生产部署
docker·容器·eureka·镜像·仓库
JavaPub-rodert6 小时前
Docker 容器启动了,不代表服务真的能用:Healthcheck 实战
运维·docker·容器
先吃饱再说7 小时前
别再手动敲三遍 docker run 了:学会使用 Docker Compose 多容器编排
docker·容器
xixiaoyunya9 小时前
Docker 容器化部署实战:从零搭建一套完整的 Nginx + Node.js + MySQL + Redis 项目环境
nginx·docker·node.js
全栈攻略20 小时前
Docker 中 ROS2 工作流 Topic 验证与常用命令指南
运维·docker·容器