本教程适用于以下操作系统版本

  • Debian 12 (Bookworm)
  • Debian 11 (Bullseye)

本页内容

  • 先决条件
  • 安装 Docker Engine
  • 管理 Docker 服务
  • 为非 root 用户配置 Docker
  • 使用 Docker 运行和管理容器 管理 Docker 镜像 管理容器 检查容器日志 管理 Docker 卷
  • 结论
  • 管理 Docker 镜像
  • 管理容器
  • 检查容器日志
  • 管理 Docker 卷

Docker 是一套开放平台,为开发、交付和运行应用程序提供操作系统级别的虚拟化。在 Docker 中,应用程序以称为容器的标准化单元形式作为包交付。每个容器彼此隔离,包括库和配置文件,但彼此之间可以通过定义良好的网络通道进行通信。

如今,Docker 已成为软件开发和 DevOps 的标准。数百万开发者每天在工作中使用它来构建、共享和运行应用程序。它被用于应用程序的开发生命周期,从开发本身,到测试和生成环境。借助 Docker,应用程序变得更加灵活和可移植。应用程序可以轻松地在不同操作系统中的任何地方运行,但应用程序本身从库到配置文件都保持不变。

在本指南中,我将向您展示如何在最新的 Debian 12 上安装 Docker Engine。您还将了解如何通过 systemctl 管理 Docker 服务,并学习 Docker 管理镜像、容器和卷的基本用法。

先决条件

在开始本指南之前,请确保您满足以下要求:

一台 Debian 12 机器——您可以使用 Debian 桌面版或服务器版。一个具有 sudo 管理员权限的非 root 用户。

安装 Docker Engine

要获取最新版本的 Docker Engine,您必须通过官方 Docker 仓库进行安装。您必须先添加 Docker 仓库和 GPG 密钥,然后再安装 Docker Engine。

首先,更新并刷新 Debian 仓库以获取最新的软件包信息。然后,将基础软件包 ca-certificates、curl 和 gnupg 安装到您的 Debian 系统。出现提示时,输入 y 并按 ENTER 确认。

sudo apt update
sudo apt install ca-certificates curl gnupg

在 Debian 12 上安装并使用 Docker

现在运行以下命令来设置 Docker 仓库的 GPG 密钥,该密钥将存储在 /etc/apt/keyrings/ 目录中。

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

之后,执行以下命令为 Debian 系统添加 Docker 仓库。在撰写本文时,Docker 同时提供 Debian 11 和 12 的仓库。

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

在 Debian 12 上安装并使用 Docker

接下来,再次刷新 Debian 仓库,并通过下面的 apt 命令安装 Docker Engine。此命令还将安装 containerd(默认容器引擎)、Docker buildx 插件(具有 BuildKit 能力的默认构建插件)以及作为插件的 Docker compose。

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

出现提示时输入 y 并按 ENTER。

在 Debian 12 上安装并使用 Docker

安装 Docker 后,运行以下命令检查版本。在撰写本文时,Debian 12 上安装的是 Docker v24.0.4。

docker version

在 Debian 12 上安装并使用 Docker

管理 Docker 服务

Docker Engine 需要 containerd,它被用作默认容器引擎。containerd 和 docker 都应该在您的 Docker 主机上运行。现在,您将学习如何通过 systemd 工具 systemctl 管理 Docker 和 containerd 服务。

在 Debian 上,docker 和 containerd 服务会自动启用。执行以下命令来验证 docker 和 containerd 两个服务。

sudo systemctl is-enabled docker
sudo systemctl is-enabled containerd

如果已启用,您将在终端上看到 enabled 的输出。

在 Debian 12 上安装并使用 Docker

现在执行以下命令检查 docker 和 containerd 的服务状态。

sudo systemctl status docker
sudo systemctl status containerd

如果服务正在运行,终端将显示 active (running) 消息。

在 Debian 12 上安装并使用 Docker

接下来,您可以运行以下命令来启动 docker 和 containerd 服务。

sudo systemctl start docker
sudo systemctl start containerd

如果需要停止 Docker,请执行以下命令来停止 Docker 和 containerd 服务。

sudo systemctl stop docker
sudo systemctl stop containerd

最后,如果对 Docker 配置进行了更改,请使用以下命令重启。

sudo systemctl restart docker
sudo systemctl restart containerd

为非 root 用户配置 Docker

默认情况下,只有 root 可以使用 Docker Engine 运行容器。要允许非 root 用户,您必须将用户添加到 docker 组。要将您的用户添加到 docker 组,请完成以下部分,然后运行 hello-world 容器。

执行以下 usermod 命令将您的用户添加到 docker 组,并通过 su 以您的用户身份登录。

sudo usermod -aG docker username
su - username

现在输入以下命令,以您的用户身份运行 hello-world 容器。

docker run hello-world

如果一切顺利,您将看到 Docker 容器输出的 Hello World 消息,如下所示:

在 Debian 12 上安装并使用 Docker

最后,执行以下 docker 命令可以验证容器列表。

docker ps -a

您应该会看到一个状态为 Exited 的容器。hello-world 容器的名称默认是随机的,在本例中,名称为 optmistic_edison。

在 Debian 12 上安装并使用 Docker

使用 Docker 运行和管理容器

至此,Docker Engine 已运行,您可以开始通过 docker 命令行创建容器。在以下部分中,您将学习 Docker 的基本用法,用于:

  • Managing Docker images
  • 创建和管理容器
  • Checking container logs
  • 创建和管理 Docker 卷

管理 Docker 镜像

