Docker - 快速指南


Docker - 概述

Docker 是一种容器管理服务。Docker 的关键词是在任何地方开发、发布运行。Docker 的整体理念是让开发人员轻松开发应用程序,将它们发送到容器中,然后可以部署在任何地方。

Docker 的首次发布于 2013 年 3 月,从那时起,它已成为现代世界开发的流行语,尤其是面对基于敏捷的项目。

Docker 概述

Docker 的特点

  • Docker 能够通过容器提供更小的操作系统占用空间,从而减少开发规模。

  • 借助容器,跨不同部门(例如开发、QA 和运营)的团队可以更轻松地跨应用程序无缝工作。

  • 您可以在任何地方、任何物理机和虚拟机上甚至在云上部署 Docker 容器。

  • 由于 Docker 容器非常轻量级,因此它们非常容易扩展。

Docker 的组件

Docker 有以下组件

  • Docker for Mac - 它允许人们在 Mac 操作系统上运行 Docker 容器。

  • Docker for Linux - 它允许人们在 Linux 操作系统上运行 Docker 容器。

  • Docker for Windows - 它允许人们在 Windows 操作系统上运行 Docker 容器。

  • Docker Engine - 用于构建 Docker 映像和创建 Docker 容器。

  • Docker Hub - 这是用于托管各种 Docker 映像的注册表。

  • Docker Compose - 用于定义使用多个 Docker 容器的应用程序。

我们将在后续章节中详细讨论所有这些组件。

Docker 的官方网站是https://www.docker.com/该网站包含有关 Docker 软件的所有信息和文档。它还具有各种操作系统的下载链接。

在 Linux 上安装 Docker

为了开始安装 Docker,我们将使用 Ubuntu 实例。如果您还没有 Oracle Virtual Box,您可以使用它来设置虚拟 Linux 实例。

以下屏幕截图显示了已安装在 Oracle Virtual Box 上的简单 Ubuntu 服务器。系统上定义了一个名为demo的操作系统用户,该用户对服务器具有完全 root 访问权限。

演示按钮

要安装 Docker,我们需要遵循以下步骤。

步骤 1 - 在安装 Docker 之前,您首先必须确保运行正确的 Linux 内核版本。Docker 仅设计为在 Linux 内核版本 3.8 及更高版本上运行。我们可以通过运行以下命令来完成此操作。

乌纳梅

该方法返回Linux系统的系统信息。

句法

uname -a

选项

a - 这用于确保返回系统信息。

返回值

此方法返回 Linux 系统上的以下信息 -

  • 内核名称
  • 节点名称
  • 内核版本
  • 内核版本
  • 机器
  • 处理器
  • 硬件平台
  • 操作系统

例子

uname –a

输出

当我们运行上面的命令时,我们将得到以下结果 -

输出

从输出中我们可以看到Linux内核版本是4.2.0-27,高于版本3.8,所以我们可以开始了。

步骤 2 - 您需要使用最新的软件包更新操作系统,这可以通过以下命令完成 -

apt-get

此方法将来自 Internet 的软件包安装到 Linux 系统上。

句法

sudo apt-get 更新

选项

  • sudo - sudo命令用于确保该命令以 root 访问权限运行。

  • update -使用更新选项确保 Linux 系统上的所有软件包均已更新。

返回值

没有任何

例子

sudo apt-get update

输出

当我们运行上面的命令时,我们将得到以下结果 -

示例输出

该命令将连接到互联网并下载 Ubuntu 的最新系统包。

步骤 3 - 下一步是安装必要的证书,稍后需要使用 Docker 站点来下载必要的 Docker 软件包。可以使用以下命令来完成。

sudo apt-get install apt-transport-https ca-certificates

必要的 Docker 包

步骤 4 - 下一步是添加新的 GPG 密钥。需要此密钥来确保在下载 Docker 所需的包时所有数据都经过加密。

以下命令将从密钥服务器hkp://ha.pool.sks-keyservers.net:80下载 ID 为 58118E89F3A912897C070ADBF76221572C52609D 的密钥并将其添加到adv钥匙串中。请注意,下载必要的 Docker 软件包需要此特定密钥。

新 PGP 密钥

步骤 5 - 接下来,根据您所拥有的 Ubuntu 版本,您需要将相关站点添加到apt 包管理器docker.list中,以便能够从 Docker 站点检测到 Docker 包并下载他们相应地。

由于我们的操作系统是 Ubuntu 14.04,因此我们将使用存储库名称“deb https://apt.dockerproject.org/repo ubuntu-trusty main”。

然后,我们需要将此存储库添加到 docker.list 中如上所述。

echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main” 
   | sudo tee /etc/apt/sources.list.d/docker.list

码头工人列表

步骤 6 - 接下来,我们发出apt-get update 命令来更新 Ubuntu 系统上的软件包。

APT-GET更新命令

步骤 7 - 如果您想验证包管理器是否指向正确的存储库,您可以通过发出apt-cache 命令来完成。

apt-cache policy docker-engine

在输出中,您将获得https://apt.dockerproject.org/repo/的链接

APT-GET更新命令

步骤 8 - 发出apt-get update 命令以确保本地系统上的所有软件包都是最新的。

