固定链接 基于滴滴云安装 Docker 并上传镜像到滴滴云 Docker 仓库

基于滴滴云安装 Docker 并上传镜像到滴滴云 Docker 仓库

基于滴滴云安装 Docker 并上传镜像到滴滴云 Docker 仓库

前言

Docker 简化了容器中应用程序进程的管理过程。容器允许您在资源隔离的进程中运行应用程序。容器与虚拟机类似,但容器更便携、更资源友好,并且更依赖于主机操作系统。

本文将介绍如何用滴滴云服务器在 Ubuntu 16.04 上安装和使用 Docker Community Edition(CE),我们将安装 Docker、使用镜像和容器,并将镜像上传到 Docker 仓库。

目前,滴滴云提供了容器镜像服务,支持镜像托管、镜像安全扫描、镜像加速等功能,我们还将上传镜像到滴滴云 Docker 仓库。

准备

在开始之前,我们需要做以下准备工作:

  • 登录滴滴云控制台创建一个云服务器 DC2。配置为:Ubuntu 16.04,4 核 8G 内存,40G SSD 云盘存储,5Mbps 带宽。

  • 如果您希望创建自己的镜像并将其推送到 Docker Hub,则需要 Docker Hub 的帐户,具体操作如步骤 7 和 8 所示。

  • 跳转到滴滴云控制台-计算-容器镜像服务设置仓库账户,具体操作如步骤 9 所示。

第 1 步 – 安装 Docker

为了确保获得最新版本,我们从 Docker 官网镜像仓库来安装 Docker。为此,我们添加一个新的软件包源,从 Docker 添加 GPG 密钥以确保下载有效,然后安装该软件包。

  1. 更新现有的软件包列表::

  2. 安装 apt-transport-https 等软件包支持 HTTP 协议的源:

  3. 添加 Docker 官方的 GPG 密钥到您的系统:

  4. 将 Docker 添加到 APT 源:

  5. 再次更新 APT 软件包缓存:

  6. 确保您要从 Docker 仓库而不是默认的 Ubuntu 仓库安装:

    虽然 Docker 的版本号可能不同,但您会看到这样的输出:

    请注意,docker-ce 未安装,但安装候选项来自 Ubuntu16.04(xenial)的 Docker 仓库。

  7. 安装 Docker CE:

  8. 此时,Docker 安装已完成,守护进程已启动。通过 systemctl 命令来启动 Docker 服务,检查它是否正在运行:

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

现在安装 Docker 不仅可以为您提供 Docker 服务(守护进程),还可以为您提供 Docker 命令行工具或 Docker 客户端。我们将在后文探讨如何使用 docker 命令。

第 2 步 – 不加 Sudo 前缀执行 Docker 命令(可选)

默认情况下,docker 命令只能由 root 用户或 Docker 组中的用户运行,Docker 用户组在 Docker 的安装过程中自动创建。如果您不使用 sudo 作为前缀或不在 Docker 组中,尝试运行 docker 命令,将获得如下输出:

  1. 如果希望在每次运行 docker 命令时避免键入 sudo,请将当前用户添加到安装中自动创建的 Docker 用户组中:

  2. 要应用新的组成员身份,请注销服务器并重新登录,或键入以下命令:

    系统将提示您输入用户密码以继续。

  3. 通过键入以下命令确认您的用户现已添加到 Docker 组:

  4. 如果您需要将用户添加到您未登录的 Docker 组中,请使用以下方式输入确切的用户名:

本文接下来的内容将假定您以 Docker 组中的用户身份运行 dokcer 命令。如果您没有选择这样做,请在命令前面添加 sudo

接下来让我们探讨 docker 命令。

第 3 步 – 使用 Docker 命令

  1. 使用 docker 命令,包括传递一系列选项和参数。语法采用以下形式:

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

  3. 要查看特定命令的可用选项,请键入:

  4. 要查看有关Docker的系统信息,请使用以下命令:

下面让我们探讨其中的一些命令,从使用镜像开始。

第 4 步 – 使用 Docker 镜像

Docker 容器是用 Docker 镜像创建的。默认情况下, Docker 会尝试从默认镜像仓库(Docker Hub 公共注册服务器中的仓库)获取这些镜像。

