技术博客

Docker 安装与第一个容器:Ubuntu、CentOS、EulerOS 完整安装指南

手把手讲解在 Ubuntu 22.04、CentOS 7/8、麒麟/EulerOS 上安装 Docker CE 的完整流程:官方源配置、国内镜像加速、常见安装错误处理、daemon.json 基础配置,以及运行第一个容器验证安装成功——包含运维环境中最常见的离线安装方案。

Docker安装UbuntuCentOSEulerOS离线安装入门

安装 Docker 是学习容器的第一步,但在企业环境中经常遇到网络限制、操作系统版本差异、权限问题等障碍。本文覆盖主流 Linux 发行版的安装方式,并重点讲解国内网络环境下离线环境的安装方案。

安装前准备

# 检查操作系统版本
cat /etc/os-release
uname -r    # 内核版本(Docker 要求 >= 3.10,推荐 >= 4.15)

# 检查现有 Docker(如有旧版本需先卸载)
docker --version 2>/dev/null || echo "未安装"

# 确保防火墙不影响测试(生产环境按需配置)
# Ubuntu: ufw status
# CentOS: firewall-cmd --state

一、Ubuntu 22.04 安装

方法1:官方脚本(推荐,网络通畅时)

# 一键安装脚本(自动识别发行版)
curl -fsSL https://get.docker.com | sh

# 国内网络使用阿里云镜像源
curl -fsSL https://get.docker.com | sh -s -- --mirror Aliyun

方法2:手动添加 APT 源

# 1. 安装必要依赖
sudo apt-get update
sudo apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# 2. 添加 Docker GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | \
    sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 3. 添加 APT 仓库(使用阿里云镜像)
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
  $(lsb_release -cs) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4. 安装 Docker CE
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 5. 启动并设置开机自启
sudo systemctl enable --now docker

# 6. 验证
docker version

非 root 用户使用 Docker

# 将当前用户加入 docker 组(避免每次 sudo)
sudo usermod -aG docker $USER

# 重新登录后生效,或临时刷新组
newgrp docker

# 验证(无 sudo)
docker ps

二、CentOS 7 / CentOS 8(AlmaLinux/Rocky Linux)安装

CentOS 7

# 1. 卸载旧版本
sudo yum remove -y docker docker-client docker-client-latest \
    docker-common docker-latest docker-latest-logrotate \
    docker-logrotate docker-engine

# 2. 安装工具包
sudo yum install -y yum-utils

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

# 4. 安装
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 5. 启动
sudo systemctl enable --now docker

# 6. 验证
docker run hello-world

CentOS 8 / AlmaLinux 8 / Rocky Linux 8

# CentOS 8 默认用 Podman,需先处理冲突
sudo dnf remove -y podman buildah  # 如有冲突

sudo dnf install -y dnf-plugins-core
sudo dnf config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# CentOS 8 需要指定 containerd.io 版本
sudo dnf install -y docker-ce docker-ce-cli \
    --allowerasing   # 允许替换冲突包

sudo systemctl enable --now docker

三、麒麟 OS / EulerOS / OpenEuler(信创环境)

# 麒麟 V10(基于 CentOS 8/RHEL 8)
# OpenEuler 22.03 LTS

# 方法1:使用 OpenEuler 官方仓库(推荐)
sudo dnf install -y docker

# 方法2:使用 CentOS 8 的 docker-ce 源(兼容)
sudo dnf config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 注意:麒麟 ARM64(飞腾/鲲鹏)需使用 ARM 版
# 安装命令相同,yum/dnf 会自动选择 aarch64 包

sudo systemctl enable --now docker
docker version  # Server 的 Architecture 应该是 aarch64

四、离线安装(内网/隔离环境)

企业生产环境通常不能访问公网,需要离线安装。

步骤1:在有网机器上下载安装包

# 下载 Docker CE 离线包(选择对应系统版本)
# Ubuntu:
apt-get download docker-ce docker-ce-cli containerd.io docker-compose-plugin

# CentOS(下载 RPM 包):
yumdownloader --resolve docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 或直接从官网下载二进制包(最简单)
# https://download.docker.com/linux/static/stable/x86_64/
DOCKER_VERSION="27.3.1"
wget https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKER_VERSION}.tgz

步骤2:传输到内网机器并安装

# 使用二进制包安装(最通用,不依赖包管理器)
DOCKER_VERSION="27.3.1"
tar xzf docker-${DOCKER_VERSION}.tgz