APT-GET 软件包更新

步骤 9 - 对于 Ubuntu Trusty、Wily 和 Xenial,我们必须安装 linux-image-extra-* 内核包,它允许使用 aufs存储驱动程序。新版本的 Docker 使用此驱动程序。

可以使用以下命令来完成。

sudo apt-get install linux-image-extra-$(uname -r) 
   linux-image-extra-virtual

Aufs存储驱动程序

步骤 10 - 最后一步是安装 Docker,我们可以使用以下命令来完成此操作 -

sudo apt-get install –y docker-engine

在这里,apt-get使用安装选项从 Docker 网站下载 Docker 引擎映像并安装 Docker。

Docker-engine 是 Docker Corporation 为基于 Ubuntu 的系统提供的官方软件包。

Docker引擎

在下一节中,我们将了解如何检查已安装的 Docker 版本。

Docker版本

要查看正在运行的 Docker 版本,您可以发出以下命令 -

句法

docker version 

选项

  • version - 用于确保 Docker 命令返回安装的 Docker 版本。

返回值

输出将提供系统上安装的 Docker 版本的各种详细信息。

例子

sudo docker version 

输出

当我们运行上面的程序时,我们将得到以下结果 -

Docker 版本输出

码头工人信息

要查看有关系统上运行的 Docker 的更多信息,您可以发出以下命令 -

句法

docker info

选项

  • info - 用于确保 Docker 命令返回已安装的 Docker 服务的详细信息。

返回值

输出将提供系统上安装的 Docker 的各种详细信息,例如 -

  • 集装箱数量
  • 图片数量
  • Docker使用的存储驱动
  • Docker使用的根目录
  • Docker使用的执行驱动

例子

sudo docker info

输出

当我们运行上面的命令时,我们将得到以下结果 -

Docker 信息示例输出

适用于 Windows 的 Docker

Docker 对 Windows 提供开箱即用的支持,但您需要进行以下配置才能安装适用于 Windows 的 Docker。

系统要求

Windows操作系统 Windows 10 64 位
记忆 2 GB 内存(推荐)

您可以从https://docs.docker.com/docker-for-windows/下载适用于 Windows 的 Docker

适用于 Windows 的 Docker

Docker工具箱

Docker ToolBox 专为旧版本的 Windows 设计,例如 Windows 8.1 和 Windows 7。您需要进行以下配置才能安装 Docker for Windows。

系统要求

Windows操作系统 Windows 7、8、8.1
记忆 2 GB 内存(推荐)
虚拟化 应该启用此功能。

您可以从https://www.docker.com/products/docker-toolbox下载 Docker ToolBox

Docker工具箱

Docker - 安装

让我们来看看每个产品的安装。

适用于 Windows 的 Docker

下载安装程序后,双击它启动安装程序,然后按照以下步骤操作。

步骤 1 - 单击协议条款,然后单击安装按钮继续安装。

Docker 设置

步骤 2 - 完成后,单击“完成”按钮完成安装。

结束

Docker工具箱

下载安装程序后,双击它启动安装程序,然后按照以下步骤操作。

步骤 1 - 单击开始屏幕上的“下一步”按钮。

Docker 工具箱下一步

步骤 2 - 在下一个屏幕上保留默认位置,然后单击“下一步”按钮。

目的地位置

步骤 3 - 保留默认组件并单击“下一步”按钮继续。

选择组件

步骤 4 - 保持其他任务不变,然后单击“下一步”按钮。

额外任务

步骤 5 - 在最后一个屏幕上,单击“安装”按钮。

安装

使用 Docker 工具箱

现在让我们看看如何使用 Docker Toolbox 来处理 Windows 上的 Docker 容器。第一步是启动 Docker Toolbox 应用程序,安装 Docker Toolbox 时会在桌面上创建快捷方式。

快速启动终端

接下来,您将看到 Docker 工具箱启动时正在执行的配置。

Docker 工具箱终端

完成后,您将看到 Docker 已配置并启动。您将获得 Docker 的交互式 shell。

交互式外壳

为了测试Docker是否正常运行,我们可以使用Docker run命令下载并运行一个简单的HelloWorld Docker容器

Docker run 命令的工作原理如下:

docker run 

该命令用于在 Docker 容器中运行命令。

句法

docker run image

选项

  • 图像- 这是用于运行容器的图像的名称。

返回值

输出将在所需的容器中运行命令。

例子

sudo docker run hello-world

此命令将下载hello-world映像(如果尚不存在),并将hello-world作为容器运行。

输出

当我们运行上面的命令时,我们将得到以下结果 -

Docker容器

如果您想在 Windows 上运行 Ubuntu 操作系统,可以使用以下命令下载 Ubuntu 映像 -

Docker run –it ubuntu bash

在这里,您通过–it选项告诉 Docker 以交互模式运行命令。

Ubuntu 镜像

在输出中,您可以看到 Ubuntu 映像已下载并运行,然后您将以 root 用户身份登录 Ubuntu 容器。

Docker-集线器

Docker Hub 是一个云上的注册服务,允许您下载其他社区构建的 Docker 镜像。您还可以将自己的 Docker 构建镜像上传到 Docker hub。在本章中,我们将了解如何从 Docker hub 下载和使用 Jenkins Docker 镜像。

