
- Docker 教程
- Docker-主页
- Docker - 概述
- Docker - 在 Linux 上安装 Docker
- Docker - 安装
- Docker-集线器
- Docker - 图像
- Docker-容器
- Docker - 使用容器
- Docker-架构
- Docker - 容器和主机
- Docker - 配置
- Docker - 容器和外壳
- Docker-文件
- Docker - 构建文件
- Docker - 公共存储库
- Docker - 管理端口
- Docker - 私有注册表
- 构建 Web 服务器 Docker 文件
- Docker - 指令命令
- Docker - 容器链接
- Docker-存储
- Docker - 网络
- Docker - 设置 Node.js
- Docker - 设置 MongoDB
- Docker - 设置 NGINX
- Docker-工具箱
- Docker - 设置 ASP.Net
- Docker-云
- Docker-日志记录
- Docker-撰写
- Docker——持续集成
- Docker-Kubernetes 架构
- Docker - Kubernetes 的工作
- Docker 有用的资源
- Docker - 快速指南
- Docker - 有用的资源
- Docker - 讨论
Docker - 快速指南
Docker - 概述
Docker 是一种容器管理服务。Docker 的关键词是在任何地方开发、发布和运行。Docker 的整体理念是让开发人员轻松开发应用程序,将它们发送到容器中,然后可以部署在任何地方。
Docker 的首次发布于 2013 年 3 月,从那时起,它已成为现代世界开发的流行语,尤其是面对基于敏捷的项目。

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

步骤 4 - 下一步是添加新的 GPG 密钥。需要此密钥来确保在下载 Docker 所需的包时所有数据都经过加密。
以下命令将从密钥服务器hkp://ha.pool.sks-keyservers.net:80下载 ID 为 58118E89F3A912897C070ADBF76221572C52609D 的密钥并将其添加到adv钥匙串中。请注意,下载必要的 Docker 软件包需要此特定密钥。

步骤 5 - 接下来,根据您所拥有的 Ubuntu 版本,您需要将相关站点添加到apt 包管理器的docker.list中,以便能够从 Docker 站点检测到 Docker 包并下载他们相应地。
Precise 12.04 (LTS) ─ deb https://apt.dockerproject.org/repo ubuntu-precise main
Trusty 14.04 (LTS) ─ deb https://apt.dockerproject.org/repo/ubuntu-trusty main
Wily 15.10 ─ deb https://apt.dockerproject.org/repo ubuntu-wily main
Xenial 16.04 (LTS) - https://apt.dockerproject.org/repo ubuntu-xenial main
由于我们的操作系统是 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 系统上的软件包。

步骤 7 - 如果您想验证包管理器是否指向正确的存储库,您可以通过发出apt-cache 命令来完成。
apt-cache policy docker-engine
在输出中,您将获得https://apt.dockerproject.org/repo/的链接

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

步骤 9 - 对于 Ubuntu Trusty、Wily 和 Xenial,我们必须安装 linux-image-extra-* 内核包,它允许使用 aufs存储驱动程序。新版本的 Docker 使用此驱动程序。
可以使用以下命令来完成。
sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual

步骤 10 - 最后一步是安装 Docker,我们可以使用以下命令来完成此操作 -
sudo apt-get install –y docker-engine
在这里,apt-get使用安装选项从 Docker 网站下载 Docker 引擎映像并安装 Docker。
Docker-engine 是 Docker Corporation 为基于 Ubuntu 的系统提供的官方软件包。

在下一节中,我们将了解如何检查已安装的 Docker 版本。
Docker版本
要查看正在运行的 Docker 版本,您可以发出以下命令 -
句法
docker version
选项
version - 用于确保 Docker 命令返回安装的 Docker 版本。
返回值
输出将提供系统上安装的 Docker 版本的各种详细信息。
例子
sudo docker version
输出
当我们运行上面的程序时,我们将得到以下结果 -

码头工人信息
要查看有关系统上运行的 Docker 的更多信息,您可以发出以下命令 -
句法
docker info
选项
info - 用于确保 Docker 命令返回已安装的 Docker 服务的详细信息。
返回值
输出将提供系统上安装的 Docker 的各种详细信息,例如 -
- 集装箱数量
- 图片数量
- Docker使用的存储驱动
- Docker使用的根目录
- Docker使用的执行驱动
例子
sudo docker info
输出
当我们运行上面的命令时,我们将得到以下结果 -

