Rocky Linux 8 Docker安装与使用教程:从入门到精通

简介

Docker是一个应用程序,它可以在一个容器中轻松运行应用程序进程。这些容器类似于虚拟机,但更便携、资源占用更少,并且更依赖于主机操作系统。要详细了解Docker容器的不同组件,请参阅《Docker生态系统:常见组件简介》。

在本教程中,您将学习如何在已有的Rocky Linux 8安装上安装并使用Docker。

先决条件

  • 一台已安装Rocky Linux 8的服务器,并配置了具有sudo权限的非root用户。您可以参考《Rocky Linux 8 初始设置指南》了解如何进行设置。

本教程中的所有命令都应以非root用户身份运行。如果某个命令需要root权限,将在命令前加上sudo。《Rocky Linux 8 初始设置指南》详细解释了如何添加用户并赋予他们sudo权限。

第一步 – 安装Docker

官方Rocky Linux 8仓库中提供的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

确认它正在运行:

sudo systemctl status docker

输出应该类似于以下内容,显示该服务正在运行且处于活动状态:

输出
● 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)

最后,确保它在每次服务器重新启动时都能自动启动:

sudo systemctl enable docker

现在,安装Docker不仅会提供Docker服务(守护进程),还会提供Docker命令行实用工具,也就是Docker客户端。在本教程后面我们会详细介绍如何使用docker命令。

第二步 — 在不使用sudo的情况下执行Docker命令(可选)

默认情况下,运行docker命令需要root权限,也就是说,您必须在命令前加上sudo。它也可以由docker组中的用户运行,这个组是在安装Docker时自动生成的。如果您尝试在没有加sudo前缀或不在docker组中的情况下运行docker命令,您将得到如下输出:

输出
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)

您需要注销服务器,并以相同的用户重新登录,以便启用此更改。

如果您需要将一个用户添加到docker组中,而您没有以该用户登录,请明确地声明该用户名,使用以下命令:

sudo usermod -aG docker username

本文的其余部分假定您作为docker用户组中的用户运行docker命令。如果您选择不这样做,请在命令前加上sudo

第三步 – 使用Docker命令

在安装并运行Docker后,现在是熟悉命令行工具的时候了。使用Docker包括传递给它一系列的选项和子命令,然后是参数。语法形式如下:

docker [option] [command] [arguments]

查看所有可用子命令,请输入:

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-subcommand --help

要查看系统范围的信息,请使用以下方法:

docker info

第四步 – 使用Docker镜像进行工作

Docker容器是通过Docker镜像运行的。默认情况下,它从Docker Hub拉取这些镜像,Docker Hub是Docker项目管理的Docker注册表。任何人都可以在Docker Hub上构建和托管他们的Docker镜像,所以大多数应用程序和Linux发行版都需要在Docker Hub上托管其镜像以运行Docker容器。

要检查您是否可以访问和下载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 The official build of 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 Base CentOS-7 with supervisord launcher, h… 11 [OK] nimmis/java-centos This is docker images of CentOS 7 with dif… 10 [OK] torusware/speedus-centos Always updated official CentOS docker imag… 8 [OK] nickistre/centos-lamp LAMP on centos setup 3 [OK] …

在“官方”(OFFICIAL)栏中,“OK”表示该镜像由项目背后的公司构建和支持。一旦您确定了要使用的镜像,您可以使用 `pull` 子命令将其下载到您的计算机上,如下所示:

  1. docker pull rockylinux

 

下载镜像后,您可以使用 `run` 子命令运行已下载的镜像。如果在使用 `run` 子命令执行 Docker 时没有下载镜像,则 Docker 客户端将首先下载镜像,然后使用它运行一个容器。

  1. docker run rockylinux

 

要查看已下载到您计算机上的镜像,请键入:

  1. 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 访问。

  1. docker run -it rockylinux

 

您的命令提示符应该改变以反映您现在在容器内工作,并应采用以下形式:

Output

[root@59839a1b7de2 /]#