Docker hub 的官方网站是 - https://www.docker.com/community-edition#/add_ons

步骤 1 - 首先您需要在 Docker hub 上进行简单的注册。

Docker Hub 新加坡

步骤 2 - 注册后,您将登录 Docker Hub。

登录 Docker Hub

步骤 3 - 接下来,让我们浏览并找到 Jenkins 映像。

Jenkins图像

步骤 4 - 如果您在同一页面上向下滚动,您可以看到 Docker pull命令。这将用于将 Jenkins 映像下载到本地 Ubuntu 服务器上。

拉命令

步骤 5 - 现在,转到 Ubuntu 服务器并运行以下命令 -

sudo docker pull jenkins 

Ubuntu服务器

要运行 Jenkins,您需要运行以下命令 -

sudo docker run -p 8080:8080 -p 50000:50000 jenkins 

关于上述sudo命令,请注意以下几点-

  • 我们使用sudo命令来确保它以 root 访问权限运行。

  • 这里,jenkins是我们想要从 Docker hub 下载并安装在 Ubuntu 机器上的镜像的名称。

  • -p用于将内部 Docker 镜像的端口号映射到我们的主 Ubuntu 服务器,以便我们可以相应地访问容器。

须藤命令

然后,Jenkins 将作为容器在 Ubuntu 计算机上成功运行。

Docker - 图像

在 Docker 中,一切都基于镜像。镜像是文件系统和参数的组合。我们以 Docker 中的以下命令为例。

docker run hello-world 
  • Docker 命令是特定的,它告诉操作系统上的 Docker 程序需要执行某些操作。

  • run命令用于提到我们要创建一个镜像的实例,该实例称为容器

  • 最后,“hello-world”表示制作容器的图像。

现在让我们看看如何使用 Docker Hub 中提供的 CentOS 映像在我们的 Ubuntu 计算机上运行 CentOS。我们可以通过在 Ubuntu 机器上执行以下命令来做到这一点 -

sudo docker run centos –it /bin/bash

关于上述sudo命令,请注意以下几点-

  • 我们使用sudo命令来确保它以root访问权限运行。

  • 这里,centos是我们想要从 Docker Hub 下载并安装在 Ubuntu 机器上的镜像的名称。

  • ─它用于提及我们要以交互模式运行。

  • /bin/bash用于在 CentOS 启动并运行后运行 bash shell。

显示 Docker 镜像

要查看系统上的 Docker 映像列表,您可以发出以下命令。

docker images

该命令用于显示系统当前安装的所有镜像。

句法

docker images 

选项

没有任何

返回值

输出将提供系统上的图像列表。

例子

sudo docker images

输出

当我们运行上面的命令时,它将产生以下结果 -

显示 Docker 镜像

从上面的输出中,您可以看到服务器有三个镜像:centos、newcentosjenkins。每个图像都有以下属性 -

  • TAG - 用于逻辑标记图像。

  • 图像 ID - 用于唯一标识图像。

  • 创建时间- 自创建图像以来的天数。

  • 虚拟尺寸- 图像的尺寸。

下载 Docker 镜像

可以使用 Docker run命令从 Docker Hub 下载镜像。让我们详细看看如何做到这一点。

句法

以下语法用于在 Docker 容器中运行命令。

docker run image 

选项

  • 图像- 这是用于运行容器的图像的名称。

返回值

输出将在所需的容器中运行命令。

例子

sudo docker run centos

此命令将下载centos映像(如果尚不存在),并将操作系统作为容器运行。

输出

当我们运行上面的命令时,我们将得到以下结果 -

下载 Docker 镜像

您现在将看到下载的 CentOS Docker 映像。现在,如果我们运行 Docker images命令来查看系统上的镜像列表,我们也应该能够看到centos镜像。

森托斯

删除 Docker 镜像

可以通过docker rmi命令删除系统上的 Docker 镜像。让我们更详细地看看这个命令。

docker rmi

该命令用于删除 Docker 镜像。

句法

docker rmi ImageID

选项

  • ImageID - 这是需要删除的图像的 ID。

返回值

输出将提供已删除图像的图像 ID。

例子

sudo docker rmi 7a86f8ffcb25 

这里,7a86f8ffcb25是newcentos镜像的镜像ID 。

输出

当我们运行上面的命令时,它将产生以下结果 -

删除 Docker 镜像

让我们看看更多关于镜像的 Docker 命令。

docker 镜像-q

此命令用于仅返回图像的图像 ID。

句法

docker images 

选项

  • q - 它告诉 Docker 命令仅返回图像 ID。

返回值

输出将仅显示 Docker 主机上映像的映像 ID。

例子

sudo docker images -q 

输出

当我们运行上面的命令时,它将产生以下结果 -

Docker 图像 Q

码头工人检查

该命令用于查看镜像或容器的详细信息。

句法

docker inspect Repository 

选项

  • 存储库- 这是图像的名称。

返回值

输出将显示图像的详细信息。

例子

sudo docker inspect jenkins 

输出

当我们运行上面的命令时,它将产生以下结果 -

