1. 项目概述:为什么需要一篇“最新版”Docker安装指南?

如果你在Linux上折腾过Docker,大概率遇到过这样的场景:兴冲冲地打开官方文档,照着步骤一路敲命令,结果在某个环节卡住,报错信息看得一头雾水。或者,你从某个博客教程里复制粘贴了一串命令,安装倒是成功了,但版本号一看,还是两三年前的旧版,一些新功能、性能优化和安全补丁都与你无缘。更别提不同Linux发行版(Ubuntu, CentOS, Debian等)的安装命令和依赖库天差地别,一个教程很难通吃。

这就是我写这篇教程的初衷。它不仅仅是一份命令清单,而是一个基于我多年在开发、运维和生产环境中反复实践、踩坑、优化后总结出的“完整工作流”。所谓“完整”,意味着它覆盖了从系统准备、仓库配置、版本选择、安装验证到后续优化和常见问题排查的全过程。而“最新版”,则代表我们摒弃了那些陈旧的、通过 curl -sSL https://get.docker.com/ | sh 一键脚本(它可能安装非官方仓库的版本),转而采用Docker官方推荐的、通过配置APT或YUM仓库来安装的方式。这种方式不仅能确保你安装的是经过Docker官方测试和签名的、最新的稳定版(Stable)或测试版(Edge),还能让你在未来通过系统的包管理器( apt yum )无缝、安全地升级Docker。

所以,无论你是刚接触容器技术的开发者,还是需要为团队搭建统一开发环境的运维工程师,甚至是自己在家用Linux服务器上折腾点好玩项目的极客,这篇教程都将为你提供一个可靠、可复现、且面向未来的Docker安装方案。请准备好你的Linux终端,我们这就开始。

2. 核心思路与方案选型:为什么不用一键脚本?

在开始动手之前,我们先花点时间厘清思路。安装Docker,网络上最常见的方法是使用官方提供的一键安装脚本。这个命令看起来非常诱人: curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh 。简单、粗暴、似乎能解决所有问题。但作为一名有追求的从业者,我强烈建议你放弃这种方法,原因有三。

第一,缺乏透明度和可控性。 当你把 sudo 权限交给一个从网络下载并直接执行的脚本时,你实际上放弃了对安装过程的控制。这个脚本具体做了什么?它添加了哪些第三方仓库?修改了哪些系统配置?安装了哪些额外的、你可能不需要的包?在出现问题需要回滚或排查时,你会非常被动。而通过手动配置官方仓库的方式,每一步操作都是你自己执行的,清晰可见,易于管理和审计。

第二,版本和来源可能不理想。 一键脚本为了追求最大的兼容性,有时会选择某个Linux发行版默认仓库中的Docker版本,或者某个较旧的、广泛测试的版本。这可能导致你无法第一时间用上Docker的最新特性(比如BuildKit的并行构建、cgroup v2支持、更快的容器启动速度等)和重要的安全更新。我们的目标是“最新稳定版”,这就需要直接对接Docker官方的发行版仓库。

第三,不利于后续维护。 通过系统包管理器(APT/YUM/DNF)安装的软件,其最大优势在于依赖关系管理和无缝升级。配置好官方仓库后,你未来只需要运行 sudo apt update && sudo apt upgrade sudo yum update ,Docker引擎及其相关组件(如Docker Compose)就会随着系统其他软件一起更新到最新版本,安全又省心。而通过脚本或其他方式安装的二进制包,往往需要手动重复安装流程。

因此,本教程选择的方案是: 为你的Linux系统添加Docker官方APT/YUM仓库,然后通过系统的包管理器进行安装 。这是Docker官方文档首推的、最适合生产环境的方法。接下来,我们将根据不同的主流Linux发行版,详细拆解每一步操作。

3. 系统准备与依赖检查

在添加仓库和安装之前,我们需要确保系统处于一个“干净”且“就绪”的状态。这个步骤常常被忽略,但却是避免后续各种诡异错误的关键。

3.1 清理旧版本Docker

如果你的系统上曾经以任何方式安装过Docker(或它的前身 docker.io docker-engine ),第一步就是彻底清除它们。不同版本的Docker文件路径、服务名称可能冲突,残留的配置和镜像数据有时也会引发问题。