Docker Hub 是 Docker 项目背后的公司,任何人都可以在 Docker Hub 上托管他们的 Docker 镜像,您需要的大多数应用程序和 Linux 发行版都会有镜像托管在那里。

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

    输出将显示 Docker 正常工作:

    Docker最初无法在本地找到 hello-world 镜像,因此它从默认镜像仓库下载了镜像。下载镜像后,Docker 用镜像创建了一个容器,并在容器中执行了应用程序,显示消息。

  2. 您可以使用 docker 命令的 search 子命令搜索 Docker Hub 官方仓库中可用的镜像。例如,要搜索 Ubuntu 镜像,请键入:

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

    OFFICIAL 列中,OK 表示由官方创建。确定要使用的镜像后,可以使用 pull 子命令将其拉取到本地。

  3. 执行以下命令将官方 Ubuntu 镜像拉取到您的计算机:

    您将看到以下输出:

    拉取镜像后,可以使用 run 子命令用镜像创建并运行一个容器。正如您在 hello-world 示例中看到的,如果在执行 docker 命令的 run 子命令时未下载镜像,则 Docker 客户端将先下载镜像,然后使用它创建并运行容器。

  4. 要查看已下载到本地的镜像,请键入:

    应输出类似于以下内容:

后文将介绍,用于运行容器的镜像可以被修改并用于生成新镜像,然后可以将其推送到 Docker Hub 或其他 Docker 注册服务器。

让我们更详细地来看看如何运行容器。

第 5 步 – 运行 Docker 容器

在上一步中运行的 hello-world 容器是一个运行并在执行完命令后退出容器的例子。容器还有更多用处,它们是可交互的。毕竟它们类似于虚拟机,只是更加资源友好。

  1. 举个例子,让我们使用 Ubuntu 的最新镜像运行一个容器,-i-t 选项的组合为您提供了对容器的交互式 shell 访问:

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

    请注意命令提示符中的容器 ID。在这个例子中,它是 c04385adddac。稍后您将在要删除容器时用该容器 ID 来标识容器。

  2. 现在您可以在容器内运行任何命令。例如,让我们更新容器内的 APT 软件包缓存。您不需要在任何命令前添加 sudo,因为您是以 root 用户的身份在容器内操作:

    然后在里面安装应用程序。我们安装Node.js:

    这将从官方 Ubuntu 镜像仓库安装 Node.js 在容器中。安装完成后,验证是否已安装 Node.js:

    您将看到终端显示的版本号:

您在容器内进行的任何更改仅适用于该容器。

要退出容器,请在提示符处键入 exit

下一步让我们看看如何管理我们系统上的容器。

第 6 步 – 管理 Docker 容器

  1. 使用 Docker 一段时间后,您的本地将有许多活动(运行)和非活动的容器。要查看活动的,请键入:

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

    在本文中,您启动了两个容器:一个来自 hello-world 镜像,另一个来自 Ubuntu 镜像。现在,两个容器都不再运行,但它们仍然存在于您的系统上。

  2. 要查看所有容器(活动和非活动),请使用 docker ps 命令并添加 -a 选项:

    您将看到类似于此的输出:

  3. 要查看您创建的最新容器,请通过 -l 选项:

  4. 要启动已停止的容器,请使用 docker start,后跟容器 ID 或容器名称。让我们启动基于 Ubuntu 的容器,其 ID 为 c04385adddac

    容器已启动,您可以使用 docker ps 来查看其状态:

  5. 要终止正在运行的容器,请使用 docker stop,后跟容器 ID 或容器名称。这次,我们将使用 Docker 自动分配的容器名称来终止基于 Ubuntu 的容器,即 agitated_elion

  6. 一旦您决定不再需要某个容器,请使用该 docker rm 命令将其删除,后跟容器 ID 或容器名称。我们将使用 docker ps -a 命令查看与 hello-world 镜像关联的容器的 ID 或名称,然后将其删除:

  7. 您可以通过 --name 选项启动一个新容器并为其命名,您还可以通过 --rm 选项创建一个容器,让其在停止时自行删除。有关这些选项和其他选项的更多信息,请使用 docker run help 命令查阅。

我们还可以使用已有容器来创建镜像。让我们来看看是如何实现的。

第 7 步 – 提交容器中的更改来创建 Docker 镜像

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

本步骤介绍如何保存容器的某个状态来创建新的 Docker 镜像。