Docker 检查

Docker-容器

容器是可以使用 Docker run 命令运行的 Docker 映像的实例。Docker 的基本目的是运行容器。让我们讨论如何使用容器。

运行容器

容器的运行是通过 Docker run命令进行管理的。要以交互模式运行容器,首先启动 Docker 容器。

sudo docker run –it centos /bin/bash 

然后按 Crtl+p,您将返回到操作系统 shell。

集装箱

然后您将在 Ubuntu 服务器上的 CentOS 系统实例中运行。

集装箱清单

人们可以通过docker ps命令列出机器上的所有容器。该命令用于返回当前正在运行的容器。

docker ps

句法

docker ps 

选项

没有任何

返回值

输出将显示当前正在运行的容器。

例子

sudo docker ps

输出

当我们运行上面的命令时,它将产生以下结果 -

集装箱清单

让我们看看docker ps命令的更多变体。

docker ps -a

该命令用于列出系统上的所有容器

句法

docker ps -a 

选项

  • ─a - 它告诉docker ps命令列出系统上的所有容器。

返回值

输出将显示所有容器。

例子

sudo docker ps -a 

输出

当我们运行上面的命令时,它将产生以下结果 -

码头工人PSA

码头工人历史

使用此命令,您可以查看通过容器使用映像运行的所有命令。

句法

docker history ImageID 

选项

  • ImageID - 这是您想要查看针对其运行的所有命令的图像 ID。

返回值

输出将显示针对该映像运行的所有命令。

例子

sudo docker history centos

上面的命令将显示针对centos映像运行的所有命令。

输出

当我们运行上面的命令时,它将产生以下结果 -

Docker 的历史

Docker - 使用容器

在本章中,我们将详细探讨我们可以使用容器做什么。

码头工人顶部

使用此命令,您可以查看容器内的顶级进程。

句法

docker top ContainerID 

选项

  • ContainerID - 这是您想要查看顶级进程的容器 ID。

返回值

输出将显示容器内的顶级进程。

例子

sudo docker top 9f215ed0b0d3 

上面的命令将显示容器内的顶级进程。

输出

当我们运行上面的命令时,它将产生以下结果 -

码头工人顶部

泊坞站

该命令用于停止正在运行的容器。

句法

docker stop ContainerID 

选项

  • ContainerID - 这是需要停止的容器 ID。

返回值

输出将给出已停止容器的 ID。

例子

sudo docker stop 9f215ed0b0d3 

上述命令将停止 Docker 容器9f215ed0b0d3

输出

当我们运行上面的命令时,它将产生以下结果 -

码头工人停止

码头工人

该命令用于删除容器。

句法

docker rm ContainerID 

选项

  • ContainerID - 这是需要删除的容器 ID。

返回值

输出将给出已删除容器的 ID。

例子

sudo docker rm 9f215ed0b0d3 

上面的命令将删除 Docker 容器9f215ed0b0d3

输出

当我们运行上面的命令时,它将产生以下结果 -

Docker RM

码头工人统计

该命令用于提供正在运行的容器的统计信息。

句法

docker stats ContainerID 

选项

  • ContainerID - 这是需要提供统计信息的容器 ID。

返回值

输出将显示容器的 CPU 和内存利用率。

例子

sudo docker stats 9f215ed0b0d3 

上述命令将提供容器9f215ed0b0d3的 CPU 和内存利用率。

输出

当我们运行上面的命令时,它将产生以下结果 -

Docker 统计数据

码头工人附加

此命令用于附加到正在运行的容器。

句法

docker attach ContainerID 

选项

  • ContainerID - 这是您需要附加的容器 ID。

返回值

没有任何

例子

sudo docker attach 07b0b6f434fe 

上面的命令将附加到 Docker 容器07b0b6f434fe

输出

当我们运行上面的命令时,它将产生以下结果 -

Docker 附加

连接到 Docker 容器后,您可以运行上述命令来查看该 Docker 容器中的进程利用率。

Docker 附加容器

码头工人暂停

该命令用于暂停正在运行的容器中的进程。

句法

docker pause ContainerID 

选项

  • ContainerID - 这是您需要暂停容器中进程的容器 ID。

返回值

暂停容器的ContainerID。

例子

sudo docker pause 07b0b6f434fe 

上述命令将暂停正在运行的容器07b0b6f434fe中的进程。

输出

当我们运行上面的命令时,它将产生以下结果 -

Docker 暂停

码头工人取消暂停

此命令用于取消暂停正在运行的容器中的进程。

句法

docker unpause ContainerID

选项

  • ContainerID - 这是您需要取消暂停容器中进程的容器 ID。

返回值

正在运行的容器的ContainerID。

例子

sudo docker unpause 07b0b6f434fe 

上述命令将取消暂停正在运行的容器中的进程:07b0b6f434fe

输出

当我们运行上面的命令时,它将产生以下结果 -

Docker 取消暂停

码头工人杀死

该命令用于终止正在运行的容器中的进程。

句法

docker kill ContainerID

选项

  • ContainerID - 这是您需要终止容器中进程的容器 ID。

返回值

正在运行的容器的ContainerID。

例子

sudo docker kill 07b0b6f434fe 

