Rocky Linux 9 Docker安装与使用指南:从入门到精通
引言
Docker 是一款强大的应用程序,它允许您在轻量级的容器中运行应用进程,极大地简化了部署和管理。这些容器与虚拟机类似,但具有更高的可移植性、更低的资源消耗,并且与宿主操作系统紧密集成。如果您希望深入了解 Docker 容器的内部构成,推荐阅读《Docker生态系统:常见组件简介》。
在本教程中,您将学习如何在已有的 Rocky Linux 9 系统上安装和使用 Docker。
先决条件
- 一台已安装 Rocky Linux 9 的服务器,并配置了一个具有 sudo 权限的非 root 用户。关于如何设置,请参考《Rocky Linux 9 初始设置指南》。
本教程中的所有命令都应以非 root 用户身份运行。如果命令需要 root 访问权限,则会在命令前加上 sudo
。关于如何添加用户并赋予 sudo 权限,请查阅《Rocky Linux 9 初始设置指南》。
步骤 1 – 安装 Docker
Rocky Linux 9 官方仓库中提供的 Docker 安装包可能不是最新版本。为了获取最新功能和最佳体验,建议从官方 Docker 仓库安装 Docker。本节将详细指导您完成此过程。
首先,让我们更新软件包数据库:
- sudo dnf check-update
接下来,添加官方 Docker 仓库:
- sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
虽然 Docker 没有专门为 Rocky Linux 设计的软件源,但由于 Rocky Linux 基于 CentOS,因此可以使用相同的软件源。添加软件源后,即可安装 Docker,它由三个核心软件包组成:
- sudo dnf install docker-ce docker-ce-cli containerd.io
安装完成后,启动 Docker 守护进程:
- sudo systemctl start docker
确认 Docker 服务正在运行:
- sudo systemctl status docker
输出应与以下类似,显示服务处于“活动 (运行中)”状态:
Output
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago
Docs: https://docs.docker.com
Main PID: 749 (docker)
最后,确保 Docker 服务在每次服务器重启时自动启动:
- sudo systemctl enable docker
现在,您不仅安装了 Docker 服务(守护进程),还获得了 Docker 命令行工具,即 Docker 客户端。在本教程的后续部分,我们将深入探讨如何使用 Docker 命令行。
步骤 2 — 执行 Docker 命令(可选),无需使用 Sudo
默认情况下,运行 docker
命令需要 root 权限,这意味着您必须在每个命令前加上 sudo
。然而,Docker 在安装时会自动创建一个名为 docker
的用户组,该组中的用户也可以运行 docker
命令。如果您尝试在不加 sudo
前缀或不在 docker
用户组中的情况下运行 docker
命令,您将会收到类似以下的错误信息:
Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See 'docker run --help'.
如果您希望在运行 docker
命令时避免每次都输入 sudo
,可以将您的用户名添加到 docker
用户组中:
- sudo usermod -aG docker $(whoami)
为了使此更改生效,您需要退出当前的 SSH 会话(或终端),并以同一用户重新登录。
如果需要将一个当前未登录的用户添加到 docker
组中,必须明确指定该用户的用户名:
- sudo usermod -aG docker username
本文的其余部分将假设您是作为 docker
用户组的成员来运行 docker
命令。如果您选择不这样做,请务必在命令前加上 sudo
。
第三步 – 使用 Docker 命令
这是文章《如何在Rocky Linux 9上安装和使用Docker》的第2部分(共4部分)。
成功安装并运行Docker后,现在是熟悉其命令行工具的时候了。使用Docker需要通过传递一系列选项、子命令和参数来操作。其语法形式如下:
docker [选项] [命令] [参数]
输入以下命令以查看所有可用的子命令:
docker
截至 Docker 1.11.1 版本,可用的子命令完整列表包括:
attach 连接到正在运行的容器
build 从 Dockerfile 构建镜像
commit 从容器的更改创建新镜像
cp 在容器和本地文件系统之间复制文件/文件夹
create 创建新容器
diff 检查容器文件系统上的更改
events 从服务器获取实时事件
exec 在正在运行的容器中执行命令
export 将容器的文件系统导出为 tar 归档文件
history 显示镜像的历史记录
images 列出镜像
import 从 tarball 导入内容以创建文件系统镜像
info 显示系统范围的信息
inspect 返回容器或镜像的底层信息
kill 杀死正在运行的容器
load 从 tar 归档文件或 STDIN 加载镜像
login 登录到 Docker 注册表
logout 从 Docker 注册表注销
logs 获取容器的日志
network 管理 Docker 网络
pause 暂停容器内的所有进程
port 列出端口映射或容器的特定映射
ps 列出容器
pull 从注册表拉取镜像或仓库
push 将镜像或仓库推送到注册表
rename 重命名容器
restart 重启容器
rm 删除一个或多个容器
rmi 删除一个或多个镜像
run 在新容器中运行命令
save 将一个或多个镜像保存到 tar 归档文件
search 在 Docker Hub 中搜索镜像
start 启动一个或多个已停止的容器
stats 显示容器资源使用情况统计信息的实时流
stop 停止正在运行的容器
tag 标记镜像到仓库
top 显示容器的运行进程
unpause 取消暂停容器内的所有进程
update 更新一个或多个容器的配置
version 显示 Docker 版本信息
volume 管理 Docker 卷
wait 阻塞直到容器停止,然后打印其退出代码
要查看特定命令的可用开关,请输入:
docker docker-子命令 --help
要查看整个系统的信息,请使用:
docker info
第四步 — 使用Docker镜像进行工作
Docker 容器运行在 Docker 镜像中。默认情况下,它从 Docker Hub 拉取这些镜像,Docker Hub 是由 Docker 公司管理的 Docker 注册表。任何人都可以构建和托管自己的 Docker 镜像在 Docker Hub 上,因此大多数应用程序和 Linux 发行版所需的 Docker 容器镜像都托管在 Docker Hub 上。
要检查您是否可以访问并从Docker Hub下载镜像,请键入:
docker run hello-world
输出应包含以下内容,以指示Docker正常工作。
Hello from Docker. This message shows that your installation appears to be working correctly.
...
您可以使用docker
命令的search
子命令搜索在Docker Hub上可用的镜像。例如,要搜索Rocky Linux镜像,请输入:
docker search rockylinux
脚本将爬取Docker Hub并返回与搜索字符串匹配的所有镜像的列表。在这种情况下,输出将类似于这样:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
- centos 官方构建的CentOS镜像。 2224 [OK]
- jdeathe/centos-ssh CentOS-6 6.7 x86_64 / CentOS-7 7.2.1511 x8… 22 [OK]
- jdeathe/centos-ssh-apache-php CentOS-6 6.7 x86_64 / Apache / PHP / PHP M… 17 [OK]
- million12/centos-supervisor 基于CentOS-7,包含supervisord启动器,h… 11 [OK]
- nimmis/java-centos 包含不同版本Java的CentOS 7 Docker镜像… 10 [OK]
- torusware/speedus-centos 始终更新的官方CentOS Docker镜像… 8 [OK]
- nickistre/centos-lamp CentOS上的LAMP环境设置 3 [OK]
- …
在“官方”(OFFICIAL)栏中,“OK”表示该镜像由项目背后的公司构建和支持。一旦您确定了想要使用的镜像,可以使用pull
命令将其下载到您的计算机上,如下所示:
- docker pull rockylinux
下载镜像后,您可以使用已下载的镜像运行一个容器(使用run
子命令)。如果在执行带有run
子命令的docker
命令时尚未下载镜像,Docker客户端将首先下载镜像,然后使用它来运行容器。
- docker run rockylinux
要查看已下载到您电脑上的镜像,请输入:
- docker images
输出结果应该与以下类似:
[secondary_lable Output]
REPOSITORY TAG IMAGE ID CREATED SIZE
rockylinux latest 778a53015523 5 weeks ago 196.7 MB
hello-world latest 94df4f0ce8a4 2 weeks ago 967 B
在本教程后面您会看到,用于运行容器的镜像可以被修改并用于生成新的镜像,而后这些镜像可以被上传到Docker Hub或其他Docker注册表。
步骤5 — 运行Docker容器
在前一步运行的hello-world
容器是一个运行并退出的示例,它在发出一个测试消息后即停止。然而,容器可以比那更加有用,并且它们可以是交互式的。毕竟,它们类似于虚拟机,只是更节约资源。
作为一个例子,让我们使用最新的Rocky Linux镜像来运行一个容器。通过使用-i
和-t
开关的组合,您可以以交互式shell方式访问容器内部。
- docker run -it rockylinux
您的命令提示符应该改变以反映您现在正在容器内工作,并应采取以下形式:
[root@59839a1b7de2 /]#
重要提示:请注意命令行中的容器ID。在上面的示例中,容器ID是59839a1b7de2
。
现在您可以在容器内运行任何命令。例如,让我们在正在运行的容器中安装MariaDB服务器。无需在任何命令前加上sudo
,因为您在具有root权限的容器内操作。
- dnf install mariadb-server
步骤6 — 将容器中的更改提交至Docker镜像
当你启动一个Docker镜像时,你可以像虚拟机一样创建、修改和删除文件。你所做的更改只适用于该容器。你可以启动和停止它,但一旦使用docker rm
命令销毁它,更改将永久丢失。
本节将展示如何将容器的状态保存为一个新的Docker镜像。
在Rocky Linux容器中安装MariaDB服务器后,你现在有一个基于镜像运行的容器,但该容器与你用于创建它的镜像不同。
要将容器状态保存为新的镜像,请先从容器中退出。
- exit
然后使用以下命令将更改提交到新的Docker镜像实例中。-m
开关用于提交的消息,帮助您和其他人了解您所做的更改,而-a
用于指定作者。容器ID是您在教程开始交互式Docker会话时记下的那个。除非您在Docker Hub上创建了其他存储库,否则存储库通常是您的Docker Hub用户名。
- docker commit -m “您对镜像做了什么” -a “作者姓名” 容器ID 仓库名/新镜像名称
例如:
- docker commit -m “添加了mariadb-server” -a “Sunday Ogwu-Chinuwa” 59839a1b7de2 sammy/rockylinux-mariadb
注意:
当你提交一个镜像时,新的镜像会被保存到本地,也就是你的电脑上。稍后在本教程中,你会学习如何将一个镜像推送到 Docker Hub 这样的 Docker 注册表中,以便你和其他人可以访问和使用它。
完成此操作后,列出您计算机上的Docker镜像应该会显示新的镜像,以及它派生自的旧镜像。
docker images
输出示例如下:
输出
REPOSITORY TAG IMAGE ID CREATED SIZE
sammy/rockylinux-mariadb latest 23390430ec73 6 seconds ago 424.6 MB
rockylinux latest 778a53015523 5 weeks ago 196.7 MB
hello-world latest 94df4f0ce8a4 2 weeks ago 967 B
在上面的例子中,rockylinux-mariadb
是一个新的镜像,它是从Docker Hub上现有的Rocky Linux镜像派生而来的。大小的差异反映了所做的更改。在这个例子中,更改是安装了MariaDB服务器。所以下次当您需要使用预先安装了MariaDB服务器的Rocky Linux容器时,您可以直接使用这个新的镜像。镜像也可以从所谓的Dockerfile构建。但这是一个非常复杂的过程,超出了本文的范围。我们将在以后的文章中探讨这个问题。
步骤七 – 列举Docker容器
使用Docker一段时间后,您的计算机上会有许多活跃(正在运行)和非活跃容器。要查看活跃容器,请使用:
docker ps
您会看到类似下面的输出:
输出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7c79cc556dd rockylinux "/bin/bash" 3 hours ago Up 3 hours silly_spence
要查看所有容器(包括活动和非活动的),请传递-a
开关。
docker ps -a
要查看您创建的最新容器,请传递-l
开关。
docker ps -l
停止运行或活动的容器只需输入一个简单的命令。
docker stop <container-id>
通过执行docker ps
命令,可以找到容器ID。
第八步 – 将Docker镜像推送到Docker仓库
从现有镜像创建新镜像后的下一个合乎逻辑的步骤是与您的一些朋友分享它,或者与您可以访问的Docker Hub上的全世界,或其他Docker注册表。要将镜像推送到Docker Hub或任何其他Docker注册表,您必须在那里拥有一个帐户。
本节将向您展示如何将Docker镜像推送到Docker Hub。
要在Docker Hub上创建一个帐户,请在Docker Hub注册。之后,要推送您的镜像,请先登录到Docker Hub。系统会提示您进行身份验证:
docker login -u <docker-registry-username>
如果您输入了正确的密码,认证应该成功。然后您可以使用以下方法推送自己的镜像:
docker push <docker-registry-username>/<docker-image-name>
完成需要一些时间,完成后的结果将是这样的:
输出
The push refers to a repository [docker.io/sammy/rockylinux-mariadb]
670194edfaf5: Pushed
5f70bf18a086: Mounted from library/rockylinux
6a6c96337be1: Mounted from library/rockylinux
...
将镜像推送到注册表之后,它应该在您的账户仪表板上列出,就像下方图像所示。

如果在尝试推送时出现这种错误,那么您很可能没有登录。
输出
The push refers to a repository [docker.io/sammy/rockylinux-mariadb]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required
请先登录,然后重复推送尝试。
结论
本文所述的Docker远不止这些,但这已足够帮助您在Rocky Linux 9上开始使用它。和大多数开源项目一样,Docker基于一个快速发展的代码库构建,因此习惯上要定期访问该项目的博客页面获取最新信息。
请在DO社区中查看其他Docker教程。