Docker 镜像是将整个应用程序打包在单个镜像中,并可通过镜像仓库轻松分发。Docker 的默认镜像仓库是 https://hub.docker.com/。在以下部分中,您将学习如何下载 Docker 镜像、查看已下载的镜像以及删除镜像。

要从 Docker Registry 下载 Docker 镜像,请运行以下 docker pull 命令。以下命令将下载带有默认标签 latest 的 nginx 镜像。

docker pull nginx

在 Debian 12 上安装并使用 Docker

要指定镜像版本,请在目标镜像后添加镜像版本,如下所示。

docker pull nginx:alpine

在 Debian 12 上安装并使用 Docker

现在通过以下命令验证您的 Docker 主机上可用的镜像。

docker images

已下载的 Docker 镜像应该可用,并附有镜像标签和大小等详细信息。

在 Debian 12 上安装并使用 Docker

最后,使用 rmi 参数从您的机器上移除 Docker 镜像。

docker rmi imagename

管理容器

容器是您的应用程序运行的地方,它基于您的 Docker 镜像。容器可以挂载特定目录或卷来存储持久化数据,并在 Docker 主机中暴露特定端口供应用程序使用。

在本节中,您将学习如何通过 docker 命令行创建和运行容器、检查容器以及启动和停止容器。

要运行容器,请在 docker 命令中使用 run 参数,如下所示。

docker run -it -d -p 8080:80 --name web nginx:alpine

以下命令将使用 nginx:alpine 镜像运行名为 web 的容器。同时,web 容器将暴露容器内部的端口 80 和 Docker 主机机器上的端口 8080。此外,-it 参数将使您脱离容器,而 -d 参数将在后台运行 web 容器。

在 Debian 12 上安装并使用 Docker

现在运行以下 docker ps 命令来验证您的 Docker 机器上的容器列表。

docker ps
docker ps -a

如果一切顺利,您应该会看到 web 容器正在运行,并在主机上暴露端口 8080。

在 Debian 12 上安装并使用 Docker

虽然 docker run 命令会创建并启动容器,您也可以通过 docker 命令启动和停止容器。

运行以下 docker stop 命令来停止 web 容器。

docker container stop web
docker ps -a

在 Debian 12 上安装并使用 Docker

要再次启动 web 容器,请使用以下 docker start 命令。

docker container start web
docker ps

在 Debian 12 上安装并使用 Docker

最后,运行以下 docker rm 命令删除容器。-f 参数用于强制删除容器,即使目标容器正在运行。

docker container rm optimistic_edison
docker container rm optimistic_edison -f

在 Debian 12 上安装并使用 Docker

检查容器日志

在 Docker 中检查日志非常重要,因为您始终需要它来调试容器化的应用程序。现在,您将学习如何在 Docker 中检查容器日志。

要检查容器的日志,请在 docker 命令中使用 logs 参数,如下所示。这将显示自容器创建以来的日志。

docker logs web

在 Debian 12 上安装并使用 Docker

现在您还可以添加 --tail N 选项,仅获取最新的日志,如下所示。在本例中,选项 --tail 15 将仅显示最后 15 行日志。

docker logs --tail 15 web

在 Debian 12 上安装并使用 Docker

管理 Docker 卷

Docker 卷是您的应用程序可以使用持久化存储的地方。您可以更改容器,但仍为应用程序使用相同的卷或数据。以下部分将向您展示 Docker 卷的基本用法,从创建卷到在容器内检查和使用卷。

要创建新卷,请运行以下 docker volume 命令。在本演示中,您将创建一个名为 myvol 的新 Docker 卷。

docker volume create myvol

使用 ls 选项验证您的 Docker 主机上可用的卷,如下所示。您应该会看到 myvol 卷已创建。

docker volume ls

在 Debian 12 上安装并使用 Docker

默认情况下,Docker 将使用 local 驱动创建卷,该驱动使用本地目录作为数据存储。默认的数据存储目录位于 /var/lib/docker/volume 目录。运行 inspect 选项,如下所示,以检查 myvol 卷的详细信息。

docker volume inspect myvol

您应该会看到 myvol 卷使用默认的 local 驱动,数据存储位于 /var/lib/docker/volumes/myvol/_data 目录。Mountpoint 部分即本地数据存储目录。

在 Debian 12 上安装并使用 Docker

接下来,您可以通过 -v 选项在容器上使用 Docker 卷,该选项将所有选项合并在一个字段中;也可以使用 --mount 选项,它的语法更明确、更详细且分离。

运行以下 docker run 命令,通过 --mount 选项创建一个使用 myvol 卷的新容器 web2。然后,通过 docker inspect 命令检查 web 容器。

docker run -d \
  -p 8081:80 \
  --name web2 \
  --mount source=myvol,target=/app \
  nginx:alpine
docker inspect web

在 Mounts 部分中,您应该会看到 web 容器将 myvol 卷挂载到容器内部的 /app 目标目录。

在 Debian 12 上安装并使用 Docker

要使用 -v 选项,docker run 命令应如下所示。-v 选项使用单个字段将 myvol2 卷挂载到目标目录 /app。

docker run -d \
  -p 8082:80 \
  --name web3 \
  -v myvol2:/app \
  nginx:alpine

最后,运行以下带有 rm 参数的 docker volume 命令来移除 Docker 卷

docker rm web2 -f
docker volume rm myvol

结论

干得漂亮!您已完成在 Debian 12 服务器上安装 Docker Engine。您还学习了如何通过 systemctl 命令工具管理 Docker 服务,以及如何通过 docker 客户端管理 Docker 镜像、容器和 Docker 卷。

如需进一步探索,您可以开始通过 Dockerfile 为您的应用程序构建 Docker 镜像。