适用于 Windows 的 Docker
Docker 对 Windows 提供开箱即用的支持,但您需要进行以下配置才能安装适用于 Windows 的 Docker。
系统要求
Windows操作系统 | Windows 10 64 位 |
记忆 | 2 GB 内存(推荐) |
您可以从https://docs.docker.com/docker-for-windows/下载适用于 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 - 安装
让我们来看看每个产品的安装。
适用于 Windows 的 Docker
下载安装程序后,双击它启动安装程序,然后按照以下步骤操作。
步骤 1 - 单击协议条款,然后单击安装按钮继续安装。

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

Docker工具箱
下载安装程序后,双击它启动安装程序,然后按照以下步骤操作。
步骤 1 - 单击开始屏幕上的“下一步”按钮。

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

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

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

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

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

接下来,您将看到 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作为容器运行。
输出
当我们运行上面的命令时,我们将得到以下结果 -

如果您想在 Windows 上运行 Ubuntu 操作系统,可以使用以下命令下载 Ubuntu 映像 -
Docker run –it ubuntu bash
在这里,您通过–it选项告诉 Docker 以交互模式运行命令。

在输出中,您可以看到 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 上进行简单的注册。

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

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

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

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

要运行 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
输出
当我们运行上面的命令时,它将产生以下结果 -

从上面的输出中,您可以看到服务器有三个镜像:centos、newcentos和jenkins。每个图像都有以下属性 -
TAG - 用于逻辑标记图像。
图像 ID - 用于唯一标识图像。
创建时间- 自创建图像以来的天数。
虚拟尺寸- 图像的尺寸。
下载 Docker 镜像
可以使用 Docker run命令从 Docker Hub 下载镜像。让我们详细看看如何做到这一点。
句法
以下语法用于在 Docker 容器中运行命令。
docker run image
选项
图像- 这是用于运行容器的图像的名称。
返回值
输出将在所需的容器中运行命令。
例子
sudo docker run centos
此命令将下载centos映像(如果尚不存在),并将操作系统作为容器运行。
输出
当我们运行上面的命令时,我们将得到以下结果 -

您现在将看到下载的 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 镜像-q
此命令用于仅返回图像的图像 ID。
句法
docker images
选项
q - 它告诉 Docker 命令仅返回图像 ID。
返回值
输出将仅显示 Docker 主机上映像的映像 ID。
例子
sudo docker images -q
输出
当我们运行上面的命令时,它将产生以下结果 -

码头工人检查
该命令用于查看镜像或容器的详细信息。
句法
docker inspect Repository
选项
存储库- 这是图像的名称。
返回值
输出将显示图像的详细信息。
例子
sudo docker inspect jenkins
输出
当我们运行上面的命令时,它将产生以下结果 -

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
输出
当我们运行上面的命令时,它将产生以下结果 -

码头工人历史
使用此命令,您可以查看通过容器使用映像运行的所有命令。
句法
docker history ImageID
选项
ImageID - 这是您想要查看针对其运行的所有命令的图像 ID。
返回值
输出将显示针对该映像运行的所有命令。
例子
sudo docker history centos
上面的命令将显示针对centos映像运行的所有命令。
输出
当我们运行上面的命令时,它将产生以下结果 -

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 stats ContainerID
选项
ContainerID - 这是需要提供统计信息的容器 ID。
返回值
输出将显示容器的 CPU 和内存利用率。
例子
sudo docker stats 9f215ed0b0d3
上述命令将提供容器9f215ed0b0d3的 CPU 和内存利用率。
输出
当我们运行上面的命令时,它将产生以下结果 -

码头工人附加
此命令用于附加到正在运行的容器。
句法
docker attach ContainerID
选项
ContainerID - 这是您需要附加的容器 ID。
返回值
没有任何
例子
sudo docker attach 07b0b6f434fe
上面的命令将附加到 Docker 容器07b0b6f434fe。
输出
当我们运行上面的命令时,它将产生以下结果 -

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

码头工人暂停
该命令用于暂停正在运行的容器中的进程。
句法
docker pause ContainerID
选项
ContainerID - 这是您需要暂停容器中进程的容器 ID。
返回值
暂停容器的ContainerID。
例子
sudo docker pause 07b0b6f434fe
上述命令将暂停正在运行的容器07b0b6f434fe中的进程。
输出
当我们运行上面的命令时,它将产生以下结果 -

码头工人取消暂停
此命令用于取消暂停正在运行的容器中的进程。
句法
docker unpause ContainerID
选项
ContainerID - 这是您需要取消暂停容器中进程的容器 ID。
返回值
正在运行的容器的ContainerID。
例子
sudo docker unpause 07b0b6f434fe
上述命令将取消暂停正在运行的容器中的进程:07b0b6f434fe
输出
当我们运行上面的命令时,它将产生以下结果 -