上面的命令将杀死正在运行的容器07b0b6f434fe中的进程。

输出

当我们运行上面的命令时,它将产生以下结果 -

杀死 Docker

Docker——容器生命周期

下图解释了 Docker 容器的整个生命周期。

容器生命周期
  • 最初,Docker 容器将处于已创建状态。

  • 然后当使用Docker run命令时,Docker容器就进入运行状态。

  • Docker Kill命令用于终止现有的 Docker 容器。

  • Docker暂停命令用于暂停现有的Docker容器。

  • Docker stop命令用于暂停现有的 Docker 容器。

  • Docker run命令用于将容器从停止状态恢复到运行状态。

Docker-架构

下图展示了虚拟化的标准和传统架构。

虚拟化
  • 服务器是用于托管多个虚拟机的物理服务器。

  • 主机操作系统是基础机器,例如 Linux 或 Windows。

  • Hypervisor 是用于托管虚拟机的 VMWare 或 Windows Hyper V。

  • 然后,您可以在现有虚拟机管理程序(作为来宾操作系统)之上安装多个操作系统作为虚拟机。

  • 然后,您可以在每个来宾操作系统之上托管您的应用程序。

下图显示了通过 Docker 启用的新一代虚拟化。让我们看看各个层。

各层
  • 服务器是用于托管多个虚拟机的物理服务器。所以这一层保持不变。

  • 主机操作系统是基础机器,例如 Linux 或 Windows。所以这一层保持不变。

  • 现在新一代的 Docker 引擎来了。它用于运行之前作为 Docker 容器的虚拟机的操作系统。

  • 所有应用程序现在都作为 Docker 容器运行。

该架构的明显优势是您不需要为来宾操作系统配备额外的硬件。一切都像 Docker 容器一样工作。

Docker - 容器和主机

Docker 引擎的好处是它被设计为可以在各种操作系统上运行。我们已经看到了 Windows 上的安装,也看到了 Linux 系统上的所有 Docker 命令。现在让我们看看 Windows 操作系统上的各种 Docker 命令。

Docker 镜像

让我们在 Windows 主机上运行 Docker镜像命令。

Docker 镜像

从这里,我们可以看到我们有两个图像 - ubuntuhello-world

运行容器

现在让我们在 Windows Docker 主机中运行一个容器。

运行容器

我们可以看到,通过运行容器,我们现在可以在Windows主机上运行Ubuntu容器了。

列出所有容器

让我们列出 Windows 主机上的所有容器。

列出容器

停止容器

现在让我们停止 Windows 主机上正在运行的容器。

停止容器

因此,您可以看到 Docker 引擎在不同的 Docker 主机上非常一致,并且它在 Windows 上的工作方式与在 Linux 上的工作方式相同。

Docker - 配置

在本章中,我们将了解配置 Docker 的不同选项。

服务泊坞窗停止

该命令用于停止 Docker守护进程。

句法

service docker stop 

选项

没有任何

返回值

显示 Docker 进程已停止的消息。

例子

sudo service docker stop 

输出

当我们运行上面的命令时,它将产生以下结果 -

服务 Docker 停止

服务 docker 启动

该命令用于启动Docker daemon进程。

句法

service docker start 

选项

没有任何

返回值

显示 Docker 进程已启动的消息。

例子

sudo service docker start

输出

当我们运行上面的命令时,它将产生以下结果 -

服务 Docker 启动

Docker - 容器和外壳

默认情况下,当您启动容器时,您还将在启动容器时使用shell 命令,如下所示。这是我们在前面的章节中使用容器时所看到的。

外壳命令

在上面的屏幕截图中,您可以观察到我们发出了以下命令 -

sudo docker run –it centos /bin/bash 

我们使用此命令创建了一个新容器,然后使用 Ctrl+P+Q 命令退出容器。它确保即使我们退出容器后容器仍然存在。

我们可以使用 Docker ps命令验证容器是否仍然存在。如果我们必须直接退出容器,那么容器本身就会被销毁。

现在有一种更简单的方法可以连接到容器并干净地退出它们,而无需销毁它们。实现此目的的一种方法是使用nsenter命令。

在运行nsenter命令之前,您需要先安装nsenter映像。可以使用以下命令来完成 -

docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter

发送图像

在使用nsenter命令之前,我们需要获取容器的进程ID,因为这是nsenter命令所需要的。我们可以通过 Docker检查命令获取进程 ID ,并通过Pid对其进行过滤。

检查命令

如上面的屏幕截图所示,我们首先使用docker ps命令来查看正在运行的容器。我们可以看到有一个正在运行的容器,ID为ef42a4c5e663。

然后,我们使用 Docker检查命令来检查该容器的配置,然后使用grep命令来过滤进程 ID。从输出中我们可以看到进程ID是2978。

现在我们有了进程 ID,我们可以继续使用nsenter命令附加到 Docker 容器。

恩斯特尔

此方法允许用户在不退出容器的情况下附加到容器。

句法

nsenter –m –u –n –p –i –t 容器ID 命令