对于基于Debian/Ubuntu的系统:

sudo apt-get remove docker docker-engine docker.io containerd runc

注意,这条命令可能不会删除镜像、容器、卷和网络配置文件,它们通常保存在 /var/lib/docker/ 目录下。如果你想得到一个完全干净的环境(比如用于测试或排错),可以手动删除这个目录: sudo rm -rf /var/lib/docker 但在生产环境或存有重要数据的开发机上,请务必谨慎操作,删除前做好备份。

对于基于RHEL/CentOS/Fedora的系统:

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

同样, /var/lib/docker 目录下的数据需要单独处理。

3.2 安装基础依赖工具

为了能够添加HTTPS仓库并使用 apt yum 进行安装,我们需要确保一些基础工具已就位。

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  • ca-certificates : 用于验证HTTPS连接的安全性。
  • curl : 用于从网络下载文件(如GPG密钥)。
  • gnupg : GNU隐私卫士,用于管理GPG密钥,验证仓库签名。
  • lsb-release : 一个工具,可以方便地获取LSB(Linux标准基础)和发行版的具体信息,我们常用它来获取系统代号(如 focal jammy )。

CentOS/RHEL/Fedora: 对于较新的CentOS 8+/RHEL 8+/Fedora,默认使用 dnf 包管理器,它已经包含了所需的基本功能。但为了兼容性和确保工具存在,可以安装:

sudo yum install -y yum-utils

yum-utils 是一个工具集,其中包含 yum-config-manager ,这是我们后面添加仓库所必需的工具。

实操心得 :很多教程会跳过依赖检查,假设你的系统是“纯净”的。但在实际环境中,特别是云服务器或使用了很久的本地机器,很可能缺少某个小工具。先执行这一步,能避免在添加仓库时遇到“命令未找到”这类低级但令人沮丧的错误。

4. 添加Docker官方软件仓库

这是整个安装过程的核心步骤,也是确保我们能获取到官方最新版软件包的关键。Docker为不同的发行版维护了独立的仓库,我们需要添加正确的仓库地址。

4.1 添加Docker的GPG公钥

软件包管理器(APT/YUM)通过GPG密钥来验证从仓库下载的软件包的完整性和真实性,防止被篡改。我们必须先添加Docker官方的GPG密钥。

通用方法(推荐,适用于大多数系统):

sudo mkdir -p /etc/apt/keyrings # 为Ubuntu/Debian创建密钥环目录,-p确保目录不存在时创建
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

对于CentOS/RHEL,密钥的添加方式略有不同,通常 yum 会在添加仓库时自动处理密钥,但为了确保一致,也可以手动添加:

sudo rpm --import https://download.docker.com/linux/centos/gpg

关键参数解析:

  • -fsSL : 这是 curl 命令的一组常用参数。
    • -f : --fail ,静默失败,在服务器错误时无输出。
    • -s : --silent ,静默模式,不显示进度或错误信息。
    • -S : --show-error ,与 -s 配合,在失败时显示错误。
    • -L : --location ,如果请求的页面发生了跳转, curl 会自动跟随跳转。
  • gpg --dearmor : GPG密钥通常以ASCII格式分发,而APT需要二进制格式。 --dearmor (或 -d )命令就是将ASCII格式的密钥转换为二进制格式。

4.2 配置APT仓库(Ubuntu/Debian)

首先,我们需要确定系统的发行版代号。使用 lsb_release -cs 命令,它会输出类似 focal (Ubuntu 20.04)、 jammy (Ubuntu 22.04)或 bullseye (Debian 11)的结果。

然后,使用 echo 命令将仓库配置写入到 /etc/apt/sources.list.d/docker.list 文件中。这个文件专门用于存放第三方软件的APT源。

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