码头工人杀死
该命令用于终止正在运行的容器中的进程。
句法
docker kill ContainerID
选项
ContainerID - 这是您需要终止容器中进程的容器 ID。
返回值
正在运行的容器的ContainerID。
例子
sudo docker kill 07b0b6f434fe
上面的命令将杀死正在运行的容器07b0b6f434fe中的进程。
输出
当我们运行上面的命令时,它将产生以下结果 -

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镜像命令。

从这里,我们可以看到我们有两个图像 - ubuntu和hello-world。
运行容器
现在让我们在 Windows Docker 主机中运行一个容器。

我们可以看到,通过运行容器,我们现在可以在Windows主机上运行Ubuntu容器了。
列出所有容器
让我们列出 Windows 主机上的所有容器。

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

因此,您可以看到 Docker 引擎在不同的 Docker 主机上非常一致,并且它在 Windows 上的工作方式与在 Linux 上的工作方式相同。
Docker - 配置
在本章中,我们将了解配置 Docker 的不同选项。
服务泊坞窗停止
该命令用于停止 Docker守护进程。
句法
service docker stop
选项
没有任何
返回值
显示 Docker 进程已停止的消息。
例子
sudo service docker stop
输出
当我们运行上面的命令时,它将产生以下结果 -

服务 docker 启动
该命令用于启动Docker daemon进程。
句法
service docker start
选项
没有任何
返回值
显示 Docker 进程已启动的消息。
例子
sudo service docker start
输出
当我们运行上面的命令时,它将产生以下结果 -

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 images命令,我们可以看到系统中现有的镜像。从上面的截图中,我们可以看到有两个镜像:centos和nsenter。
但是 Docker 还使您能够创建自己的 Docker 映像,并且可以在Docker Files的帮助下完成。Docker 文件是一个简单的文本文件,其中包含有关如何构建映像的说明。
以下步骤说明了如何创建 Docker 文件。
步骤 1 - 创建一个名为Docker File 的文件并使用vim对其进行编辑。请注意,文件名必须是“Dockerfile”,其中“D”大写。

步骤 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 命令时,您将能够看到新镜像。

您现在可以从新镜像构建容器。
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 存储库的用户名和密码。

步骤 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 Hub 页面并转到您的存储库,您将在存储库中看到标签名称。

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

从上面的屏幕截图中,您可以看到 Docker pull命令已从 Docker Hub 获取我们的新存储库并将其放置在我们的计算机上。
Docker - 管理端口
在 Docker 中,容器本身可以让应用程序在端口上运行。当运行容器时,如果想通过端口号访问容器中的应用程序,需要将容器的端口号映射到Docker主机的端口号。让我们看一个如何实现这一目标的示例。
在我们的示例中,我们将从 Docker Hub 下载 Jenkins 容器。然后,我们将 Jenkins 端口号映射到 Docker 主机上的端口号。
步骤 1 - 首先,您需要在 Docker Hub 上进行简单的注册。

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

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

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

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

步骤 6 - 要了解容器公开哪些端口,您应该使用 Docker检查命令来检查映像。
现在让我们了解有关此检查命令的更多信息。
码头工人检查
此方法允许返回有关容器或图像的低级信息。
句法
docker inspect Container/Image
选项
Container/Image - 要检查的容器或图像
返回值
JSON 格式的镜像或容器的底层信息。
例子
sudo docker inspect jenkins
输出

检查命令的输出提供 JSON 输出。如果我们观察输出,我们可以看到有一个“ExposePorts”部分,并看到提到了两个端口。一个是8080的数据端口,一个是50000的控制端口。
要运行 Jenkins 并映射端口,您需要更改 Docker运行命令并添加指定端口映射的“p”选项。因此,您需要运行以下命令 -
sudo docker run -p 8080:8080 -p 50000:50000 jenkins
端口号映射的左侧是要映射到的 Docker 主机端口,右侧是 Docker 容器端口号。
当您打开浏览器并导航到端口 8080 上的 Docker 主机时,您将看到 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来查看注册表容器确实正在运行。

我们现在已经确认注册表容器确实正在运行。
步骤 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

步骤 6 - 现在我们的本地计算机上没有任何centos映像,我们现在可以使用以下 Docker pull命令从我们的私有存储库中拉取centos映像。
sudo docker pull localhost:5000/centos
在这里,我们将centos镜像拉取到localhost:5000托管的私有存储库。

如果您现在在系统上看到这些映像,您也会看到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 - 运行 Docker构建命令来构建 Docker 文件。可以使用以下命令来完成 -
sudo docker build –t=”mywebserver” .
我们将图像标记为mywebserver。构建映像后,您将收到一条成功消息,表明文件已构建。

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

关于上述命令需要注意以下几点 -
容器公开的端口号是 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构建逗号构建镜像