重要提示:请在命令提示符中注意容器 ID。在上面的示例中,容器 ID 是 `59839a1b7de2`。

现在您可以在容器内运行任何命令。例如,让我们在正在运行的容器中安装 MariaDB 服务器。无需使用 `sudo` 前缀任何命令,因为您是以具有 root 权限的容器内操作。

  1. dnf install mariadb-server

 

步骤6 — 将容器中的更改提交为 Docker 镜像

当你启动一个 Docker 镜像时,你可以像虚拟机一样创建、修改和删除文件。你所做的更改只适用于该容器。你可以启动和停止它,但一旦你使用 `docker rm` 命令将其销毁,这些更改将永久丢失。

本节介绍了如何将容器的状态保存为一个新的 Docker 镜像。

在 Rocky Linux 容器内安装 MariaDB 服务器后,您现在有一个基于镜像运行的容器,但该容器与您用于创建它的镜像不同。

为了把容器的状态保存为一张新的镜像,请先退出容器。

  1. exit

 

然后使用以下命令将更改提交到一个新的 Docker 镜像实例。`-m` 开关用于提交消息,以帮助您和其他人了解您所做的更改,而 `-a` 用于指定作者。容器的 ID 是您在教程开始交互式 Docker 会话时注意到的那个。除非您在 Docker Hub 上创建了其他仓库,否则仓库通常是您的 Docker Hub 用户名。

  1. docker commit -m “What did you do to the image” -a “Author Name” container-id repository/new_image_name

 

举个例子:

  1. docker commit -m “added mariadb-server” -a “Sunday Ogwu-Chinuwa” 59839a1b7de2 sammy/rockylinux-mariadb

 

注意:当你提交一个镜像时,新镜像会保存在本地,也就是你的电脑上。后面在本教程中,你将学习如何将镜像推送到 Docker Hub 等 Docker 注册表中,以便你和其他人可以访问和使用。

完成此操作后,在您的电脑上列出 Docker 镜像,您将看到新的镜像以及它衍生的旧镜像。

  1. 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 的文件构建出来。但那是一个非常复杂的过程,超出了本文的范围。我们将在以后的文章中探讨这一点。

步骤 7 — 列出 Docker 容器

使用 Docker 一段时间后,您的计算机上会有许多活跃(正在运行)和非活跃容器。要查看活跃容器,请使用:

  1. docker ps

 

您会看到类似以下的输出结果。

输出

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7c79cc556dd rockylinux “/bin/bash” 3 hours ago Up 3 hours silly_spence

要查看所有容器(包括活动和非活动容器),请传递 -a 开关。

  1. docker ps -a

 

要查看您最新创建的容器,请使用 -l 开关。

  1. docker ps -l

 

停止运行或活动容器就像输入以下命令一样简单。

  1. docker stop container-id

 

容器 ID 可以在 docker ps 命令的输出中找到。

步骤 8 — 将 Docker 镜像推送到 Docker 仓库

从现有镜像创建新镜像之后的下一步是与您的朋友、Docker Hub 上的全世界,或其他您可以访问的 Docker 注册表分享它。要将镜像推送到 Docker Hub 或任何 Docker 注册表,您必须在那里拥有一个账户。

本部分向您展示如何将 Docker 镜像推送到 Docker Hub。

要在 Docker Hub 上创建一个账户,请在 Docker Hub 上注册。之后,要推送您的镜像,首先登录 Docker Hub。您将被提示进行身份验证。

  1. docker login -u docker-registry-username

 

如果您输入了正确的密码,验证应该成功。然后,您可以使用以下方式推送您自己的镜像:

  1. 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

将镜像推送到仓库后,它应该在您的账户仪表盘上列出,如下图所示。

Docker Hub 上的 Docker 镜像列表

如果推送尝试以此错误结果结束,那么很可能是您未登录。

输出

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 8 上开始使用它了。和大多数开源项目一样,Docker 是基于一个快速发展的代码库构建的,所以应该养成定期访问项目博客页面以获取最新信息的习惯。

还要看看 DO 社区中的其他 Docker 教程。

bannerAds