在 Ubuntu 容器中安装 Node.js 后,您有了一个正在运行镜像的容器,不过这个容器与用来创建它的镜像不同。但是您可能希望基于 Node.js 容器构建一个新镜像。

  1. 使用以下命令来提交为一个新的 Docker 镜像:

    -m 选项是提交信息,可以帮助你和其他人知道你所做的修改,而 -a 用于指定作者。container_id 是本文前面启动 Docker 交互式会话时提到的那个。除非您在 Docker Hub 上创建了其他仓库,否则 repository 通常是您的 Docker Hub 用户名。

    例如,对于用户 lune,使用容器 ID d9b100f2f636,命令将是:

    当您提交镜像后,新的镜像保存在本地。在本文后面,将介绍如何将镜像推送到 Docker Hub 之类的 Docker 注册服务器,以便其他人可以访问它。

  2. 再次列出 Docker 镜像,将显示旧镜像以及从中派生的新镜像:

    您会看到这样的输出:

    在此示例中,ubuntu-nodejs 是新镜像,它是从 Docker Hub 下载的现有 Ubuntu 镜像中派生的,其尺寸差异反映了所做的变化。在此示例中,更改是安装 Node.js。因此,下次需要使用预先安装了 Node.js 的 Ubuntu 镜像来运行容器时,您便可以使用新镜像。

您还可以基于 Dockerfile 构建镜像,这样可以在新镜像中自动安装软件。但是,这超出了本文的介绍范围。

现在让我们看看如何与他人分享新镜像,以便他们可以用来创建容器。

第 8 步 – 将 Docker 镜像上传到 Docker 仓库

从现有镜像创建新镜像后,往往会想要共享到朋友、Docker Hub 的所有用户,或者其他您可以访问的 Docker 注册服务器。要将镜像上传到 Docker Hub 或任何其他 Docker 注册服务器,您必须拥有一个它的帐户。

本步骤介绍如何将 Docker 镜像上传到 Docker Hub。

  1. 登录Docker Hub:

    示例(接下来的操作指令均基于该示例,您根据实际情况替换内容即可):

    系统将提示您使用 Docker Hub 密码进行身份验证。如果您输入了正确的密码,则身份验证成功。

  2. 如果 Docker 注册服务器用户名与用于创建镜像的本地用户名不同,则必须使用注册服务器用户名来标记镜像。基于上一步中给出的示例,您可以键入:

  3. 然后您可以使用以下方法上传自己的镜像:

    要将 ubuntu-nodejs 镜像上传到 huyuyu 仓库,命令是:

    上传镜像的过程可能需要一些时间才能完成,完成后的输出将如下所示:

  4. 将镜像上传到注册服务器后,它应该列在您帐户的仪表板上,如下图所示:

  5. 如果上传操作导致以下输出,那么您可能没有登录:

请登录 docker login 并重复尝试上传操作,然后验证它是否存在于 Docker Hub 仓库页面上。

您现在可以将该镜像拉取到新计算机并使用它来运行新容器 docker pull huyuyu/ubuntu-nodejs

第 9 步 – 上传镜像到滴滴云 Docker 仓库

滴滴云容器镜像服务是面向企业和开发者提供的容器镜像生命周期管理服务。容器镜像服务简化了镜像仓库的搭建运维工作,支持镜像托管、镜像安全扫描、镜像加速等功能,提供海量镜像资源,满足不同业务的需求。

我们将使用滴滴云容器镜像服务创建自己的命名空间,再上传镜像到该命名空间下。

  1. 设置仓库账户

    第一次使用容器镜像服务时,需通过“我的仓库”页面的“设置仓库账户”功能,来设置在 Docker 客户端登录时使用的用户名和密码,设置后不可更改用户名。

    也可先创建仓库再设置账户。

  2. 创建命名空间

    进入滴滴云控制台,依次点击计算—>容器镜像服务—>命名空间—>创建命名空间。

    命名空间名称在滴滴云容器镜像服务中全局唯一,用于生成仓库地址的前缀。

    命名空间也可以在第一次创建仓库时创建。(如果是滴滴云的团队账户,只有团队的管理员才能创建命名空间)

  3. 在 Docker 客户端登录

    在 Docker 客户端登录时的用户名和密码,是您在容器镜像服务控制台通过“设置仓库账户”按钮设置的用户名和密码。

    登录成功后,客户端会保存登录信息,下次登录该账户,无需输入密码即可自动登录。如需切换账户,必须重新按以下命令进行登录:

  4. 根据要上传的本地镜像的信息填写 [镜像名称:Tag] 或 [镜像 ID],并填写对应的 [命名空间],以及用 [仓库名称] 和新的 [版本号(Tag)] 对它进行标记:

    示例:

  5. 上传标记好的本地镜像到镜像仓库:

    示例:

  6. 完成上传后,在滴滴云容器镜像服务的“我的仓库”页面,查看该镜像(删除该仓库,将同时删除该仓库下所有镜像版本,请谨慎操作):

    您也可以通过点击“详情”按钮,对该镜像进行版本管理和安全扫描等操作:


本文作者:Lune

您的留言将激励我们越做越好