引言

Docker作为容器化技术的领军者,已成为开发和运维不可或缺的工具。在Linux系统中安装Docker和Docker Compose看似简单,但在不同架构(x86/ARM64)和网络环境(在线/离线)下仍存在诸多注意事项。本文将提供最全面的安装指南,涵盖在线安装、离线部署、多架构支持及常见问题解决,帮助读者在各种环境中快速部署稳定的Docker环境。

一、环境准备与兼容性检查

1.1 支持的Linux发行版

发行版 版本要求 架构支持 包管理工具
CentOS 7.6+ x86_64, ARM64 yum/dnf
Ubuntu 18.04+ x86_64, ARM64 apt
Debian 10+ x86_64, ARM64 apt
openEuler 20.03+ x86_64, ARM64 yum/dnf
Fedora 32+ x86_64, ARM64 dnf

1.2 系统要求

  • 内核版本:3.10+(推荐4.18+)
  • 内存:至少2GB RAM
  • 存储:至少10GB可用空间
  • 架构:x86_64或ARM64(aarch64)

1.3 架构确认

# 查看系统架构
uname -m  # x86_64或aarch64
uname -r  # 内核版本
cat /etc/os-release  # 操作系统信息

二、Docker在线安装

2.1 CentOS/RHEL系列

2.1.1 安装依赖
# 安装必要工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加Docker源(阿里云)
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 更新缓存
sudo yum makecache fast
2.1.2 安装Docker Engine
# 列出可用版本
yum list docker-ce --showduplicates | sort -r

# 安装指定版本(推荐稳定版)
sudo yum install -y docker-ce-20.10.24-3.el7

# 或安装最新版
sudo yum install -y docker-ce
2.1.3 启动并设置自启
# 启动Docker
sudo systemctl start docker

# 设置开机自启
sudo systemctl enable docker

# 验证状态
sudo systemctl status docker
docker --version

2.2 Ubuntu/Debian系列

2.2.1 安装依赖
# 更新apt包索引
sudo apt-get update

# 安装依赖包
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
2.2.2 添加Docker GPG密钥和源
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 添加Docker源
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 更新apt包索引
sudo apt-get update
2.2.3 安装Docker Engine
# 列出可用版本
apt-cache madison docker-ce

# 安装指定版本
sudo apt-get install -y docker-ce=5:20.10.24~3-0~ubuntu-focal

# 或安装最新版
sudo apt-get install -y docker-ce

2.3 配置镜像加速

# 创建配置目录
sudo mkdir -p /etc/docker

# 配置阿里云镜像加速(替换为自己的加速地址)
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://14pfyl2z.mirror.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}
EOF

# 重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker

三、Docker Compose在线安装

3.1 下载二进制文件

# 下载最新稳定版(访问https://github.com/docker/compose/releases获取最新版本)
DOCKER_COMPOSE_VERSION="v2.17.2"
sudo curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 为ARM64架构单独处理(如果上述命令失败)
if [ $(uname -m) = "aarch64" ]; then
  sudo curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-Linux-aarch64" -o /usr/local/bin/docker-compose
fi

3.2 设置执行权限

# 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 创建软链接(如果/usr/local/bin不在PATH中)
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 验证安装
docker-compose --version

四、离线安装方案

4.1 离线安装包准备

4.1.1 Docker离线包下载

访问Docker官方静态二进制包页面下载对应架构的Docker二进制包:

  • x86_64:https://download.docker.com/linux/static/stable/x86_64/
  • ARM64:https://download.docker.com/linux/static/stable/aarch64/

推荐版本:docker-20.10.24.tgz

4.1.2 Docker Compose离线包下载

访问Docker Compose发布页面下载对应架构的二进制文件:

  • 文件名格式:docker-compose-Linux-x86_64 或 docker-compose-Linux-aarch64

4.2 离线安装Docker

4.2.1 安装脚本(适用于x86_64和ARM64)

创建install-docker.sh脚本:

#!/bin/bash
# Docker离线安装脚本