选项

  • -u用于提及Uts 命名空间

  • -m用于提及挂载命名空间

  • -n用于提及网络名称空间

  • -p用于提及进程名称空间

  • -i使容器以交互模式运行。

  • -t用于将容器的I/O流连接到主机操作系统。

  • containerID - 这是容器的 ID。

  • 命令- 这是在容器内运行的命令。

返回值

没有任何

例子

sudo nsenter –m –u –n –p –i –t 2978 /bin/bash

输出

恩森特尔

从输出中,我们可以观察到以下几点 -

  • 当我们发出nsenter命令时,提示符直接更改为bash shell

  • 然后我们发出退出命令。现在通常如果您不使用nsenter命令,容器将被销毁。但您会注意到,当我们运行nsenter命令时,容器仍然启动并运行。

Docker-文件

在前面的章节中,我们已经看到了各种镜像文件,例如从Docker hub下载的 Centos,您可以从中启动容器。下面再次显示一个示例。

Docker 文件

如果我们使用 Docker images命令,我们可以看到系统中现有的镜像。从上面的截图中,我们可以看到有两个镜像:centosnsenter

但是 Docker 还使您能够创建自己的 Docker 映像,并且可以在Docker Files的帮助下完成。Docker 文件是一个简单的文本文件,其中包含有关如何构建映像的说明。

以下步骤说明了如何创建 Docker 文件。

步骤 1 - 创建一个名为Docker File 的文件并使用vim对其进行编辑。请注意,文件名必须是“Dockerfile”,其中“D”大写。

编辑 Vim

步骤 2 - 使用以下说明构建 Docker 文件。

#This is a sample Image 
FROM ubuntu 
MAINTAINER demousr@gmail.com 

RUN apt-get update 
RUN apt-get install –y nginx 
CMD [“echo”,”Image created”] 

关于上述文件需要注意以下几点 -

  • 第一行“#This is a Sample Image”是一条注释。您可以借助#命令向 Docker 文件添加注释

  • 下一行必须以FROM关键字开头。它告诉 docker,您想要从哪个基础镜像中构建镜像。在我们的示例中,我们从ubuntu映像创建一个映像。

  • 下一个命令是维护这个形象的人。您可以在此处指定MAINTAINER关键字并仅提及电子邮件 ID。

  • RUN命令用于针对映像运行指令。在我们的例子中,我们首先更新 Ubuntu 系统,然后在ubuntu映像上安装 nginx 服务器。

  • 最后一个命令用于向用户显示一条消息。

步骤 3 - 保存文件。在下一章中,我们将讨论如何构建图像。

建立形象

Docker - 构建文件

我们在上一章中创建了 Docker 文件。现在是时候构建 Docker 文件了。Docker 文件可以使用以下命令构建 -

docker build 

让我们详细了解一下这个命令。

码头工人构建

该方法允许用户构建自己的 Docker 镜像。

句法

docker build  -t ImageName:TagName dir

选项

  • -t - 是为图像添加一个标签

  • ImageName - 这是您要为图像指定的名称。

  • TagName - 这是您要为图像添加的标签。

  • Dir - Docker 文件所在的目录。

返回值

没有任何

例子

sudo docker build –t myimage:0.1. 

在这里,myimage是我们为图像指定的名称,0.1是我们为图像指定的标签号。

由于 Docker 文件位于当前工作目录中,因此我们使用“.”。在命令末尾表示当前工作目录。

输出

从输出中,您首先会看到将从 Docker Hub 下载 Ubuntu 映像,因为计算机本地没有可用的映像。

没有图像

最后,当构建完成时,所有必要的命令都将在映像上运行。

命令在图像上运行

然后您将看到成功构建的消息和新镜像的 ID。当您运行 Docker images 命令时,您将能够看到新镜像。

内置消息和 ID

您现在可以从新镜像构建容器。

Docker - 公共存储库

公共存储库可用于托管可供其他人使用的 Docker 映像。Docker Hub 中提供的映像就是一个示例。大多数镜像(例如 Centos、Ubuntu 和 Jenkins)都是公开的。我们还可以通过将图像发布到 Docker Hub 上的公共存储库来提供图像。

对于我们的示例,我们将使用“构建 Docker 文件”一章中构建的myimage存储库,并将该映像上传到 Docker Hub。我们首先查看 Docker 主机上的映像,看看可以将哪些内容推送到 Docker 注册表。

我的形象

在这里,我们有myimage:0.1镜像,它是作为“构建 Docker 文件”一章的一部分创建的。让我们用它上传到 Docker 公共存储库。

以下步骤说明如何将图像上传到公共存储库。

步骤 1 - 登录 Docker Hub 并创建存储库。这是将存储您的图像的存储库。转到https://hub.docker.com/并使用您的凭据登录。

码头工人中心

步骤 2 - 单击上面屏幕上的“创建存储库”按钮,并创建一个名为demorep 的存储库。确保存储库的可见性是公开的。

德莫雷普

创建存储库后,记下附加到存储库的pull命令。

存储库

将在我们的存储库中使用的pull命令如下 -

docker pull demousr/demorep

步骤 3 - 现在返回 Docker 主机。在这里,我们需要将myimage标记到 Docker Hub 中创建的新存储库。我们可以通过 Docker tag 命令来做到这一点。

我们将在本章后面了解有关此标签命令的更多信息。

