Debian 安装 Docker:最全指南 – wiki大全

Debian 安装 Docker:最全指南

简介

Docker 是一个开源平台,它允许开发者将应用程序及其所有依赖项打包到一个名为容器的独立单元中。这些容器可以在任何环境中运行,提供了一致性和可移植性。在 Debian 系统上安装 Docker,可以极大地简化应用程序的部署、测试和扩展。

本指南将为您提供在 Debian 系统上安装 Docker Engine 的最全面步骤,包括准备工作、通过官方仓库安装、以及安装后的配置和验证。

先决条件

在开始安装之前,请确保您的 Debian 系统满足以下要求:

  1. 操作系统版本: Docker Engine 在以下 Debian 版本上受支持:
    • Debian Bookworm 12 (稳定版)
    • Debian Bullseye 11 (旧稳定版)
    • Debian Buster 10 (旧旧稳定版)
  2. 64 位架构: Docker 仅支持 64 位版本的 Debian。
  3. 内核版本: 您的 Debian 内核版本必须为 3.10 或更高版本。通常,Debian 10 及更高版本都满足此要求。
    您可以通过运行以下命令来检查内核版本:
    bash
    uname -r
  4. 网络连接: 确保您的服务器具有稳定的互联网连接,以便下载 Docker 软件包。
  5. sudo 权限: 您需要一个具有 sudo 权限的用户来执行安装命令。

步骤 1:更新系统软件包

在安装任何新软件之前,始终建议更新系统现有的软件包列表和已安装的软件包。这有助于避免潜在的依赖问题。

bash
sudo apt update
sudo apt upgrade -y

步骤 2:安装必要的依赖包

Docker 依赖于一些软件包才能正常工作。安装这些软件包有助于 apt 通过 HTTPS 使用存储库。

bash
sudo apt install ca-certificates curl gnupg lsb-release -y

  • ca-certificates: 允许基于 SSL/TLS 的应用程序检查 SSL 证书的真实性。
  • curl: 一个用于传输数据的命令行工具,用于下载 Docker 的 GPG 密钥。
  • gnupg: GnuPG 工具,用于验证软件包的签名。
  • lsb-release: 某些工具需要此包来确定您的 Linux 发行版信息。

步骤 3:添加 Docker 官方 GPG 密钥

为了确保您下载的 Docker 软件包是正版且未被篡改,您需要导入 Docker 官方 GPG 密钥。

bash
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

这个命令会:
1. 创建 /etc/apt/keyrings 目录,用于存储 GPG 密钥。
2. 使用 curl 下载 Docker 官方 GPG 密钥。
3. 使用 gpg --dearmor 将密钥转换为 apt 可接受的格式。
4. 将转换后的密钥保存到 /etc/apt/keyrings/docker.gpg

步骤 4:添加 Docker 官方 APT 仓库

现在,您需要将 Docker 的 APT 仓库添加到您的系统 sources.list 中。这将允许 apt 从 Docker 官方源获取软件包。

bash
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

这个命令会:
1. $(dpkg --print-architecture): 自动检测您的系统架构(例如 amd64)。
2. signed-by=/etc/apt/keyrings/docker.gpg: 指定用于验证此仓库软件包的 GPG 密钥。
3. https://download.docker.com/linux/debian: Docker 官方 Debian 仓库的 URL。
4. $(lsb_release -cs): 自动检测您的 Debian 发行版代号(例如 bullseyebookworm)。
5. stable: 指定使用 Docker 的稳定版本仓库。
6. sudo tee /etc/apt/sources.list.d/docker.list: 将生成的仓库信息写入 /etc/apt/sources.list.d/docker.list 文件。

添加完仓库后,再次更新 apt 软件包列表,以便它能识别新的 Docker 仓库:

bash
sudo apt update

步骤 5:安装 Docker Engine

现在,您可以安装 Docker Engine、Containerd 和 Docker Compose。

bash
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

  • docker-ce: Docker Engine 社区版。
  • docker-ce-cli: Docker 命令行客户端。
  • containerd.io: 一个容器运行时,Docker Engine 使用它来管理容器的生命周期。
  • docker-buildx-plugin: Docker Buildx 插件,用于改进构建功能。
  • docker-compose-plugin: Docker Compose 插件,用于定义和运行多容器 Docker 应用程序。

