docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > CentOS7安装和使用Docker

在CentOS 7上安装和使用Docker的方法步骤

作者:白如意i

Docker 是一个应用程序,它简化了在容器中运行应用程序进程的过程,这些容器类似于虚拟机,但更加便携、资源友好,并且更依赖于主机操作系统,在本教程中,你将学习如何在现有的 CentOS 7 安装上安装并使用 Docker,需要的朋友可以参考下

简介

Docker 是一个应用程序,它简化了在容器中运行应用程序进程的过程。这些容器类似于虚拟机,但更加便携、资源友好,并且更依赖于主机操作系统。

在 CentOS 7 上安装 Docker 有两种方法。一种方法是在现有的操作系统安装 Docker,另一种方法是使用一个名为 Docker Machine 的工具在服务器上安装 Docker。

在本教程中,你将学习如何在现有的 CentOS 7 安装上安装并使用 Docker。

先决条件

本教程中的所有命令都应该以非 root 用户身份运行。如果命令需要 root 访问权限,将在命令之前加上 sudo

步骤 1 — 安装 Docker

官方 CentOS 7 仓库中提供的 Docker 安装包可能不是最新版本。为了获取最新版本,可以从官方 Docker 仓库安装 Docker。本节将向你展示如何做到这一点。

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

sudo yum check-update

现在运行以下命令。它将添加官方 Docker 仓库,下载最新版本的 Docker 并进行安装:

curl -fsSL https://get.docker.com/ | sh

安装完成后,启动 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 命令。

步骤 2 — 无需使用 sudo 执行 Docker 命令(可选)

默认情况下,运行 docker 命令需要 root 权限 — 也就是说,你必须在命令前加上 sudo。也可以通过将用户添加到 docker 组来运行 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)

你需要注销 Droplet 并以相同用户身份重新登录以启用此更改。

如果你需要将一个不是当前登录用户的用户添加到 docker 组中,可以显式声明该用户名:

sudo usermod -aG docker username

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

步骤 3 — 使用 Docker 命令

安装并运行 Docker 后,现在是熟悉命令行实用程序的时候了。使用 docker 包括传递一系列选项和子命令,后跟参数。语法如下:

docker [option] [command] [arguments]

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

docker

截至 Docker 1.11.1,可用的完整子命令列表包括:

    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

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

docker docker-subcommand --help

要查看系统范围的信息,使用:

docker info

步骤 4 —— 使用 Docker 镜像

Docker 容器是从 Docker 镜像运行的。默认情况下,它从 Docker Hub 拉取这些镜像,Docker Hub 是由 Docker 公司管理的 Docker 注册表,该公司是 Docker 项目的背后支持者。任何人都可以在 Docker Hub 上构建和托管他们的 Docker 镜像,因此大多数应用程序和 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 上搜索可用的镜像。例如,要搜索 CentOS 镜像,请输入:

docker search centos

该脚本将爬取 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 子命令将其下载到您的计算机,如下所示:

docker pull centos

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

docker run centos

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

docker images

输出应类似于以下内容:

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

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

步骤 5 —— 运行 Docker 容器

您在上一步中运行的 hello-world 容器是一个运行并退出的容器的示例,它发出一个测试消息后退出。然而,容器可以比那更有用,它们可以是交互式的。毕竟,它们类似于虚拟机,只是更节约资源。

例如,让我们使用最新的 CentOS 镜像运行一个容器。-i 和 -t 开关的组合为您提供了对容器的交互式 shell 访问:

docker run -it centos

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

[root@59839a1b7de2 /]#

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

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

yum install mariadb-server

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

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

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

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

要将容器的状态保存为新镜像,首先退出容器:

exit

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

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

例如:

docker commit -m "added mariadb-server" -a "Sunday Ogwu-Chinuwa" 59839a1b7de2 finid/centos-mariadb

完成该操作后,列出您计算机上的 Docker 镜像应显示新镜像,以及它派生自的旧镜像:

docker images

输出应该类似于:

REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
finid/centos-mariadb   latest              23390430ec73        6 seconds ago       424.6 MB
centos                 latest              778a53015523        5 weeks ago         196.7 MB
hello-world            latest              94df4f0ce8a4        2 weeks ago         967 B

在上面的示例中,centos-mariadb 是新镜像,它派生自 Docker Hub 上的现有 CentOS 镜像。大小差异反映了所做的更改。在此示例中,更改是安装了 MariaDB 服务器。因此,下次您需要使用预先安装了 MariaDB 服务器的 CentOS 运行容器时,您可以使用新镜像。镜像也可以从所谓的 Dockerfile 构建。但这是一个非常复杂的过程,远远超出了本文的范围。我们将在以后的文章中探讨这一点。

步骤 7 — 列出 Docker 容器

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

docker ps

你将看到类似以下的输出:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f7c79cc556dd        centos              "/bin/bash"         3 hours ago         Up 3 hours                              silly_spence

要查看所有容器(包括活跃和非活跃的),使用 -a 开关:

docker ps -a

要查看你创建的最新容器,使用 -l 开关:

docker ps -l

停止运行中的容器很简单,只需输入:

docker stop 容器ID

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

步骤 8 — 将 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/finid/centos-mariadb]
670194edfaf5: Pushed 
5f70bf18a086: Mounted from library/centos 
6a6c96337be1: Mounted from library/centos

...

将镜像推送到注册表后,它应该会在你帐户的仪表板上列出,就像下面的图片所示。

!Docker image listing on Docker Hub

如果推送尝试导致以下错误,则你可能没有登录:

The push refers to a repository [docker.io/finid/centos-mariadb]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required

登录后,重复推送尝试。

结论

Docker 还有很多内容没有在本文中介绍,但这应该足够让你在 CentOS 7 上开始使用它了。像大多数开源项目一样,Docker 是基于一个快速发展的代码库构建的,所以要养成访问项目博客页面获取最新信息的习惯。

以上就是在CentOS 7上安装和使用Docker的方法步骤的详细内容,更多关于CentOS7安装和使用Docker的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文