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

介绍

Docker 是一个应用程序,使在容器中运行应用程序过程变得简单和容易,它们就像虚拟机一样,只是更便携式,更易于资源使用,更依赖主机操作系统。

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

前提条件

本教程中的所有命令都应该作为非 root 用户运行. 如果命令需要 root 访问,它将被sudo所先行。

步骤 1 - 安装 Docker

在官方 Rocky Linux 8 存储库中可用的 Docker 安装包可能不是最新版本. 要获得最新的和最棒的版本,请从官方 Docker 存储库中安装 Docker。

但首先,让我们更新包数据库:

1sudo dnf check-update

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

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

虽然没有来自Docker的Rocky Linux特定的存储库,但Rocky Linux是基于CentOS的,可以使用相同的存储库。

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

安装完成后,启动Docker DAEMON:

1sudo systemctl start docker

检查它是否在运行:

1sudo systemctl status docker

输出应类似于以下,表明服务是活跃和运行的:

1[secondary_label Output]
2 docker.service - Docker Application Container Engine
3   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
4   Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago
5     Docs: https://docs.docker.com
6 Main PID: 749 (docker)

最后,确保它在每个服务器重新启动时开始:

1sudo systemctl enable docker

现在安装Docker不仅为您提供Docker服务(daemon),还为您提供Docker命令行实用程序或Docker客户端,我们将在本教程中进一步探索如何使用Docker命令。

步骤 2 — 执行Docker命令而无需Sudo(可选)

默认情况下,运行docker命令需要 root 权限 - 也就是说,您必须先用sudo命令执行命令。 它也可以由 docker 组中的用户运行,该命令在安装 Docker 时自动创建。

1[secondary_label Output]
2docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
3See 'docker run --help'.

如果您想避免在运行docker命令时键入sudo,请将您的用户名添加到 docker 组中:

1sudo usermod -aG docker $(whoami)

您需要退出 Droplet 并作为相同的用户重新登录以启用此更改。

如果您需要将用户添加到未登录的docker组中,请明示该用户名使用:

1sudo usermod -aG docker username

本文的其余部分假定您正在作为 docker 用户组中的用户运行docker命令. 如果您选择不,请将命令预先设置为sudo

步骤 3 – 使用 Docker 命令

随着Docker安装和工作,现在是时候熟悉命令行实用程序了。使用docker是通过一个选项和子命令链,然后是参数。

1docker [option] [command] [arguments]

要查看所有可用的子命令,键入:

1docker

从 Docker 1.11.1 开始,可用的子命令的完整列表包括:

 1[secondary_label Output]
 2
 3    attach Attach to a running container
 4    build Build an image from a Dockerfile
 5    commit Create a new image from a container's changes
 6    cp Copy files/folders between a container and the local filesystem
 7    create Create a new container
 8    diff Inspect changes on a container's filesystem
 9    events Get real time events from the server
10    exec Run a command in a running container
11    export Export a container's filesystem as a tar archive
12    history Show the history of an image
13    images List images
14    import Import the contents from a tarball to create a filesystem image
15    info Display system-wide information
16    inspect Return low-level information on a container or image
17    kill Kill a running container
18    load Load an image from a tar archive or STDIN
19    login Log in to a Docker registry
20    logout Log out from a Docker registry
21    logs Fetch the logs of a container
22    network Manage Docker networks
23    pause Pause all processes within a container
24    port List port mappings or a specific mapping for the CONTAINER
25    ps List containers
26    pull Pull an image or a repository from a registry
27    push Push an image or a repository to a registry
28    rename Rename a container
29    restart Restart a container
30    rm Remove one or more containers
31    rmi Remove one or more images
32    run Run a command in a new container
33    save Save one or more images to a tar archive
34    search Search the Docker Hub for images
35    start Start one or more stopped containers
36    stats Display a live stream of container(s) resource usage statistics
37    stop Stop a running container
38    tag Tag an image into a repository
39    top Display the running processes of a container
40    unpause Unpause all processes within a container
41    update Update configuration of one or more containers
42    version Show the Docker version information
43    volume Manage Docker volumes
44    wait Block until a container stops, then print its exit code

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

1docker docker-subcommand --help

要查看整个系统的信息,使用:

1docker info

步骤 4 – 使用 Docker 图像

默认情况下,它将这些图像从Docker Hub中提取,这是由Docker管理的Docker注册表,这是Docker项目背后的公司。任何人都可以在Docker Hub上构建和托管他们的Docker图像,所以大多数应用程序和Linux发行版你需要运行Docker容器的图像都在Docker Hub上托管。

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

1docker run hello-world

输出,该输出应包括以下内容,应表明 Docker 正在正确工作:

1[secondary_label Output]
2Hello from Docker.
3This message shows that your installation appears to be working correctly.
4...

您可以使用docker命令与search子命令搜索在Docker Hub上可用的图像,例如,要搜索Rocky Linux图像,请键入:

1docker search rockylinux

该脚本会扫描 Docker Hub 并返回所有与搜索字符串相匹配的图像的列表。

 1[secondary_label Output]
 2NAME DESCRIPTION STARS OFFICIAL AUTOMATED
 3centos The official build of CentOS. 2224      [OK]       
 4jdeathe/centos-ssh CentOS-6 6.7 x86_64 / CentOS-7 7.2.1511 x8... 22                   [OK]
 5jdeathe/centos-ssh-apache-php CentOS-6 6.7 x86_64 / Apache / PHP / PHP M... 17                   [OK]
 6million12/centos-supervisor Base CentOS-7 with supervisord launcher, h... 11                   [OK]
 7nimmis/java-centos This is docker images of CentOS 7 with dif... 10                   [OK]
 8torusware/speedus-centos Always updated official CentOS docker imag... 8                    [OK]
 9nickistre/centos-lamp LAMP on centos setup 3                    [OK]
