如何在Rocky Linux 8上安装和使用Docker

简介

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

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

先决条件

  • A Rocky Linux 8 server with a non-root user with sudo privileges set up using Initial Setup Guide for Rocky Linux 8 explains how to set this up.

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

第一步 – 安装Docker

在官方Rocky Linux 8仓库中提供的Docker安装包可能不是最新版本。要获取最新的版本,请从官方的Docker仓库安装Docker。本节将向您展示如何做到这一点。

但首先,让我们更新软件包数据库。

  1. sudo dnf check-update

 

接下来,添加官方的Docker存储库。

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

 

虽然Docker没有专门针对Rocky Linux的存储库,但Rocky Linux基于CentOS,可以使用相同的存储库。添加存储库后,安装Docker,它由三个软件包组成。

  1. sudo dnf install docker-ce docker-ce-cli containerd.io

 

安装完成后,启动Docker守护进程。

  1. sudo systemctl start docker

 

确认它正在运行。

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

最后,确保它在每次服务器重新启动时启动。

  1. sudo systemctl enable docker

 

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

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

默认情况下,运行docker命令需要root权限,也就是说,你必须在命令前加上sudo。它也可以由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组中。

  1. sudo usermod -aG docker $(whoami)

 

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

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

  1. sudo usermod -aG docker username

 

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

步骤3 – 使用Docker命令

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

  1. docker [option] [command] [arguments]

 

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

  1. docker

 

截至Docker 1.11.1版本,可用的子命令完整列表如下:

Output

attach Attach to a running container build Build an image from a Dockerfile commit Create a new image from a container’s changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes on a container’s filesystem events Get real time events from the server exec Run a command in a running container export Export a container’s filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on a container or image kill Kill a running container load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container network Manage Docker networks pause Pause all processes within a container port List port mappings or a specific mapping for the CONTAINER ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart a container rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop a running container tag Tag an image into a repository top Display the running processes of a container unpause Unpause all processes within a container update Update configuration of one or more containers version Show the Docker version information volume Manage Docker volumes wait Block until a container stops, then print its exit code

要查看可用于特定命令的开关,请输入:

  1. docker docker-subcommand –help

 

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

  1. docker info

 

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

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

要检查您是否可以访问和下载Docker Hub中的图像,请键入:

  1. docker run hello-world

 

输出应包括以下内容,以表明Docker正常工作。

Output

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

您可以使用docker命令的搜索子命令在Docker Hub上搜索可用的图像。例如,要搜索Rocky Linux图像,输入以下命令:

  1. docker search rockylinux

 

脚本将爬取Docker Hub,并返回与搜索字符串匹配的所有镜像的列表。在这种情况下,输出将类似于以下内容:

Output

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] …

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

  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

 

Note

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

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

  1. docker images

 

输出应该是这样的类型:

Output

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

 

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

Output

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

 

完成需要一些时间,完成后的输出将是这样的。

Output

The push refers to a repository [docker.io/sammy/rockylinux-mariadb] 670194edfaf5: Pushed 5f70bf18a086: Mounted from library/rockylinux 6a6c96337be1: Mounted from library/rockylinux …

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

Docker image listing on Docker Hub

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

Output

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 教程。

发表回复 0

Your email address will not be published. Required fields are marked *


广告
将在 10 秒后关闭
bannerAds