让我们拆解这行命令:

  • deb : 表示这是一个二进制软件包仓库(相对于 deb-src 源代码仓库)。
  • [arch=$(dpkg --print-architecture) signed-by=...] : 这是APT仓库的选项。
    • arch=$(dpkg --print-architecture) : 自动获取当前系统的架构(如 amd64 , arm64 ),确保下载对应架构的软件包。
    • signed-by=/etc/apt/keyrings/docker.gpg : 指定用于验证此仓库软件包的GPG密钥路径。这是Ubuntu/Debian新版本中更安全的指定方式。
  • https://download.docker.com/linux/ubuntu : Docker官方为Ubuntu准备的仓库基地址。
  • $(lsb_release -cs) : 动态获取你的Ubuntu版本代号。
  • stable : 使用稳定版仓库。如果你想尝试最新功能(但可能不稳定),可以替换为 test nightly

注意事项 :如果你使用的是Debian系统,需要将命令中的 ubuntu 替换为 debian 。例如,对于Debian Bullseye:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4.3 配置YUM仓库(CentOS/RHEL/Fedora)

对于基于RPM的系统,我们使用 yum-config-manager 工具来添加仓库。

CentOS/RHEL:

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

这条命令会从Docker官方下载一个 .repo 文件,并将其放置在 /etc/yum.repos.d/ 目录下。你可以用 cat /etc/yum.repos.d/docker-ce.repo 查看其内容,里面已经包含了稳定版(stable)、测试版(test)和夜间构建版(nightly)的仓库配置。

Fedora:

sudo yum-config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo

5. 安装Docker引擎

仓库配置好后,安装就变得非常简单了。首先更新本地软件包索引,然后直接安装 docker-ce (社区版)。

5.1 Ubuntu/Debian 安装步骤

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  • docker-ce : Docker社区版引擎,核心组件。
  • docker-ce-cli : Docker命令行工具,你用来执行 docker run , docker ps 等命令的客户端。
  • containerd.io : 一个行业标准的容器运行时,Docker引擎底层依赖于它来管理容器的生命周期。
  • docker-compose-plugin : 这是Docker Compose的V2版本,它作为一个Docker CLI插件安装,命令是 docker compose (注意没有横线)。这是目前官方推荐的方式,比独立安装 docker-compose 二进制文件更易于管理。

5.2 CentOS/RHEL/Fedora 安装步骤

sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

对于CentOS 8+/RHEL 8+,你可能需要使用 dnf 命令(它是 yum 的下一代版本):

sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin

5.3 安装特定版本(可选)

在某些生产环境中,你可能需要锁定一个特定的Docker版本,而不是始终使用最新版。你可以先列出仓库中所有可用的版本,然后选择安装。

Ubuntu/Debian:

# 列出所有可用版本
apt-cache madison docker-ce | awk '{ print $3 }'

# 安装指定版本,例如 5:24.0.7-1~ubuntu.22.04~jammy
VERSION_STRING=5:24.0.7-1~ubuntu.22.04~jammy
sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-compose-plugin

CentOS/RHEL/Fedora:

# 列出所有可用版本
yum list docker-ce --showduplicates | sort -r

# 安装指定版本,例如 docker-ce-24.0.7
sudo yum install docker-ce-24.0.7 docker-ce-cli-24.0.7 containerd.io docker-compose-plugin

6. 安装后配置与验证

安装完成并不意味着万事大吉。为了让Docker正常工作且更符合使用习惯,我们还需要进行一些基础配置。

6.1 启动Docker服务并设置开机自启

Docker是以系统服务(systemd service)的形式运行的。

# 启动Docker服务
sudo systemctl start docker

# 设置Docker服务开机自动启动
sudo systemctl enable docker

# 查看Docker服务状态,确认其处于 active (running) 状态
sudo systemctl status docker

看到绿色的“active (running)”字样,并且没有红色的错误日志,就说明服务启动成功了。你可以按 q 键退出状态查看。

6.2 验证安装是否成功

运行经典的“Hello World”容器,这是检验Docker安装是否就绪的终极测试。

sudo docker run hello-world

如果安装配置正确,你会看到一段来自Docker的欢迎信息,大意是“Hello from Docker! This message shows that your installation appears to be working correctly.”。这个命令会从Docker Hub拉取一个极小的 hello-world 镜像,并运行一个容器来输出这段信息。

6.3 (强烈推荐)将当前用户加入docker组

默认情况下,执行 docker 命令需要 sudo 权限。每次都要输入密码很麻烦,而且有些图形化工具(如VSCode的Docker扩展)也需要权限。更安全方便的做法是将你的用户加入 docker 用户组。