步骤 4 - 发出 Docker 登录命令,从命令提示符登录 Docker Hub 存储库。Docker 登录命令将提示您输入 Docker Hub 存储库的用户名和密码。

Docker登录命令

步骤 5 - 标记镜像后,就可以将镜像推送到 Docker Hub 存储库了。我们可以通过 Docker Push命令来完成此操作。我们将在本章后面详细了解该命令。

泊坞窗标签

此方法允许将图像标记到相关存储库。

句法

docker tag imageID Repositoryname 

选项

  • imageID - 这是需要标记到存储库的 ImageID。

  • Repositoryname - 这是 ImageID 需要标记到的存储库名称。

返回值

没有任何

例子

sudo docker tag ab0c1d3744dd demousr/demorep:1.0

输出

下面给出了上述示例的示例输出。

泊坞窗标签

码头工人推

此方法允许将镜像推送到 Docker Hub。

句法

docker push Repositoryname 

选项

  • Repositoryname - 这是需要推送到 Docker Hub 的存储库名称。

返回值

推送到 Docker Hub 的存储库的长 ID。

例子

sudo docker push demousr/demorep:1.0 

输出

Docker 推送

如果您返回 Docker Hub 页面并转到您的存储库,您将在存储库中看到标签名称。

存储库中的标签名称

现在让我们尝试将我们上传到 Docker 主机的存储库拉取。首先,我们从本地 Docker 主机中删除镜像myimage:0.1demousr/demorep:1.0 。让我们使用 Docker pull 命令从 Docker Hub 中提取存储库。

Docker 拉取命令

从上面的屏幕截图中,您可以看到 Docker pull命令已从 Docker Hub 获取我们的新存储库并将其放置在我们的计算机上。

Docker - 管理端口

在 Docker 中,容器本身可以让应用程序在端口上运行。当运行容器时,如果想通过端口号访问容器中的应用程序,需要将容器的端口号映射到Docker主机的端口号。让我们看一个如何实现这一目标的示例。

在我们的示例中,我们将从 Docker Hub 下载 Jenkins 容器。然后,我们将 Jenkins 端口号映射到 Docker 主机上的端口号。

步骤 1 - 首先,您需要在 Docker Hub 上进行简单的注册。

简单唱起来

步骤 2 - 注册后,您将登录 Docker Hub。

已记录的 Docker Hub

步骤 3 - 接下来,让我们浏览并找到 Jenkins 映像。

运行命令

步骤 4 - 如果您在同一页面上向下滚动,您可以看到 Docker pull命令。这将用于将 Jenkins 映像下载到本地 Ubuntu 服务器上。

本地 Ubuntu 服务器

第 5 步- 现在转到 Ubuntu 服务器并运行命令 -

sudo docker pull jenkins 

检查图像

步骤 6 - 要了解容器公开哪些端口,您应该使用 Docker检查命令来检查映像。

现在让我们了解有关此检查命令的更多信息。

码头工人检查

此方法允许返回有关容器或图像的低级信息。

句法

docker inspect Container/Image 

选项

  • Container/Image - 要检查的容器或图像

返回值

JSON 格式的镜像或容器的底层信息。

例子

sudo docker inspect jenkins 

输出

Docker 检查输出

检查命令的输出提供 JSON 输出。如果我们观察输出,我们可以看到有一个“ExposePorts”部分,并看到提到了两个端口。一个是8080的数据端口,一个是50000的控制端口

要运行 Jenkins 并映射端口,您需要更改 Docker运行命令并添加指定端口映射的“p”选项。因此,您需要运行以下命令 -

sudo docker run -p 8080:8080 -p 50000:50000 jenkins 

端口号映射的左侧是要映射到的 Docker 主机端口,右侧是 Docker 容器端口号。

当您打开浏览器并导航到端口 8080 上的 Docker 主机时,您将看到 Jenkins 已启动并正在运行。

解锁Jenkins

Docker - 私有注册表

您可能需要拥有自己的私有存储库。您可能不想在 Docker Hub 上托管存储库。为此,Docker 本身就有一个存储库容器。让我们看看如何下载并使用注册表容器。

步骤 1 - 使用 Docker run命令下载私有注册表。这可以使用以下命令来完成。

sudo docker run –d –p 5000:5000 –-name registry registry:2

关于上述命令需要注意以下几点 -

  • Registry是 Docker 管理的容器,可用于托管私有存储库。

  • 容器公开的端口号是 5000。因此,使用–p 命令,我们将相同的端口号映射到本地主机上的 5000 端口号。

  • 我们只是将注册表容器标记为“2”,以在 Docker 主机上区分它。

  • –d选项用于以分离模式运行容器。这样容器就可以在后台运行

分离模式

步骤 2 - 让我们执行docker ps来查看注册表容器确实正在运行。

码头工人PS

我们现在已经确认注册表容器确实正在运行。

步骤 3 - 现在让我们标记我们现有的图像之一,以便我们可以将其推送到我们的本地存储库。在我们的示例中,由于我们在本地有可用的centos映像,因此我们将其标记到我们的私有存储库并添加标记名称centos

sudo docker tag 67591570dd29 localhost:5000/centos 

