本页目录

  • 先决条件
  • 添加 Docker CE 仓库
  • 安装 Docker CE
  • 允许非 root 用户运行 Docker 容器
  • Docker 基本用法:操作镜像、操作容器、容器日志、管理容器、使用数据卷、从宿主机访问容器
  • 结语
  • 操作镜像
  • 操作容器
  • 容器日志
  • 管理容器
  • 使用数据卷
  • 从宿主机访问容器

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

截至目前,Docker 已成为软件开发和 DevOps 的标准。每天有数百万开发者在工作中使用它来构建、共享和运行各类应用程序。它被应用于应用程序开发生命周期的各个阶段,从开发、测试到生产。借助 Docker,应用程序变得更加灵活且可移植。应用程序可以通过简单的方式在不同操作系统的任何地方运行,但应用程序本身(从库到配置文件)保持一致。

在本指南中,你将学习如何在 Alma Linux 9 上安装 Docker CE(Community Edition,社区版)。本指南还涵盖了 Docker 的基本用法:管理镜像、容器和卷,处理容器日志,以及通过 Docker Host 访问容器。

先决条件

本指南需要以下条件:

  • 一台运行 Alma Linux 9 的 Linux 服务器 —— 本示例使用的 Alma Linux 服务器主机名为 'alma-linux',IP 地址为 '192.168.5.'
  • 一个拥有 sudo/root 管理员权限的非 root 用户。

添加 Docker CE 仓库

Docker 是一款用于通过容器开发、交付和运行应用程序的编排工具。它使开发过程更快,因为 Docker 允许你在不依赖宿主机的情况下创建应用程序镜像。这使得向开发者分发应用程序更快、更容易。

Docker 是一个多平台的容器编排工具,可安装在桌面端和服务器端。如果你使用的是桌面端,可以安装 Docker Desktop;但如果你使用的是服务器,则可以通过官方 Docker 仓库安装 Docker Engine。

在第一部分中,你将在你的 Alma Linux 服务器上配置 Docker CE 仓库。

运行以下命令安装 'dnf-utils' 软件包。

sudo dnf install dnf-utils

出现提示时输入 y,然后按 ENTER 继续。

在 AlmaLinux 9 上安装 Docker CE 容器引擎

现在,使用以下 dnf 命令添加 Docker CE 仓库。

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

添加 Docker CE 仓库后,使用以下命令进行验证。这将显示你的 Alma Linux 上可用的仓库列表。

sudo dnf repolist

成功时,你应该收到如下输出:

在 AlmaLinux 9 上安装 Docker CE 容器引擎

继续进行下一部分,安装 Docker CE。

安装 Docker CE

在本节中,你将在 Alma Linux 服务器上安装 Docker CE。完成本节后,你的系统上将运行 Docker。

使用以下 dnf 命令安装 Docker CE。通过这种方式,你将安装 Docker 以及附加软件包:'docker-buildx-plugin' 是用于加速镜像构建的 Docker Build 插件,'docker-compose-plugin' 是用于更便捷地开发应用程序的 Docker Compose 插件。

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

出现提示时,输入 y 确认,然后按 ENTER 继续。

在 AlmaLinux 9 上安装 Docker CE 容器引擎

此外,系统还会要求你确认 Docker 仓库的 GPG 密钥。输入以确认,然后按 ENTER。

在 AlmaLinux 9 上安装 Docker CE 容器引擎

安装完成后,运行以下 systemctl 命令来启动并启用 'docker' 服务。

sudo systemctl start docker
sudo systemctl enable docker

执行命令后,Docker 将处于运行状态并且也会被启用,这意味着 Docker 会在系统启动时自动启动。

运行以下命令验证 Docker 服务状态,确保 Docker 正在运行。

sudo systemctl status docker

当 Docker 正在运行时,你应该会看到类似如下的输出:

在 AlmaLinux 9 上安装 Docker CE 容器引擎

允许非 root 用户运行 Docker 容器

默认情况下,只有 root 用户被允许通过 Docker 运行容器。本节将向你展示如何通过将用户添加到名为 'docker' 的现有组,来允许非 root 用户运行 Docker 容器。

运行以下命令将你的用户添加到 'docker' 组。本示例使用名为 'testuser' 的用户。

sudo usermod -aG docker testuser

现在,使用以下命令以你的用户身份登录。然后执行下面的 'docker run' 命令来运行 'hello-world' 容器。