# 将当前登录用户加入docker组
sudo usermod -aG docker $USER

重要提示 :执行此命令后,组权限不会立即生效。你需要 完全退出当前终端会话,并重新登录 ,或者新开一个终端窗口,新的组成员身份才会被系统识别。之后,你就可以直接运行 docker ps docker run 等命令,而无需在前面加 sudo 了。

安全警告 docker 组本质上拥有 root 权限(因为Docker守护进程以root身份运行)。因此,只将你信任的、需要使用Docker的用户添加到该组。在多用户系统上请谨慎操作。

7. 配置镜像加速与守护进程优化

对于国内用户,直接从Docker Hub拉取镜像速度可能很慢。我们可以配置国内镜像加速器。此外,还可以对Docker守护进程进行一些基础优化。

7.1 配置国内镜像加速器

修改或创建Docker守护进程的配置文件 /etc/docker/daemon.json

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}
EOF

这里我添加了三个常用的国内镜像源:中国科技大学、网易和百度。你可以选择一个延迟最低的使用,或者全部保留,Docker会按顺序尝试。

  • registry-mirrors : 镜像加速器地址列表。
  • log-driver log-opts : 这部分配置了Docker容器的日志驱动为 json-file ,并限制了单个日志文件最大100MB,最多保留3个文件,防止容器日志无限增长占满磁盘。

7.2 应用配置并重启Docker

修改配置后,必须重启Docker服务使配置生效。

sudo systemctl daemon-reload  # 重新加载systemd守护进程配置
sudo systemctl restart docker # 重启Docker服务

7.3 验证加速器是否生效

运行 docker info 命令,在输出结果中查找 Registry Mirrors 部分,如果能看到你刚才配置的镜像地址,说明加速器配置成功。

docker info | grep -A 10 "Registry Mirrors"

8. 安装并验证Docker Compose

虽然我们在安装 docker-ce 时已经包含了 docker-compose-plugin ,但为了确保它正常工作,并且让你熟悉新旧命令的区别,我们还需要验证一下。

8.1 验证Docker Compose插件

新版的 docker-compose-plugin 通过 docker compose 命令(注意是空格,不是横线)来使用。

docker compose version

你应该能看到类似 Docker Compose version v2.20.2 的输出。这证明插件安装成功。

8.2 了解Docker Compose V1与V2

  • V1 ( docker-compose ) : 一个独立的Python二进制文件,需要单独下载安装。
  • V2 ( docker compose ) : 作为Docker CLI的插件,与 docker 命令集成更好,性能更优,是未来的方向。

本教程安装的是V2插件。如果你已有的脚本或文档中写的是 docker-compose (带横线),大部分情况下可以直接替换为 docker compose (空格),兼容性很好。你也可以创建一个软链接来兼容旧命令:

sudo ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin/docker-compose

这样,执行 docker-compose 命令实际上也会调用V2插件。

8.3 使用Docker Compose快速启动一个服务

我们来一个快速测试,创建一个简单的 docker-compose.yml 文件来启动一个Nginx服务。

mkdir ~/nginx-test && cd ~/nginx-test
cat > docker-compose.yml <<EOF
version: '3.8'
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
EOF

# 创建一个简单的首页
mkdir html && echo "<h1>Hello from Docker Compose!</h1>" > html/index.html

# 启动服务(在后台运行)
docker compose up -d

# 查看运行状态
docker compose ps

# 访问服务,你可以用curl或者在浏览器访问 http://你的服务器IP:8080
curl http://localhost:8080

如果看到“Hello from Docker Compose!”,说明Docker Compose工作正常。最后,记得停止并移除这个测试服务:

docker compose down
cd ..
rm -rf ~/nginx-test

9. 常见问题与故障排查实录

即使按照教程一步步操作,你也可能会遇到一些问题。这里我整理了多年来被问得最多、最容易踩坑的几个点及其解决方案。

9.1 添加GPG密钥或仓库时报错“找不到命令”

问题描述 :在执行 curl gpg 命令时,提示 command not found 原因分析 :系统没有安装 curl gnupg 软件包。 解决方案 :回到 3.2 安装基础依赖工具 步骤,根据你的发行版安装所需的工具包。