可选:使用便利脚本安装(不推荐用于生产环境)

Docker 提供了一个便利脚本,可以快速安装 Docker。这适用于开发或测试环境,但由于它不提供版本控制且可能在生产环境中带来不确定性,因此 不推荐 在生产环境中使用。

bash
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

步骤 6:验证 Docker 安装

安装完成后,您可以运行一个简单的 hello-world 容器来验证 Docker 是否已正确安装并正在运行。

bash
sudo docker run hello-world

如果一切正常,您将看到类似以下的输出:

“`
Unable to find image ‘hello-world:latest’ locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:7f085732be3909772c355a30a1334c244b5f9227a1345ca5970c3160a0fce6e4
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the “hello-world” image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output back to the Docker client, which
sent it to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
“`

步骤 7:管理 Docker 为非 Root 用户(推荐)

默认情况下,docker 命令需要 sudo 权限才能运行。这可能不太方便,并且存在潜在的安全风险。为了允许非 root 用户执行 Docker 命令,您可以将您的用户添加到 docker 用户组中。

bash
sudo usermod -aG docker $USER

  • usermod: 修改用户账户。
  • -aG: 将用户添加到指定的组,而不将其从现有组中移除。
  • docker: 要添加到的组名。
  • $USER: 环境变量,代表当前登录的用户。

添加完成后,您需要注销并重新登录,或者重新启动终端会话,使更改生效。

“`bash

注销并重新登录,或者

newgrp docker # 在当前会话中临时应用组更改
“`

现在,您可以尝试再次运行 hello-world 容器,但无需 sudo

bash
docker run hello-world

如果成功,您会看到相同的 Hello from Docker! 消息。

步骤 8:配置 Docker 开机自启动

Docker 在安装后通常会配置为在系统启动时自动启动。您可以使用以下命令检查其状态并启用/禁用自启动:

检查 Docker 服务状态:

bash
sudo systemctl status docker

如果 Docker 未设置为开机自启动,可以使用以下命令启用:

bash
sudo systemctl enable docker

步骤 9:卸载 Docker Engine(如果需要)

如果您需要卸载 Docker,可以按照以下步骤操作。

  1. 卸载 Docker 软件包:

    bash
    sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

  2. 删除所有 Docker 相关的配置和数据:
    这包括镜像、容器、卷和网络。请注意,这将删除所有 Docker 数据,无法恢复。

    bash
    sudo rm -rf /var/lib/docker
    sudo rm -rf /var/lib/containerd

  3. 删除 Docker 仓库配置和 GPG 密钥:

    bash
    sudo rm /etc/apt/sources.list.d/docker.list
    sudo rm /etc/apt/keyrings/docker.gpg

  4. 清理不再需要的依赖包:

    bash
    sudo apt autoremove -y

常见问题与故障排除

  • docker: command not found:

    • 确保 Docker 已正确安装。
    • 如果您将用户添加到 docker 组,请确保您已注销并重新登录,或使用 newgrp docker
    • 检查 $PATH 环境变量是否包含 /usr/bin
  • Cannot connect to the Docker daemon. Is the docker daemon running on this host?:

    • 检查 Docker 服务是否正在运行:sudo systemctl status docker
    • 如果未运行,请启动它:sudo systemctl start docker
    • 如果已运行但仍然无法连接,检查 Docker 套接字的权限:/var/run/docker.sock
  • Error response from daemon: driver failed programming external connectivity on endpoint...:

    • 这通常与网络配置有关。检查防火墙设置 (ufwfirewalld) 是否阻止了 Docker 容器的网络访问。
    • 尝试重启 Docker 服务:sudo systemctl restart docker

结论

通过遵循本指南中的详细步骤,您应该已经在 Debian 系统上成功安装了 Docker Engine,并对其进行了基本的配置。现在,您可以开始利用 Docker 的强大功能来部署和管理您的应用程序了。祝您使用愉快!

滚动至顶部