su - testuser
docker run hello-world

成功时,你应该收到类似如下的输出:

在 AlmaLinux 9 上安装 Docker CE 容器引擎

接下来,运行以下 docker 命令来检查系统上正在运行的容器。

docker ps
docker ps -a

第一条 'docker ps' 命令不会有输出,因为它只显示正在运行的容器,而 'hello-world' 容器在打印完 "Hello from Docker" 消息后会退出/停止。但对于带有 'docker ps -a' 的第二条命令,它会同时给出正在运行和已退出容器的输出。

在 AlmaLinux 9 上安装 Docker CE 容器引擎

Docker 基本用法

你现在已成功进入 Docker 正常运行、并且已允许非 root 用户执行 Docker 容器的阶段。那么,继续进行 Docker 的基本用法。

接下来的步骤将向你展示一些使用 Docker 的场景。你将学习如何管理 Docker 镜像、操作容器和卷,以及学习如何从宿主机访问容器。

一切准备就绪,让我们开始吧。

操作镜像

在第一步中,你将操作 Docker 镜像。你将下载镜像并验证本地机器上可用镜像的列表。

要下载镜像,请访问 DockerHub 并输入你想要下载的 Docker 镜像名称。在本示例中,你将下载标签为 'alpine' 的 'nginx' 镜像。如果点击 TAGS 选项卡,你应该能看到 Nginx 镜像可用版本的列表。

在 AlmaLinux 9 上安装 Docker CE 容器引擎

现在运行下面的 'docker pull' 命令来下载 Docker 镜像。在本示例中,你将下载 'nginx:alpine' 镜像,它指的是 Nginx Alpine 镜像的最新版本。

docker pull nginx:alpine

在 AlmaLinux 9 上安装 Docker CE 容器引擎

下载完成后,运行以下命令列出宿主机上可用的镜像。如果你从头开始按这些步骤操作,那么你应该会看到两个 Docker 镜像:标签为 'latest' 的 'hello-world' 和标签为 'alpine' 的 'nginx'。

docker images

在 AlmaLinux 9 上安装 Docker CE 容器引擎

操作容器

下载好 Docker 镜像后,你现在可以运行容器。本节将向你展示如何通过 Docker 创建并运行容器。

要运行容器,请运行下面的 'docker run' 命令。

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

该命令将创建一个名为 'web' 的新容器,它基于 Docker 镜像 'nginx:alpine'。新的 'web' 容器将在 Docker 主机上暴露端口 '8080',这等同于容器上的端口 80。附加参数 '-it' 用于在交互模式下运行容器,参数 '-d' 将在后台运行容器。

命令执行后,你应该会看到随机的数字和字符串,这就是 'CONTAINER ID'。

现在,运行以下命令来检查正在运行的容器列表。

docker ps

你应该会看到类似这样的输出 —— 容器 'web' 状态为 'Up',并在 Docker 主机上暴露了端口 8080。

在 AlmaLinux 9 上安装 Docker CE 容器引擎

接下来,运行下面的 curl 命令来访问暴露在端口 8080 上的 'web' 容器。成功时,你应该会看到 'web' 容器的默认 index.html 源代码。

curl http://192.168.5.43:8080/

在 AlmaLinux 9 上安装 Docker CE 容器引擎

最后,如果你想从外部网络访问你的容器,必须通过下面的 'firewall-cmd' 命令在你的 Alma Linux 服务器上开放端口 8080。

sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