10
11...

OFFICIAL 列中, ** OK** 表示由该项目背后的公司构建和支持的图像. 一旦您确定了您想要使用的图像,您可以使用子命令将其下载到您的计算机,如下:

1docker pull rockylinux

在下载图像后,您可以使用下载图像使用运行子命令运行一个容器.如果在使用运行子命令执行docker时没有下载图像,则 Docker 客户端首先将下载图像,然后使用它运行一个容器:

1docker run rockylinux

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

1docker images

输出应该与以下相似:

1[secondary_lable Output]
2REPOSITORY TAG IMAGE ID CREATED SIZE
3rockylinux latest 778a53015523 5 weeks ago 196.7 MB
4hello-world latest 94df4f0ce8a4 2 weeks ago 967 B

正如您将在本教程中稍后看到的那样,您用于运行容器的图像可以被修改并用于生成新图像,然后可以上传(_pushed_是技术术语)到Docker Hub或其他Docker注册表。

步骤 5 – 运行 Docker 容器

您在上一步中运行的你好世界容器是运行和出发的容器的一个例子,发出测试消息后。 但是,容器可以比这更有用,它们可以互动。

举个例子,让我们使用Rocky Linux的最新图像运行一个容器. -i 和 ** -t** 交换机的组合为您提供交互式容器访问:

1docker run -it rockylinux

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

1[secondary_label Output]
2[root@59839a1b7de2 /]#

** 重要: ** 请在命令提示中记住容器ID. 在上面的示例中,它是 59839a1b7de2

现在你可以在容器内运行任何命令,例如,让我们在运行容器中安装MariaDB服务器. 无需以sudo预先定义任何命令,因为你正在使用根特权在容器内运行:

1dnf install mariadb-server

步骤 6 — 对 Docker 图像的容器进行更改

当您启动 Docker 图像时,您可以创建、修改和删除文件,就像您可以使用虚拟机一样。您所做的更改只适用于该容器。

本节向您展示如何将容器的状态保存为新 Docker 图像。

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

若要将容器的状态保存为新图像,请先离开它:

1exit

然后使用以下命令对新 Docker 图像实例进行更改。 -m 交换器用于请求信息,帮助您和其他人知道您所做的更改,而 ** -a** 用于指定作者。

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

例如:

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

<$>[注] 注: 当你 commit 一个图像时,新图像被保存在本地,即在您的计算机上。

完成此操作后,现在在您的计算机上列出 Docker 图像应该显示新图像,以及原始图像:

1docker images

输出应该是这样的:

1[secondary_label Output]
2REPOSITORY TAG IMAGE ID CREATED SIZE
3sammy/rockylinux-mariadb latest 23390430ec73 6 seconds ago 424.6 MB
4rockylinux latest 778a53015523 5 weeks ago 196.7 MB
5hello-world latest 94df4f0ce8a4 2 weeks ago 967 B

在上面的例子中, rockylinux-mariadb 是新的图像,它是从Docker Hub现有的Rocky Linux图像中提取的。大小差异反映了所做的更改。在这个例子中,变化是MariaDB服务器安装了,所以下次你需要使用Rocky Linux和MariaDB服务器预装运行容器时,你可以使用新的图像。图像也可能来自所谓的Dockerfile。

步骤 7 – 列出 Docker 容器

在使用 Docker 一段时间后,您的计算机上将有许多活跃(运行)和不活跃的容器。

1docker ps

您将看到类似于以下的输出:

1[secondary_label Output]
2CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f7c79cc556dd rockylinux              "/bin/bash"         3 hours ago Up 3 hours silly_spence

要查看所有容器 - 活跃和不活跃,请通过-a开关:

1docker ps -a

要查看您创建的最新容器,请通过-l开关:

1docker ps -l

停止运行或活跃的容器就像输入:

1docker stop container-id

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

步骤 8 — 将 Docker 图像推到 Docker 存储库

在从现有图像创建新图像后,下一个逻辑步骤是将其与几个朋友共享,在Docker Hub上的整个世界或您可以访问的其他Docker注册表。

本节向您展示如何将 Docker 图像推到 Docker Hub。

若要在 Docker Hub 上创建帐户,请在 Docker Hub注册,然后先登录 Docker Hub,然后将提示您进行身份验证:

1docker login -u docker-registry-username

如果您指定了正确的密码,验证应该成功,然后您可以使用:

1docker push docker-registry-username/docker-image-name

它需要一段时间才能完成,完成后,输出将是这样的:

1[secondary_label Output]
2The push refers to a repository [docker.io/sammy/rockylinux-mariadb]
3670194edfaf5: Pushed
45f70bf18a086: Mounted from library/rockylinux
56a6c96337be1: Mounted from library/rockylinux
6
7...

将图像推到注册表后,该图像应列入您的帐户仪表板,如下图像所示。

Docker image listing on Docker Hub

如果推试导致此类错误,那么您可能没有登录:

1[secondary_label Output]
2The push refers to a repository [docker.io/sammy/rockylinux-mariadb]
3e3fbbfb44187: Preparing
45f70bf18a086: Preparing
5a3b5c80a4eba: Preparing
67f18b442972b: Preparing
73ce512daaf78: Preparing
87aae4540b42d: Waiting
9unauthorized: authentication required

登录,然后重复 push 尝试。

结论

Docker 比本文所提供的更多,但这应该足以让你开始在 Rocky Linux 上使用它 8. 像大多数开源项目一样,Docker 是从快速发展的代码库中构建的,所以习惯于访问该项目的 博客页面以获取最新的信息。

另外,请参阅 DO 社区中的 其他 Docker 教程

Published At
Categories with 技术
comments powered by Disqus