关于上述命令需要注意以下几点 -

  • 67591570dd29指的是centos镜像的镜像 ID 。

  • localhost:5000是我们的私有存储库的位置。

  • 我们在私有存储库中将存储库名称标记为centos 。

私有存储库

步骤 4 - 现在让我们使用 Docker Push命令将存储库推送到我们的私有存储库。

sudo docker push localhost:5000/centos 

在这里,我们将centos映像推送到托管在localhost:5000 的私有存储库。

本地主机

步骤 5 - 现在让我们使用docker rmi命令删除centos的本地映像。然后我们可以从我们的私有存储库下载所需的centos镜像。

sudo docker rmi centos:latest 
sudo docker rmi 67591570dd29

Docker RMI 命令

步骤 6 - 现在我们的本地计算机上没有任何centos映像,我们现在可以使用以下 Docker pull命令从我们的私有存储库中拉取centos映像。

sudo docker pull localhost:5000/centos

在这里,我们将centos镜像拉取到localhost:5000托管的私有存储库。

拉取 Centos 镜像

如果您现在在系统上看到这些映像,您也会看到centos映像。

Docker - 构建 Web 服务器 Docker 文件

我们已经学习了如何使用 Docker File 构建我们自己的自定义映像。现在让我们看看如何构建可用于构建容器的 Web 服务器镜像。

在我们的示例中,我们将使用 Ubuntu 上的 Apache Web 服务器来构建我们的映像。让我们按照下面给出的步骤来构建我们的 Web 服务器 Docker 文件。

步骤 1 - 第一步是构建我们的 Docker 文件。让我们使用vim并使用以下信息创建一个 Docker 文件。

FROM ubuntu 
RUN apt-get update 
RUN apt-get install –y apache2 
RUN apt-get install –y apache2-utils 
RUN apt-get clean 
EXPOSE 80 CMD [“apache2ctl”, “-D”, “FOREGROUND”]

对于上述陈述,需要注意以下几点 -

  • 我们首先从 Ubuntu 基础镜像创建镜像。

  • 接下来,我们将使用 RUN 命令来更新 Ubuntu 系统上的所有软件包。

  • 接下来,我们使用 RUN 命令在我们的映像上安装 apache2。

  • 接下来,我们使用 RUN 命令在我们的映像上安装必要的实用程序 apache2 包。

  • 接下来,我们使用 RUN 命令清除系统中不需要的文件。

  • EXPOSE命令用于将容器中Apache的80端口暴露给Docker主机。

  • 最后使用CMD命令在后台运行apache2。

阿帕奇2

现在已输入文件详细信息,只需保存文件即可。

步骤 2 - 运行 Docker构建命令来构建 Docker 文件。可以使用以下命令来完成 -

sudo docker build –t=”mywebserver” . 

我们将图像标记为mywebserver。构建映像后,您将收到一条成功消息,表明文件已构建。

我的网络服务器

步骤 3 - 现在已经构建了 Web 服务器文件,现在是时候从图像创建容器了。我们可以使用 Docker run命令来完成此操作。

sudo docker run –d –p 80:80 mywebserver 

Docker 运行命令

关于上述命令需要注意以下几点 -

  • 容器公开的端口号是 80。因此,使用–p命令,我们将相同的端口号映射到本地主机上的 80 端口号。

  • –d选项用于以分离模式运行容器。这样容器就可以在后台运行。

如果您在 Web 浏览器中访问 Docker 主机的端口 80,您现在将看到 Apache 已启动并正在运行。

阿帕奇正在运行

Docker - 指令命令

Docker 有许多指令命令。这些是放入 Docker 文件中的命令。让我们看看有哪些可用的。

命令指令

该命令用于在容器执行时执行运行时的命令。

句法

CMD command param1 

选项

  • command - 这是启动容器时运行的命令。

  • param1 - 这是输入到命令的参数。

返回值

该命令将相应执行。

例子

在我们的示例中,我们将在 Docker 文件中输入一个简单的 Hello World echo,创建一个映像并从中启动一个容器。

步骤 1 - 使用以下命令构建 Docker 文件 -

FROM ubuntu 
MAINTAINER demousr@gmail.com 
CMD [“echo” , “hello world”] 

这里,CMD 只是用来打印hello world

指令管理系统

步骤 2 - 使用 Docker构建命令构建映像。

构建命令

步骤 3 - 从图像运行容器。

运行一个容器

入口点

此命令还可用于在运行时为容器执行命令。但我们可以使用 ENTRYPOINT 命令更加灵活。

句法

ENTRYPOINT command param1 

选项

  • command - 这是启动容器时运行的命令。

  • param1 - 这是输入到命令中的参数。

返回值

该命令将相应执行。

例子

让我们看一个示例来了解有关 ENTRYPOINT 的更多信息。在我们的示例中,我们将在 Docker 文件中输入一个简单的echo命令,创建一个映像并从中启动一个容器。

步骤 1 - 使用以下命令构建 Docker 文件 -

FROM ubuntu 
MAINTAINER demousr@gmail.com 
ENTRYPOINT [“echo”]

入口点

步骤 2 - 使用 Docker构建逗号构​​建镜像