现在在你本地机器的 Web 浏览器中打开,并访问服务器 IP 地址后加端口 8080(即:http://192.168.5.43:8080/)。你应该会看到 'web' 容器的 index.html 页面输出。

在 AlmaLinux 9 上安装 Docker CE 容器引擎

容器日志

在 Docker 中日志很重要,尤其是当你正在为应用程序开发镜像时。日志可以帮助你调试应用程序开发。

运行以下命令获取 'web' 容器的完整日志。

docker logs web

以下是你将能从 'web' 容器获得的类似输出。

在 AlmaLinux 9 上安装 Docker CE 容器引擎

你还可以通过下面的 'tail' 参数限制日志输出。该命令将显示 'web' 容器日志的最后 5 行。

docker logs --tail 5 web

在 AlmaLinux 9 上安装 Docker CE 容器引擎

管理容器

在本节中,你将学习如何管理容器。你将学习如何启动、停止和删除容器。

要停止 'web' 容器,请运行下面的 'docker stop' 命令。

docker stop web

现在,使用以下命令验证容器。你应该会得到 'web' 容器状态为 'Exited' 的输出。

docker ps
docker ps -a

在 AlmaLinux 9 上安装 Docker CE 容器引擎

要再次启动 'web' 容器,请运行下面的 'docker start' 命令。然后使用 'docker ps' 命令验证正在运行的容器列表。

docker start web
docker ps

你应该会得到 'web' 容器正在运行、状态为 'Up' 的输出。

在 AlmaLinux 9 上安装 Docker CE 容器引擎

最后,运行以下命令删除 'web' 容器。在删除容器之前,你必须先停止容器。

docker stop web
docker rm web

如果你通过 'docker ps' 命令检查容器列表,你应该会看到 'web' 容器已被删除的输出。

docker ps -a

在 AlmaLinux 9 上安装 Docker CE 容器引擎

使用数据卷

Volume(数据卷)是你将本地卷/目录挂载到容器的地方。你可以将数据卷理解为虚拟机中的 'shared-folder'。在本节中,你将创建一个带有自定义数据卷的新容器,该数据卷允许你将本地目录挂载到容器。

首先,创建一个新项目目录 '~/project/data',并将工作目录切换到其中。

mkdir -p ~/project/data; cd ~/project

现在,运行以下命令创建一个新文件 'data/index.html'。该文件将替换新 'web' 容器的默认 index.html 页面。

cat > data/index.html << EOF
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Welcome to Docker Nginx</title>
</head>
<body>
  <h2>Hello from Nginx container</h2>
</body>
</html>
EOF

在 AlmaLinux 9 上安装 Docker CE 容器引擎

现在,运行以下命令,通过 '-v' 参数创建并运行一个带有自定义数据卷的新 'web' 容器。在本示例中,你将本地目录 '~/project/data' 挂载到 'web' 容器,目标目录为 '/usr/share/nginx/html'。附加选项 ':ro' 将使容器上的目录 '/usr/share/nginx/html' 变为只读,而在宿主机上仍然允许读写。

docker run -it -d -p 8080:80 --name web -v ~/project/data:/usr/share/nginx/html:ro nginx:alpine

接下来,运行以下命令确保新的 'web' 容器正在运行。

docker ps

成功时,你应该会看到类似如下的输出 —— 'web' 容器正在运行,并在宿主机上暴露了端口 8080。

在 AlmaLinux 9 上安装 Docker CE 容器引擎

现在,运行下面的 curl 命令来访问 'web' 容器。一切顺利的话,你应该会看到你创建的自定义 index.html 页面的源代码。

curl http://192.168.5.43:8080/

在 AlmaLinux 9 上安装 Docker CE 容器引擎

以下是从 Web 浏览器访问自定义 index.html 页面时的样子(即:http://192.168.5.43:8080/)。

在 AlmaLinux 9 上安装 Docker CE 容器引擎

从宿主机访问容器

要访问并登录容器,你可以使用 'docker exec' 命令,它允许你执行容器上可用的命令。

运行以下命令登录 'web' 容器。这将在 'web' 容器上执行命令 '/bin/sh',参数 '-it' 会直接带你进入容器。

docker exec -it web /bin/sh

登录容器后,运行以下命令检查容器的详细主机名。容器主机名应与 'CONTAINER ID' 相同。

id
hostname

在 AlmaLinux 9 上安装 Docker CE 容器引擎

接下来,运行以下命令检查容器的 IP 地址和默认网关。

ip a
route -n

你应该会看到类似如下的输出:

在 AlmaLinux 9 上安装 Docker CE 容器引擎

由于 'web' 容器正在运行 Nginx 进程,你可以通过下面的 curl 命令使用本地 IP 地址访问你的容器。在本示例中,容器 IP 地址为 '172.17.0.2'。你应该会获得相同的 index.html 页面。

curl 172.17.0.2

在 AlmaLinux 9 上安装 Docker CE 容器引擎

结语

至此你已完成本指南,应该已经知道如何在 Alma Linux 9 上安装 Docker。你还完成了 Docker 基本用法的场景:管理镜像和容器、为调试目的记录容器日志、使用 docker volume(数据卷),以及使用 'docker exec' 登录容器的基本方法。