# 复制二进制到 PATH
sudo cp docker/* /usr/local/bin/

# 创建 systemd service 文件
sudo tee /etc/systemd/system/docker.service << 'EOF'
[Unit]
Description=Docker Application Container Engine
After=network-online.target firewalld.service containerd.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/local/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
Restart=always
RestartSec=2
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now docker

五、配置国内镜像加速

安装完成后,配置镜像加速器是必须的步骤(不然 pull 镜像极慢)。

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json << 'EOF'
{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com",
    "https://hub-mirror.c.163.com",
    "https://docker.m.daocloud.io"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2"
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

# 验证配置生效
docker info | grep -A5 "Registry Mirrors"

六、运行第一个容器

# 经典验证:hello-world
docker run hello-world

# 输出解读:
# Unable to find image 'hello-world:latest' locally  ← 本地没有,从 Hub 拉取
# latest: Pulling from library/hello-world           ← 正在拉取
# ...
# Hello from Docker!                                 ← 容器运行成功
# This message shows that your installation appears to be working correctly.

# 运行一个交互式 Ubuntu 容器(感受容器隔离)
docker run -it ubuntu:22.04 bash
# 现在你在容器内部!
root@a1b2c3d4:/# hostname    # 容器的 hostname(随机 ID)
root@a1b2c3d4:/# ps aux      # 只能看到容器内的进程
root@a1b2c3d4:/# exit        # 退出容器(容器停止)

# 运行 Nginx 并访问
docker run -d -p 8080:80 --name my-nginx nginx
curl http://localhost:8080
# 返回 Nginx 欢迎页面

七、常见安装问题

问题1:Permission denied 访问 docker.sock

# 错误:permission denied while trying to connect to the Docker daemon socket
# 原因:当前用户不在 docker 组

# 解决:
sudo usermod -aG docker $USER
newgrp docker  # 或重新登录

问题2:安装后 docker 服务启动失败

# 查看详细错误
sudo journalctl -u docker --no-pager -n 50

# 常见原因1:storage driver 不支持
# → 删除 daemon.json 中的 storage-driver,重启

# 常见原因2:内核版本过低(CentOS 7 默认 3.10)
uname -r
# 如果是 3.10.x,升级内核或使用 devicemapper 存储驱动(不推荐)

问题3:镜像拉取超时

# 测试连通性
docker pull hello-world --disable-content-trust

# 如果超时,检查镜像加速配置
docker info | grep Mirrors

# 企业内网完全隔离:配置 HTTP 代理
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf << 'EOF'
[Service]
Environment="HTTP_PROXY=http://proxy.company.com:8080"
Environment="HTTPS_PROXY=http://proxy.company.com:8080"
Environment="NO_PROXY=localhost,127.0.0.1,harbor.company.com"
EOF
sudo systemctl daemon-reload && sudo systemctl restart docker

问题4:CentOS 8 的包冲突

# 错误:Problem: package docker-ce-3:... requires containerd.io >= 1.6.4
# 原因:CentOS 8 的 containerd 版本太旧

# 解决:指定版本
sudo dnf install -y \
    https://download.docker.com/linux/centos/8/x86_64/stable/Packages/containerd.io-1.7.20-3.1.el8.x86_64.rpm
sudo dnf install -y docker-ce docker-ce-cli

安装后验证清单

# ✅ 1. Docker 版本
docker version
# Client 和 Server 都有输出,没有错误

# ✅ 2. Docker 信息
docker info
# 查看 Storage Driver、Cgroup Driver、Kernel Version

# ✅ 3. 运行容器
docker run --rm hello-world

# ✅ 4. 镜像加速
docker pull nginx:alpine  # 速度应该较快

# ✅ 5. 非 root 使用
docker ps  # 无需 sudo

# ✅ 6. 开机自启
sudo reboot  # 重启后
sudo systemctl status docker  # 应该是 active (running)

小结

Docker 安装的核心步骤是:添加官方(或镜像)源 → 安装 docker-ce → 配置 daemon.json(镜像加速+日志限制)→ 启动服务。

企业环境两个必须做的事:一是配置镜像加速(否则拉取镜像很慢),二是限制日志大小(否则容器日志会撑满磁盘)。离线环境用二进制包安装最简单,不依赖包管理器,各发行版通用。

下一篇将讲解镜像管理:如何 pull、tag、push 镜像,以及理解镜像的分层结构。