9.2 在Ubuntu上添加仓库时, lsb_release -cs 返回未知代号

问题描述 :执行 echo ... $(lsb_release -cs) ... 时,系统提示找不到对应的仓库。 原因分析 :你使用的可能是非LTS版本、开发中版本,或者是一个Docker官方尚未提供直接支持的衍生发行版(如Linux Mint)。 解决方案 :手动查找与你Ubuntu版本对应的上游Ubuntu代号。例如,Linux Mint 21 “Vanessa” 基于 Ubuntu 22.04 “Jammy Jellyfish”。那么,在配置仓库时,将 $(lsb_release -cs) 直接替换为 jammy

# 假设你用的是基于Ubuntu 22.04的系统
echo \
  "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  jammy stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

9.3 安装时出现依赖冲突或包损坏错误

问题描述 :运行 sudo apt-get install docker-ce 时,提示类似 unmet dependencies package ... has unmet dependencies E: Sub-process /usr/bin/dpkg returned an error code (1) 的错误。 原因分析 :可能是之前安装的旧版本Docker或某些容器运行时(如 podman containerd 的冲突版本)没有清理干净,或者本地软件包索引损坏。 解决方案 :尝试以下步骤:

  1. 彻底清理旧版本(见3.1节)。
  2. 修复损坏的包并更新索引:
    sudo apt-get update --fix-missing
    sudo apt-get install -f # 尝试修复依赖关系
    sudo dpkg --configure -a # 重新配置未完成的dpkg操作
    
  3. 如果问题依旧,可以尝试清除APT缓存并重试:
    sudo apt-get clean
    sudo apt-get autoclean
    sudo rm -rf /var/lib/apt/lists/*
    sudo apt-get update
    

9.4 Docker服务启动失败,查看状态显示错误

问题描述 sudo systemctl status docker 显示状态为 failed ,并伴有红色错误日志。 原因分析 :原因多样,最常见的是 daemon.json 配置文件格式错误,或者与现有容器运行时冲突。 解决方案

  1. 检查配置文件语法 :使用 sudo docker --config /etc/docker daemon 来测试 daemon.json 的语法,或者直接使用 json 验证工具。一个常见的错误是JSON格式不对,比如多了或少了一个逗号、引号。
  2. 查看详细日志 :运行 sudo journalctl -u docker.service -f 来实时查看Docker服务的详细日志,通常能从中找到具体的错误原因。
  3. 检查端口冲突 :Docker默认使用 /var/run/docker.sock 套接字和可能用到的2375/2376端口。确保没有其他程序占用。
  4. 检查存储驱动 :某些文件系统或内核版本可能与Docker默认的存储驱动 overlay2 不兼容。可以在 daemon.json 中尝试更换为 vfs (性能差,仅用于测试)或查阅文档调整。

9.5 运行 docker run hello-world 提示权限不足

问题描述 :执行 docker run hello-world 时,报错 Got permission denied while trying to connect to the Docker daemon socket 原因分析 :当前用户不在 docker 用户组内,或者执行 usermod 命令后没有 重新登录 解决方案

  1. 确认用户已加入 docker 组: groups $USER ,查看输出中是否包含 docker
  2. 如果已包含,说明你需要 注销并重新登录当前会话 ,或者打开一个新的终端窗口。
  3. 如果未包含,请执行 sudo usermod -aG docker $USER ,然后务必执行第2步(重新登录)。

9.6 镜像拉取速度极慢或超时

问题描述 docker pull docker run 拉取镜像时速度很慢,甚至出现 net/http: TLS handshake timeout 错误。 原因分析 :网络连接Docker Hub不稳定,特别是在国内网络环境下。 解决方案

  1. 确认镜像加速器已配置并生效 :按照 7.1 7.3 节操作。
  2. 临时使用代理 :如果你在具有网络代理的环境下,可以为Docker守护进程配置代理。在 /etc/systemd/system/docker.service.d 目录下创建一个 http-proxy.conf 文件:
    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://your-proxy-ip:port"
    Environment="HTTPS_PROXY=http://your-proxy-ip:port"
    Environment="NO_PROXY=localhost,127.0.0.1,.your-domain.com"
    EOF
    
    然后重启Docker: sudo systemctl daemon-reload && sudo systemctl restart docker
  3. 使用第三方镜像仓库 :对于一些常用镜像(如 ubuntu , nginx , redis ),可以尝试直接从国内镜像站拉取,例如:
    docker pull registry.cn-hangzhou.aliyuncs.com/library/ubuntu:latest
    

10. 生产环境进阶考量与维护建议

如果你是在生产服务器或需要长期稳定运行的环境下安装Docker,除了上述基础步骤,还需要关注以下几点。

10.1 存储驱动与存储目录规划

默认情况下,Docker将所有数据(镜像、容器、卷)存放在 /var/lib/docker 。随着使用,这个目录可能会变得非常庞大。

  • 规划独立分区或大容量磁盘 :建议将 /var/lib/docker 挂载到单独的、容量较大的磁盘分区上,避免占满系统根分区导致服务器宕机。
  • 了解存储驱动 :对于现代Linux内核(4.x以上), overlay2 是默认且推荐的存储驱动,性能较好。你可以在 daemon.json 中通过 "storage-driver": "overlay2" 来显式指定(通常默认已是)。除非有特殊需求,否则不要轻易更改。

10.2 日志与磁盘空间管理

容器会持续产生日志,如果不加管理,可能迅速吞噬磁盘空间。

  • 全局日志配置 :正如我们在 daemon.json 中配置的 log-opts ,限制日志文件的大小和数量是最佳实践。
  • 容器级别日志限制 :在运行容器时,也可以单独指定日志驱动和选项:
    docker run --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 your-image
    
  • 定期清理 :可以设置定时任务(cron job)来定期清理不用的Docker资源:
    # 删除所有已停止的容器
    docker container prune -f
    # 删除所有未被任何容器引用的悬空镜像
    docker image prune -f
    # 删除所有未被使用的卷(谨慎!确保数据已备份)
    docker volume prune -f
    # 删除所有未被使用的网络
    docker network prune -f
    # 一键清理所有悬空资源(镜像、容器、网络、卷,需要确认)
    docker system prune -f
    

10.3 内核参数与安全加固

对于高负载或安全要求高的环境,可能需要调整系统内核参数。

  • 修改系统限制 :在 /etc/sysctl.conf 文件中增加以下配置,然后执行 sudo sysctl -p 生效,可以提升容器性能和稳定性:
    # 增加系统最大文件描述符数量
    fs.file-max = 1000000
    # 允许iptables对桥接流量进行过滤(Docker网络需要)
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.bridge.bridge-nf-call-arptables = 1
    # 调整虚拟内存分配策略,避免OOM Killer过早杀死容器进程
    vm.overcommit_memory = 1
    vm.swappiness = 0
    
  • 安全建议
    • 定期更新Docker引擎和容器镜像: sudo apt-get update && sudo apt-get upgrade (Ubuntu) 或 sudo yum update (RHEL)。
    • 避免在容器内以root身份运行应用进程,在Dockerfile中使用 USER 指令指定非root用户。
    • 考虑使用 --read-only 标志以只读模式运行容器文件系统,增强安全性。
    • 使用Docker Bench for Security等工具进行安全扫描和合规检查。

10.4 备份与恢复策略

/var/lib/docker 目录包含了Docker的全部状态。定期备份此目录是灾难恢复的基础。更细粒度的备份策略包括:

  • 镜像备份 :将重要的自定义镜像推送到私有镜像仓库(如Harbor)或使用 docker save 导出为tar文件。
  • 卷备份 :对于命名卷(named volume)或绑定挂载(bind mount)中的重要数据,建立独立的备份流程。
  • Compose文件备份 :将所有的 docker-compose.yml 文件纳入版本控制系统(如Git)。

安装和配置只是开始,将Docker融入你的开发、测试和部署工作流,并建立起良好的维护习惯,才能真正释放容器技术的威力。从今天起,你可以自信地在你的Linux系统上使用最新、最稳定的Docker了。如果在实践中遇到本教程未覆盖的新问题,善用 docker --help docker logs <container_id> 以及搜索引擎,大部分难题都能找到答案。

更多推荐