if [ $# -ne 1 ]; then
    echo "用法: $0 <docker-tar-file>"
    exit 1
fi

DOCKER_TAR=$1

# 检查文件是否存在
if [ ! -f "$DOCKER_TAR" ]; then
    echo "错误: 文件 $DOCKER_TAR 不存在"
    exit 1
fi

# 解压Docker二进制包
echo "正在解压Docker二进制包..."
sudo tar -zxvf "$DOCKER_TAR" -C /tmp/

# 复制二进制文件到/usr/bin
echo "正在安装Docker二进制文件..."
sudo cp /tmp/docker/* /usr/bin/

# 创建Docker服务文件
echo "正在创建Docker服务..."
sudo tee /etc/systemd/system/docker.service <<-'EOF'
[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
EOF

# 重新加载systemd配置
sudo systemctl daemon-reload

# 启动并设置开机自启
echo "正在启动Docker服务..."
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装
echo "Docker安装完成,版本信息:"
docker --version

echo "Docker服务状态:"
sudo systemctl status docker --no-pager
4.2.2 执行安装
# 上传docker-20.10.24.tgz和install-docker.sh到服务器
chmod +x install-docker.sh
sudo ./install-docker.sh docker-20.10.24.tgz

4.3 离线安装Docker Compose

# 上传docker-compose二进制文件到服务器
sudo cp docker-compose-Linux-$(uname -m) /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker-compose --version

4.4 离线安装包制作(高级)

如果需要为多台服务器制作离线安装包,可以使用以下脚本:

#!/bin/bash
# Docker离线安装包制作脚本
VERSION="20.10.24"
ARCH=$(uname -m)
DOCKER_TAR="docker-${VERSION}.tgz"
COMPOSE_VERSION="v2.17.2"

# 下载Docker二进制包
wget "https://download.docker.com/linux/static/stable/${ARCH}/${DOCKER_TAR}"

# 下载Docker Compose
if [ "$ARCH" = "x86_64" ]; then
  COMPOSE_ARCH="x86_64"
elif [ "$ARCH" = "aarch64" ]; then
  COMPOSE_ARCH="aarch64"
else
  echo "不支持的架构: $ARCH"
  exit 1
fi

wget "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-Linux-${COMPOSE_ARCH}" -O docker-compose

# 创建安装脚本(使用前面的install-docker.sh)

# 创建压缩包
tar -czvf "docker-offline-${VERSION}-${ARCH}.tar.gz" ${DOCKER_TAR} docker-compose install-docker.sh

echo "离线安装包创建完成: docker-offline-${VERSION}-${ARCH}.tar.gz"

五、Docker服务配置优化

5.1 修改数据存储路径

默认情况下,Docker数据存储在/var/lib/docker,可修改为其他路径:

# 创建新目录
sudo mkdir -p /data/docker

# 停止Docker服务
sudo systemctl stop docker

# 迁移现有数据(如果需要)
sudo rsync -avz /var/lib/docker/ /data/docker/

# 修改Docker服务配置
sudo tee /etc/systemd/system/docker.service.d/override.conf <<-'EOF'
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph /data/docker
EOF

# 重新加载配置并启动
sudo systemctl daemon-reload
sudo systemctl start docker

5.2 配置日志轮转

# 创建或修改daemon.json
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}
EOF

# 重启Docker
sudo systemctl restart docker

5.3 配置HTTP代理(如果需要)

# 创建systemd代理配置
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/proxy.conf <<-'EOF'
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080"
Environment="HTTPS_PROXY=https://proxy.example.com:8080"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
EOF

# 重启Docker
sudo systemctl daemon-reload
sudo systemctl restart docker

六、验证安装与基本操作

6.1 验证Docker安装

# 检查Docker版本
docker --version

# 运行hello-world容器
sudo docker run --rm hello-world

# 查看Docker信息
docker info

6.2 验证Docker Compose安装

创建docker-compose.yml文件:

version: '3'
services:
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    restart: always

启动服务:

docker-compose up -d
docker-compose ps
curl http://localhost
docker-compose down

七、卸载Docker

7.1 标准卸载

CentOS/RHEL:
# 停止服务
sudo systemctl stop docker
sudo systemctl disable docker

# 卸载包
sudo yum remove -y docker-ce docker-ce-cli containerd.io

# 删除数据
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
Ubuntu/Debian:
# 停止服务
sudo systemctl stop docker
sudo systemctl disable docker

# 卸载包
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io

# 删除数据
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

7.2 离线安装的卸载

# 停止容器和服务
sudo docker stop $(docker ps -aq)
sudo docker rm $(docker ps -aq)
sudo systemctl stop docker
sudo systemctl disable docker

# 删除二进制文件
sudo rm -f /usr/bin/docker /usr/bin/dockerd /usr/bin/containerd /usr/bin/containerd-shim /usr/bin/runc

# 删除服务文件
sudo rm -f /etc/systemd/system/docker.service
sudo systemctl daemon-reload

# 删除数据目录
sudo rm -rf /var/lib/docker /data/docker

# 删除Docker Compose
sudo rm -f /usr/local/bin/docker-compose

八、常见问题解决

8.1 启动失败:找不到命令

问题docker: command not found

解决方案

# 检查Docker二进制文件是否在PATH中
echo $PATH
ls -l /usr/bin/docker*

# 如果不在PATH中,创建软链接
sudo ln -s /usr/bin/docker /usr/local/bin/docker

8.2 权限问题:Permission denied

问题Got permission denied while trying to connect to the Docker daemon socket

解决方案

# 添加当前用户到docker组
sudo usermod -aG docker $USER

# 注销并重新登录,或执行以下命令立即生效
newgrp docker

8.3 镜像拉取失败

问题:拉取镜像超时或失败

解决方案

# 检查镜像加速配置
cat /etc/docker/daemon.json

# 重启Docker服务
sudo systemctl restart docker

# 手动拉取测试
docker pull busybox

8.4 离线安装后无法启动

问题Job for docker.service failed because the control process exited with error code

解决方案

# 查看详细日志
journalctl -xeu docker.service

# 常见原因:SELinux限制
sudo setenforce 0  # 临时关闭SELinux
# 或永久关闭:修改/etc/selinux/config,设置SELINUX=disabled

# 常见原因:数据目录权限
sudo chmod -R 777 /var/lib/docker

九、最佳实践与注意事项

9.1 版本选择建议

  • 生产环境:选择LTS版本(如20.10.x),避免使用最新版
  • 版本兼容性:Docker Compose版本应与Docker Engine版本匹配
  • 升级策略:小版本可直接升级,跨大版本建议先卸载再安装

9.2 安全最佳实践

  • 非root用户:将用户添加到docker组,避免直接使用root
  • 镜像安全:只使用可信镜像,定期更新基础镜像
  • 资源限制:为容器设置CPU和内存限制
  • 网络隔离:使用自定义网络隔离不同应用

9.3 性能优化建议

  • 存储驱动:生产环境推荐使用overlay2
  • 内存配置:为Docker分配足够内存(至少2GB)
  • 日志管理:配置日志轮转,避免磁盘占满
  • 镜像清理:定期清理未使用的镜像和容器

十、总结

本文详细介绍了在Linux系统中安装Docker和Docker Compose的完整方案,包括在线安装、离线部署、多架构支持及常见问题解决。通过本文的指南,读者可以在不同Linux发行版(CentOS、Ubuntu等)和硬件架构(x86_64、ARM64)上成功部署Docker环境,无论是有网络的在线环境还是无网络的离线环境。

关键要点:

  1. 在线安装适合有网络环境的服务器,步骤简单但依赖网络
  2. 离线安装适合无网络环境,需要提前准备二进制包
  3. 不同架构(x86/ARM)需要选择对应版本的安装包
  4. 安装后需进行必要的配置优化,如镜像加速、数据存储路径等
  5. 遵循安全和性能最佳实践,确保Docker环境稳定高效

随着容器技术的不断发展,Docker仍然是容器化部署的重要工具。掌握Docker的安装和基础配置,是进行容器化应用开发和运维的基础。希望本文能帮助读者快速搭建稳定可靠的Docker环境。

参考资料

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