Docker – 快速指南
Docker – 快速指南
Docker – 概述
Docker 是一个容器管理服务。Docker 的关键词是在任何地方开发、发布和运行。Docker 的整个理念是让开发人员轻松开发应用程序,将它们传送到可以部署在任何地方的容器中。
Docker 于 2013 年 3 月首次发布,从那时起,它就成为现代世界开发的流行语,尤其是在面对基于敏捷的项目时。
码头工人的特点
-
Docker 能够通过容器提供更小的操作系统占用空间,从而减少开发规模。
-
借助容器,跨不同部门(例如开发、QA 和运营)的团队可以更轻松地跨应用程序无缝工作。
-
您可以在任何物理和虚拟机甚至云上的任何地方部署 Docker 容器。
-
由于 Docker 容器非常轻量级,因此它们非常容易扩展。
Docker 的组件
Docker 有以下组件
-
Docker for Mac – 它允许在 Mac OS 上运行 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 实例,以防您还没有它。
以下屏幕截图显示了一个简单的 Ubuntu 服务器,它已安装在 Oracle Virtual Box 上。在系统上定义了一个名为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
输出
当我们运行上面的命令时,我们将得到以下结果 –
此命令将连接到 Internet 并下载适用于 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-engine 映像并安装 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 提供开箱即用的支持,但您需要进行以下配置才能安装 Docker for Windows。
系统要求
Windows OS | 视窗 10 64 位 |
Memory | 2 GB RAM(推荐) |
您可以从以下位置下载适用于 Windows 的 Docker – https://docs.docker.com/docker-for-windows/
Docker 工具箱
Docker ToolBox 是为旧版本的 Windows 设计的,例如 Windows 8.1 和 Windows 7。为了安装 Docker for Windows,您需要具有以下配置。
系统要求
Windows OS | 视窗 7、8、8.1 |
Memory | 2 GB RAM(推荐) |
Virtualization | 这应该被启用。 |
您可以从以下位置下载 Docker 工具箱 – https://www.docker.com/products/docker-toolbox
Docker – 安装
让我们来看看每个产品的安装。
适用于 Windows 的 Docker
下载安装程序后,双击它以启动安装程序,然后按照以下步骤操作。
步骤 1 – 单击协议条款,然后单击安装按钮继续安装。
步骤 2 – 完成后,单击“完成”按钮完成安装。
Docker 工具箱
下载安装程序后,双击它以启动安装程序,然后按照以下步骤操作。
步骤 1 – 单击开始屏幕上的下一步按钮。
步骤 2 – 在下一个屏幕上保留默认位置,然后单击下一步按钮。
步骤 3 – 保留默认组件并单击下一步按钮继续。
步骤 4 – 保持其他任务不变,然后单击下一步按钮。
步骤 5 – 在最后一个屏幕上,单击安装按钮。
使用 Docker 工具箱
现在让我们看看如何使用 Docker Toolbox 来处理 Windows 上的 Docker 容器。第一步是在安装 Docker 工具箱时,在桌面启动为其创建了快捷方式的 Docker 工具箱应用程序。
接下来,您将看到启动 Docker 工具箱时正在执行的配置。
完成后,您将看到 Docker 已配置并启动。您将获得 Docker 的交互式 shell。
为了测试 Docker 是否正常运行,我们可以使用 Docker run 命令下载并运行一个简单的HelloWorld Docker 容器。
Docker运行命令的工作如下 –
docker run
此命令用于在 Docker 容器中运行命令。
句法
docker run image
选项
-
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 中心。在本章中,我们将看到如何从 Docker hub 下载和使用 Jenkins Docker 镜像。
Docker 中心的官方网站是 – https://www.docker.com/community-edition#/add_ons
第 1 步– 首先,您需要在 Docker 集线器上进行简单的注册。
第 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 程序需要做一些事情。
-
在运行命令用于提的是,我们要创建一个图像,然后将其称为一个实例的容器。
-
最后,“hello-world”代表制作容器的镜像。
现在让我们看看如何使用 Docker Hub 中可用的 CentOS 映像在我们的 Ubuntu 机器上运行 CentOS。我们可以通过在我们的 Ubuntu 机器上执行以下命令来做到这一点 –
sudo docker run centos –it /bin/bash
请注意有关上述sudo命令的以下几点–
-
我们使用sudo命令来确保它以root访问权限运行。
-
这里,centos是我们想要从 Docker Hub 下载并安装在我们的 Ubuntu 机器上的镜像的名称。
-
─用来表示我们要以交互模式运行。
-
一旦 CentOS 启动并运行,/bin/bash用于运行 bash shell。
显示 Docker 镜像
要查看系统上的 Docker 镜像列表,您可以发出以下命令。
docker images
该命令用于显示系统当前安装的所有镜像。
句法
docker images
选项
没有任何
返回值
输出将提供系统上的图像列表。
例子
sudo docker images
输出
当我们运行上面的命令时,它会产生以下结果 –
从上面的输出中,可以看到服务器有三个镜像:centos、newcentos和jenkins。每个图像具有以下属性 –
-
TAG – 用于在逻辑上标记图像。
-
图像 ID – 用于唯一标识图像。
-
Created – 自创建图像以来的天数。
-
虚拟大小– 图像的大小。
下载 Docker 镜像
可以使用 Docker run命令从 Docker Hub 下载图像。让我们详细看看我们如何做到这一点。
句法
以下语法用于在 Docker 容器中运行命令。
docker run image
选项
-
Image – 这是用于运行容器的图像的名称。
返回值
输出将在所需的容器中运行命令。
例子
sudo docker run centos
此命令将下载centos映像(如果尚不存在),并将操作系统作为容器运行。
输出
当我们运行上面的命令时,我们将得到以下结果 –
您现在将看到下载的 CentOS Docker 映像。现在,如果我们运行 Docker镜像命令来查看系统上的镜像列表,我们应该也能看到centos镜像。
删除 Docker 镜像
系统上的 Docker 镜像可以通过docker rmi命令删除。让我们更详细地看一下这个命令。
docker rmi
此命令用于删除 Docker 镜像。
句法
docker rmi ImageID
选项
-
ImageID – 这是需要删除的图像的 ID。
返回值
输出将提供已删除图像的图像 ID。
例子
sudo docker rmi 7a86f8ffcb25
这里7a86f8ffcb25是newcentos镜像的镜像 ID 。
输出
当我们运行上面的命令时,它会产生以下结果 –
让我们看看更多关于镜像的 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,您将返回到您的操作系统外壳。
然后,您将在 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 pause命令用于暂停现有的 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 守护进程。
句法
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 inspect 命令获取进程 ID,并通过Pid对其进行过滤。
如上图所示,我们首先使用docker ps命令查看正在运行的容器。我们可以看到有一个ID为ef42a4c5e663的正在运行的容器。
然后我们使用 Docker inspect命令来检查这个容器的配置,然后使用grep命令来过滤进程 ID。从输出中,我们可以看到进程 ID 是 2978。
现在我们有了进程 ID,我们可以继续前进并使用nsenter命令附加到 Docker 容器。
输入
这种方法允许在不退出容器的情况下附加到容器。
句法
nsenter –m –u –n –p –i –t containerID 命令
选项
-
-u用于提及Uts 命名空间
-
-m用于提及挂载命名空间
-
-n用于提及网络命名空间
-
-p用于提及进程命名空间
-
-i s 使容器以交互模式运行。
-
-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镜像命令,我们可以看到我们系统中现有的镜像。从上面的截图中,我们可以看到有两个图像:centos和nsenter。
但是 Docker 也让你能够创建自己的 Docker 镜像,这可以在Docker Files的帮助下完成。Docker 文件是一个简单的文本文件,其中包含有关如何构建映像的说明。
以下步骤解释了您应该如何创建 Docker 文件。
Step 1 – 创建一个名为Docker File 的文件并使用vim编辑它。请注意,文件名必须是“Dockerfile”,“D”为大写。
第 2 步– 使用以下说明构建您的 Docker 文件。
#This is a sample Image FROM ubuntu MAINTAINER [email protected] 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 文件位于当前工作目录中,因此我们使用了“.”。在命令的末尾表示当前的工作目录。
输出
从输出中,您首先会看到 Ubuntu 镜像将从 Docker Hub 下载,因为机器上没有本地可用的镜像。
最后,当构建完成时,所有必要的命令都将在映像上运行。
然后您将看到成功构建的消息和新图像的 ID。当您运行 Docker镜像命令时,您将能够看到您的新镜像。
您现在可以从新镜像构建容器。
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 login 命令以从命令提示符登录到 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 inspect 命令来检查图像。
现在让我们了解有关此检查命令的更多信息。
码头工人检查
此方法允许返回有关容器或图像的低级信息。
句法
docker inspect Container/Image
选项
-
Container/Image – 要检查的容器或图像
返回值
JSON 格式的图像或容器的低级信息。
例子
sudo docker inspect jenkins
输出
的输出检查命令给出一个JSON输出。如果我们观察输出,我们可以看到有一段“ExposedPorts”,看到提到了两个端口。一个是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 build命令来构建 Docker 文件。可以使用以下命令完成 –
sudo docker build –t=”mywebserver” .
我们将我们的图像标记为mywebserver。构建映像后,您将收到一条成功消息,表明文件已构建。
第 3 步– 现在已经构建了 Web 服务器文件,现在是从图像创建容器的时候了。我们可以使用 Docker运行命令来做到这一点。
sudo docker run –d –p 80:80 mywebserver
关于上述命令需要注意以下几点 –
-
容器公开的端口号是 80。因此,使用–p命令,我们将相同的端口号映射到本地主机上的 80 端口号。
-
该-d选项用于运行分离模式的容器。这是为了容器可以在后台运行。
如果您在 Web 浏览器中访问 Docker 主机的端口 80,您现在将看到 Apache 已启动并正在运行。
Docker – 指令命令
Docker 有很多指令命令。这些是放在 Docker 文件中的命令。让我们看看那些可用的。
CMD指令
此命令用于在执行容器时在运行时执行命令。
句法
CMD command param1
选项
-
command – 这是启动容器时运行的命令。
-
param1 – 这是输入到命令中的参数。
返回值
该命令将相应地执行。
例子
在我们的示例中,我们将在 Docker 文件中输入一个简单的
Hello World回声,然后创建一个映像并从中启动一个容器。
步骤 1 – 使用以下命令构建 Docker 文件 –
FROM ubuntu MAINTAINER [email protected] CMD [“echo” , “hello world”]
在这里, CMD 只是用来打印hello world。
第 2 步– 使用 Docker build命令构建镜像。
第 3 步– 从图像运行容器。
入口点
此命令还可用于在运行时为容器执行命令。但是我们可以更灵活地使用 ENTRYPOINT 命令。
句法
ENTRYPOINT command param1
选项
-
command – 这是启动容器时运行的命令。
-
param1 – 这是输入到命令中的参数。
返回值
该命令将相应地执行。
例子
让我们看一个例子来了解更多关于 ENTRYPOINT 的信息。在我们的示例中,我们将在 Docker 文件中输入一个简单的echo命令并创建一个映像并从中启动一个容器。
步骤 1 – 使用以下命令构建 Docker 文件 –
FROM ubuntu MAINTAINER [email protected] ENTRYPOINT [“echo”]
第 2 步– 使用 Docker build命令构建镜像。
第 3 步– 从图像运行容器。
环境评价
该命令用于在容器中设置环境变量。
句法
ENV key value
选项
-
Key – 这是环境变量的关键。
-
value – 这是环境变量的值。
返回值
该命令将相应地执行。
例子
在我们的示例中,我们将在 Docker 文件中输入一个简单的echo命令并创建一个映像并从中启动一个容器。
步骤 1 – 使用以下命令构建 Docker 文件 –
FROM ubuntu MAINTAINER [email protected] ENV var1=Tutorial var2=point
第 2 步– 使用 Docker build命令构建镜像。
第 3 步– 从图像运行容器。
步骤 4 – 最后,执行env命令以查看环境变量。
工作目录
该命令用于设置容器的工作目录。
句法
WORKDIR dirname
选项
-
dirname – 新的工作目录。如果目录不存在,则会添加。
返回值
该命令将相应地执行。
例子
在我们的示例中,我们将在 Docker 文件中输入一个简单的echo命令并创建一个映像并从中启动一个容器。
步骤 1 – 使用以下命令构建 Docker 文件 –
FROM ubuntu MAINTAINER [email protected] WORKDIR /newtemp CMD pwd
第 2 步– 使用 Docker build命令构建镜像。
第 3 步– 从图像运行容器。
Docker – 容器链接
容器链接允许多个容器相互链接。这是比公开端口更好的选择。让我们一步一步地了解它是如何工作的。
第 1 步– 使用 Jenkins pull命令下载 Jenkins 镜像(如果它不存在)。
第 2 步– 一旦图像可用,运行容器,但这一次,您可以使用–name选项为容器指定一个名称。这将是我们的源容器。
第 3 步– 接下来,是时候启动目标容器了,但这一次,我们将把它与我们的源容器链接起来。对于我们的目标容器,我们将使用标准的 Ubuntu 映像。
当您执行docker ps 时,您将看到两个容器都在运行。
步骤 4 – 现在,附加到接收容器。
然后运行env命令。您会注意到用于链接源容器的新变量。
Docker – 存储
存储驱动程序
Docker 有多个存储驱动程序,允许一个与底层存储设备一起工作。下表显示了不同的存储驱动程序以及用于存储驱动程序的技术。
Technology | 存储驱动程序 |
---|---|
OverlayFS | 叠加或叠加2 |
AUFS | aufs |
Btrfs | brtfs |
Device Manager | 装置经理 |
VFS | 虚拟现实 |
ZFS | zfs |
现在让我们讨论一些您将使用各种存储驱动程序的实例 –
澳大利亚金融服务协会
-
这是一个稳定的驱动程序;可用于生产就绪的应用程序。
-
它具有良好的内存使用率,有利于确保容器的流畅 Docker 体验。
-
应该考虑与此驱动程序相关的高写入活动。
-
它适用于平台即服务类型工作的系统。
设备映射器
-
这是一个稳定的驱动程序;确保流畅的 Docker 体验。
-
此驱动程序适用于在实验室中测试应用程序。
-
该驱动程序符合主要的 Linux 内核功能。
Btrfs
-
该驱动程序符合主要的 Linux 内核功能。
-
应该考虑与此驱动程序相关的高写入活动。
-
此驱动程序适用于您维护多个构建池的情况。
叠加
-
这是一个稳定的驱动程序,它符合主要的 Linux 内核功能。
-
它具有良好的内存使用率。
-
此驱动程序适用于在实验室中测试应用程序。
ZFS
-
这是一个稳定的驱动程序,非常适合在实验室中测试应用程序。
-
它适用于平台即服务类型工作的系统。
要查看正在使用的存储驱动程序,请发出docker info命令。
句法
docker info
选项
没有任何
返回值
该命令将提供有关安装在 Docker 主机上的 Docker 组件的所有相关信息。
例子
sudo docker info
输出
以下输出显示使用的主要驱动程序是aufs驱动程序,并且根目录存储在/var/lib/docker/aufs 中。
数据量
在 Docker 中,您有一个可以跨容器共享的单独卷。这些被称为数据量。数据量的一些特征是 –
- 它们在创建容器时被初始化。
- 它们可以在许多容器之间共享和重用。
- 可以直接对卷本身进行任何更改。
- 即使在容器被删除后它们仍然存在。
让我们看看我们的 Jenkins 容器。让我们做一个docker inspect来查看这个图像的细节。我们可以发出以下命令将docker inspect命令的输出写入文本文件,然后相应地查看该文件。
sudo docker inspect Jenkins > tmp.txt
当您使用more 命令查看文本文件时,您将看到一个条目为JENKINS_HOME=/var/Jenkins_home。
这是通过 Jenkins 映像在容器内完成的映射。
现在假设您想将容器中的卷映射到本地卷,那么您需要在启动容器时指定 –v 选项。一个例子如下所示 –
sudo docker run –d –v /home/demo:/var/jenkins_home –p 8080:8080 –p 50000:50000 jenkins
–v 选项用于将容器中的卷/var/jenkins_home 映射到我们的 Docker 主机上的位置/home/demo。
现在,如果您在启动容器后转到Docker 主机上的/home/demo位置,您将看到那里存在的所有容器文件。
更改容器的存储驱动程序
如果要更改用于容器的存储驱动程序,可以在启动容器时进行。这可以通过在使用docker run命令时使用–volume-driver参数来完成。下面给出了一个例子 –
sudo docker run –d --volume-driver=flocker –v /home/demo:/var/jenkins_home –p 8080:8080 –p 50000:50000 jenkins
该-volume驱动器选项用于指定容器中其他存储驱动器。
要确认驱动已经更改,首先我们使用docker ps命令查看正在运行的容器并获取容器 ID。因此,首先发出以下命令 –
sudo docker ps
然后对容器发出docker inspect并使用命令将输出放入文本文件中。
sudo docker inspect 9bffb1bfebee > temp.txt
如果您浏览文本文件并转到显示VolumeDriver的行,您将看到驱动程序名称已更改。
创建卷
可以使用docker命令预先创建卷。让我们了解有关此命令的更多信息。
句法
docker volume create –-name=volumename –-opt options
选项
-
name – 这是需要创建的卷的名称。
-
opt – 这些是您在创建卷时可以提供的选项。
返回值
该命令将输出创建的卷的名称。
例子
sudo docker volume create –-name = demo –opt o = size = 100m
在上面的命令中,我们创建了一个大小为 100MB 且名为 demo 的卷。
输出
上述命令的输出如下所示 –
列出所有卷
您还可以列出docker 主机上的所有docker 卷。下面给出了有关此命令的更多详细信息 –
句法
docker volume ls
选项
没有任何
返回值
该命令将输出docker 主机上的所有卷。
例子
sudo docker volume ls
输出
上述命令的输出如下所示 –
Docker – 网络
Docker 负责网络方面的工作,以便容器可以与其他容器以及 Docker 主机进行通信。如果您在 Docker 主机上执行ifconfig,您将看到 Docker 以太网适配器。这个适配器是在 Docker 主机上安装 Docker 时创建的。
这是 Docker Host 和 Linux Host 之间的桥梁。现在让我们看一些与 Docker 中的网络相关的命令。
列出所有 Docker 网络
此命令可用于列出主机上与 Docker 关联的所有网络。
句法
docker network ls
选项
没有任何
返回值
该命令将输出 Docker 主机上的所有网络。
例子
sudo docker network ls
输出
上述命令的输出如下所示
检查 Docker 网络
如果要查看与 Docker 关联的网络的更多详细信息,可以使用 Docker network inspect命令。
句法
docker network inspect networkname
选项
-
networkname – 这是您需要检查的网络的名称。
返回值
该命令将输出有关网络的所有详细信息。
例子
sudo docker network inspect bridge
输出
上述命令的输出如下所示 –
现在让我们运行一个容器,看看当我们再次检查网络时会发生什么。让我们使用以下命令启动一个 Ubuntu 容器 –
sudo docker run –it ubuntu:latest /bin/bash
现在,如果我们通过以下命令检查我们的网络名称,您现在将看到容器已连接到网桥。
sudo docker network inspect bridge
创建您自己的新网络
可以在启动容器之前在 Docker 中创建一个网络。这可以通过以下命令完成 –
句法
docker network create –-driver drivername name
选项
-
drivername – 这是用于网络驱动程序的名称。
-
name – 这是网络的名称。
返回值
该命令将输出新网络的长 ID。
例子
sudo docker network create –-driver bridge new_nw
输出
上述命令的输出如下所示 –
您现在可以在启动容器时附加新网络。因此,让我们使用以下命令启动一个 Ubuntu 容器 –
sudo docker run –it –network=new_nw ubuntu:latest /bin/bash
现在,当您通过以下命令检查网络时,您将看到连接到网络的容器。
sudo docker network inspect new_nw
Docker – 设置 Node.js
Node.js 是一个 JavaScript 框架,用于开发服务器端应用程序。它是一个开源框架,开发用于在各种操作系统上运行。由于 Node.js 是一个流行的开发框架,Docker 也确保它支持 Node.js 应用程序。
我们现在将看到启动和运行 Node.js 的 Docker 容器的各个步骤。
Step 1 – 第一步是从 Docker Hub 拉取镜像。当您登录 Docker Hub 时,您将能够搜索并查看 Node.js 的图像,如下所示。只需在搜索框中输入节点,然后单击搜索结果中出现的节点(官方)链接。
第 2 步– 您将在 Docker Hub 的存储库详细信息中看到节点的 Docker pull命令。
第 3 步– 在 Docker 主机上,使用如上所示的 Docker pull命令从 Docker Hub 下载最新的节点映像。
一旦拉动完成,我们就可以继续下一步。
第 4 步– 在 Docker 主机上,让我们使用vim编辑器并创建一个 Node.js 示例文件。在这个文件中,我们将添加一个简单的命令来在命令提示符中显示“HelloWorld”。
在 Node.js 文件中,让我们添加以下语句 –
Console.log(‘Hello World’);
当我们通过 Node.js 运行它时,这将输出“Hello World”短语。
确保保存文件,然后继续下一步。
第 5 步– 要使用 Node Docker 容器运行我们的 Node.js 脚本,我们需要执行以下语句 –
sudo docker run –it –rm –name = HelloWorld –v “$PWD”:/usr/src/app –w /usr/src/app node node HelloWorld.js
关于上述命令需要注意以下几点 –
-
该-rm选项用于它运行后删除的容器。
-
我们为容器命名为“HelloWorld”。
-
我们提到将/usr/src/app容器中的卷映射到我们当前的工作目录。这样做是为了让节点容器获取我们的 HelloWorld.js 脚本,该脚本位于 Docker 主机上的工作目录中。
-
该-w选项用于指定由Node.js的使用的工作目录
-
第一个节点选项用于指定运行节点映像。
-
第二个节点选项用于提及在节点容器中运行节点命令。
-
最后我们提到了我们脚本的名称。
然后我们将得到以下输出。从输出中,我们可以清楚地看到 Node 容器作为容器运行并执行了 HelloWorld.js 脚本。
Docker – 设置 MongoDB
MongoDB 是著名的面向文档的数据库,许多现代 Web 应用程序都在使用它。由于 MongoDB 是一种流行的开发数据库,Docker 也确保它支持 MongoDB。
我们现在将看到启动和运行 MongoDB 的 Docker 容器的各个步骤。
Step 1 – 第一步是从 Docker Hub 拉取镜像。当您登录 Docker Hub 时,您将能够搜索并查看 Mongo 的图像,如下所示。只需在搜索框中输入 Mongo,然后单击搜索结果中出现的 Mongo(官方)链接。
第 2 步– 您将在 Docker Hub 的存储库详细信息中看到Mongo的 Docker pull命令。
第 3 步– 在 Docker 主机上,使用如上所示的 Docker pull命令从 Docker Hub 下载最新的 Mongo 映像。
第 4 步– 现在我们有了 Mongo 的镜像,让我们首先运行一个 MongoDB 容器,它将成为我们的 MongoDB 实例。为此,我们将发出以下命令 –
sudo docker run -it -d mongo
关于上述命令可以注意以下几点 –
-
该-IT选项用于在交互模式的容器。
-
该-d选项用来运行容器作为一个守护进程。
-
最后我们从 Mongo 镜像创建一个容器。
然后,您可以发出docker ps命令来查看正在运行的容器 –
请注意以下几点 –
-
容器的名称是ender_poitras。此名称将有所不同,因为在启动容器时容器的名称会不断更改。但只需记下您启动的容器。
-
接下来,还要注意它运行的端口号。它正在侦听 TCP 端口 27017。
第 5 步– 现在让我们启动另一个容器,它将充当我们的客户端,用于连接到 MongoDB 数据库。让我们为此发出以下命令 –
sudo docker run –it –link=tender_poitras:mongo mongo /bin/bash
关于上述命令可以注意以下几点 –
-
该-IT选项用于在交互模式的容器。
-
我们现在将我们的新容器链接到已经启动的 MongoDB 服务器容器。在这里,您需要提及已启动容器的名称。
-
然后我们指定我们要启动 Mongo 容器作为我们的客户端,然后在我们的新容器中运行bin/bash shell。
您现在将位于新容器中。
步骤 6 –在新容器中运行env命令以查看如何连接到 MongoDB 服务器容器的详细信息。
第 6 步– 现在是从客户端容器连接到 MongoDB 服务器的时候了。我们可以通过以下命令来做到这一点 –
mongo 172.17.0.2:27017
上述命令需要注意以下几点
-
的蒙戈命令是客户端蒙戈是,用于连接到MongoDB数据库命令。
-
IP 和端口号是您使用env命令时获得的。
运行该命令后,您将连接到 MongoDB 数据库。
然后,您可以在命令提示符下运行任何 MongoDB 命令。在我们的示例中,我们正在运行以下命令 –
use demo
该命令是 MongoDB 命令,用于切换到数据库名称demo。如果数据库不可用,它将被创建。
现在您已成功创建客户端和服务器 MongoDB 容器。
Docker – 设置 NGINX
NGINX 是一种流行的轻量级 Web 应用程序,用于开发服务器端应用程序。它是一种开源 Web 服务器,开发用于在各种操作系统上运行。由于nginx是用于开发的流行 Web 服务器,因此 Docker 已确保它支持nginx。
我们现在将看到为nginx启动和运行Docker 容器的各个步骤。
Step 1 – 第一步是从 Docker Hub 拉取镜像。当您登录 Docker Hub 时,您将能够搜索并查看nginx的图像,如下所示。只需在搜索框中输入 nginx,然后单击搜索结果中出现的nginx(官方)链接。
第 2 步– 您将在 Docker Hub 的存储库详细信息中看到nginx的 Docker pull命令。
第 3 步– 在 Docker 主机上,使用如上所示的 Docker pull命令从 Docker Hub 下载最新的 nginx 镜像。
第 4 步– 现在让我们通过以下命令运行nginx容器。
sudo docker run –p 8080:80 –d nginx
我们将nginx服务器上的端口 80暴露给 Docker 主机上的端口 8080。
运行该命令后,如果浏览到 URL http://dockerhost:8080,您将获得以下输出。这表明nginx容器已启动并正在运行。
第 5 步– 让我们看另一个例子,我们可以在我们的ngnix容器中托管一个简单的网页。在我们的示例中,我们将创建一个简单的HelloWorld.html文件并将其托管在我们的nginx容器中。
让我们首先创建一个名为HelloWorld.html的 HTML 文件
让我们在 HTML 文件中添加一行简单的 Hello World。
然后让我们运行以下 Docker 命令。
sudo docker run –p 8080:80 –v “$PWD”:/usr/share/nginx/html:ro –d nginx
关于上述命令需要注意以下几点 –
-
我们将nginx服务器上的端口 80暴露给 Docker 主机上的端口 8080。
-
接下来,我们将/usr/share/nginx/html容器上的卷附加到我们当前的工作目录。这是存储我们的 HelloWorld.html 文件的地方。
现在,如果我们浏览到 URL http://dockerhost:8080/HelloWorld.html,我们将按预期获得以下输出 –
Docker – 工具箱
在介绍章节中,我们已经看到了在 Windows 上安装 Docker 工具箱。Docker 工具箱的开发目的是使 Docker 容器可以在 Windows 和 MacOS 上运行。Windows 上的工具箱站点是https://docs.docker.com/docker-for-windows/
对于 Windows,您需要具有启用 Hyper-V 的 Windows 10 或 Windows Server 2016。
工具箱由以下组件组成 –
-
Docker Engine – 用作运行 Docker 容器的基础引擎或 Docker 守护进程。
-
Docker Machine – 用于运行 Docker 机器命令。
-
Docker Compose用于运行 Docker compose 命令。
-
Kinematic – 这是为 Windows 和 Mac OS 构建的 Docker GUI。
-
甲骨文虚拟机
现在让我们讨论 Docker 工具箱可以进行的不同类型的活动。
在 Powershell 中运行
使用 Windows 10 上的 Docker 工具箱,您现在可以从powershell运行 Docker 命令。如果您在 Windows 上打开 powershell 并输入 Docker 版本的命令,您将获得有关安装的 Docker 版本的所有必需详细信息。
拉取镜像和运行容器
您现在还可以像在 Linux 中一样从 Docker Hub 中提取图像并在 powershell 中运行容器。下面的例子将简要展示 Ubuntu 镜像的下载和容器在镜像之外的运行。
第一步是使用 Docker pull命令从 Docker Hub 拉取 Ubuntu 镜像。
下一步是使用以下运行命令运行 Docker 镜像–
docker run –it ubuntu /bin/bash
您会注意到该命令与 Linux 中的命令相同。
风筝
这是 Windows 上 Docker 的 GUI 等价物。要打开此 GUI,请转到任务栏并在 Docker 图标上右键单击并选择打开 Kitematic。
它会提示您下载 Kitematic GUI。下载后,只需解压缩内容。将有一个名为Kitematic.exe的文件。双击这个exe文件打开GUI界面。
然后将要求您登录 Docker Hub,通过 GUI 进入。只需输入所需的用户名和密码,然后单击登录按钮。
登录后,您将能够在界面左侧看到系统上下载的所有图像。
在右侧,您将找到 Docker Hub 上可用的所有图像。
我们通过一个例子来了解如何使用 Kitematic 从 Docker Hub 下载 Node 镜像。
步骤 1 – 在搜索条件中输入节点的关键字。
步骤 2 – 单击官方节点图像上的创建按钮。然后您将看到正在下载的图像。
下载映像后,它将开始运行 Node 容器。
步骤 3 – 如果您转到设置选项卡,您可以深入了解更多设置选项,如下所示。
-
常规设置– 在此选项卡中,您可以命名容器、更改路径设置和删除容器。
-
端口– 在这里您可以看到不同的端口映射。如果需要,您可以创建自己的端口映射。
-
卷– 在这里您可以看到不同的卷映射。
-
高级– 它包含容器的高级设置。
Docker – 设置 ASP.Net
ASP.Net 是 Microsoft 提供的用于开发服务器端应用程序的标准 Web 开发框架。由于 ASP.Net 已经存在了相当长的时间进行开发,Docker 已经确保它支持 ASP.Net。
在本章中,我们将看到为 ASP.Net 启动和运行 Docker 容器的各个步骤。
先决条件
运行 ASP.Net 需要首先执行以下步骤。
步骤 1 – 由于这只能在 Windows 系统上运行,您首先需要确保您拥有 Windows 10 或 Window Server 2016。
步骤 2 – 接下来,确保 Hyper-V 和容器安装在 Windows 系统上。要安装 Hyper-V 和容器,您可以转到打开或关闭 Windows 功能。然后确保选中 Hyper-V 选项和容器,然后单击确定按钮。
此操作后系统可能需要重新启动。
步骤 3 – 接下来,您需要使用以下 Powershell 命令来安装1.13.0rc4版本的 Docker。以下命令将下载它并将其存储在临时位置。
Invoke-WebRequest "https://test.docker.com/builds/Windows/x86_64/docker-1.13.0- rc4.zip" -OutFile "$env:TEMP\docker-1.13.0-rc4.zip" –UseBasicParsing
步骤 4 – 接下来,您需要使用以下powershell命令展开存档。
Expand-Archive -Path "$env:TEMP\docker-1.13.0-rc4.zip" -DestinationPath $env:ProgramFiles
第 5 步– 接下来,您需要使用以下powershell命令将 Docker 文件添加到环境变量中。
$env:path += ";$env:ProgramFiles\Docker"
步骤 6 – 接下来,您需要使用以下powershell命令注册 Docker 守护程序服务。
dockerd --register-service
步骤 7 – 最后,您可以使用以下命令启动docker 守护进程。
Start-Service Docker
在powershell 中使用docker version命令来验证docker 守护进程是否正常工作
安装 ASP.Net 容器
让我们看看如何安装 ASP.Net 容器。
Step 1 – 第一步是从 Docker Hub 拉取镜像。当您登录 Docker Hub 时,您将能够搜索并查看Microsoft/aspnet的图像,如下所示。只需在搜索框中输入asp,然后单击搜索结果中出现的 Microsoft/aspnet 链接。
第 2 步– 您将在 Docker Hub 的存储库详细信息中看到ASP.Net的 Docker pull命令。
第 3 步– 转到 Docker 主机并为 microsoft/aspnet 映像运行 Docker pull命令。请注意,图像非常大,接近 4.2 GB。
第 4 步– 现在转到以下位置https://github.com/Microsoft/aspnet-docker并下载整个 Git 存储库。
第 5 步–在 C 驱动器中创建一个名为App的文件夹。然后将4.6.2/sample文件夹中的内容复制到 C 盘。转到示例目录中的 Docker 文件并发出以下命令 –
docker build –t aspnet-site-new –build-arg site_root=/
关于上述命令需要注意以下几点 –
- 它从 Docker 文件构建一个名为aspnet-site-new的新映像。
- 根路径设置为 localpath 文件夹。
第 6 步– 现在是运行容器的时候了。可以使用以下命令完成 –
docker run –d –p 8000:80 –name my-running-site-new aspnet-site-new
第 7 步– 您现在将在 Docker 容器中运行 IIS。要查找 Docker 容器的 IP 地址,您可以发出 Docker inspect命令,如下所示。
Docker – 云
Docker Cloud 是 Docker 提供的一项服务,您可以在其中执行以下操作 –
-
节点– 您可以将 Docker Cloud 连接到现有的云提供商,例如 Azure 和 AWS,以在这些环境中启动容器。
-
云存储库– 提供一个可以存储自己的存储库的地方。
-
持续集成– 与Github连接并构建持续集成管道。
-
应用程序部署– 部署和扩展基础设施和容器。
-
持续部署– 可以自动化部署。
入门
您可以转到以下链接以开始使用 Docker Cloud – https://cloud.docker.com/
登录后,您将获得以下基本界面 –
连接到云提供商
第一步是连接到现有的云提供商。以下步骤将向您展示如何与亚马逊云提供商连接。
Step 1 – 第一步是确保您拥有正确的 AWS 密钥。这可以从aws控制台获取。使用以下链接登录您的aws帐户 – https://aws.amazon.com/console/
步骤 2 – 登录后,转到安全凭据部分。记下将从 Docker Hub 使用的访问密钥。
第 3 步– 接下来,您需要在aws中创建一个允许 Docker 查看 EC2 实例的策略。转到aws 中的配置文件部分。单击创建策略按钮。
第 4 步– 单击“创建您自己的策略”并将策略名称指定为dockercloudpolicy和策略定义,如下所示。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ec2:*", "iam:ListInstanceProfiles" ], "Effect": "Allow", "Resource": "*" } ] }
接下来,单击创建策略按钮
第 5 步– 接下来,您需要创建一个角色,Docker 将使用该角色在 AWS 上启动节点。为此,请转到AWS 中的角色部分,然后单击创建新角色选项。
第 6 步– 将角色的名称命名为dockercloud-role。
第 7 步– 在下一个屏幕上,转到“跨账户访问角色”并选择“在您的账户和第 3 方 AWS 账户之间提供访问权限”。
步骤 8 – 在下一个屏幕上,输入以下详细信息 –
- 在 Account ID 字段中,输入 Docker Cloud 服务的 ID:689684103426。
- 在外部 ID 字段中,输入您的 Docker Cloud 用户名。
步骤 9 – 然后,单击下一步按钮,并在下一个屏幕上,附加在前面步骤中创建的策略。
步骤 10 – 最后,在创建角色时的最后一个屏幕上,确保复制创建的arn角色。
arn:aws:iam::085363624145:role/dockercloud-role
步骤 11 – 现在返回Docker Cloud,选择Cloud Providers,然后单击Amazon Web Services 旁边的插头符号。
输入arn角色并单击Save按钮。
保存后,与 AWS 的集成将完成。
设置节点
与 AWS 的集成完成后,下一步是设置节点。转到 Docker Cloud 中的节点部分。请注意,节点的设置将首先自动设置节点集群。
步骤 1 – 转到 Docker Cloud 中的节点部分。
步骤 2 – 接下来,您可以提供将在 AWS 中设置的节点的详细信息。
然后,您可以单击将出现在屏幕底部的 Launch Node 集群。部署节点后,您将在“节点集群”屏幕中收到通知。
部署服务
部署节点后的下一步是部署服务。为此,我们需要执行以下步骤。
步骤 1 – 转到Docker Cloud 中的服务部分。单击创建按钮
步骤 2 – 选择所需的服务。在我们的例子中,让我们选择mongo。
步骤 3 – 在下一个屏幕上,选择创建和部署选项。这将开始在您的节点集群上部署Mongo容器。
部署后,您将能够看到处于运行状态的容器。
Docker – 日志记录
Docker 具有日志记录机制,可用于在问题发生时进行调试。在守护进程级别和容器级别都有日志记录。让我们看看不同级别的日志记录。
守护进程日志
在守护进程日志级别,有四个可用的日志级别 –
-
调试– 它详细说明了守护进程处理的所有可能的信息。
-
信息– 它详细说明了守护进程处理的所有错误 + 信息。
-
错误– 它详细说明了守护进程处理的所有错误。
-
致命– 它仅详细说明守护进程处理的所有致命错误。
完成以下步骤以了解如何启用日志记录。
步骤 1 – 首先,我们需要停止docker 守护进程,如果它已经在运行。可以使用以下命令完成 –
sudo service docker stop
第 2 步– 现在我们需要启动docker 守护进程。但这一次,我们需要附加-l参数来指定日志记录选项。所以让我们在启动docker daemon process时发出以下命令。
sudo dockerd –l debug &
关于上述命令需要注意以下几点 –
-
dockerd是docker守护进程的可执行文件。
-
该-l选项用于指定日志记录级别。在我们的例子中,我们把它作为调试
-
&用于在启用日志记录后返回命令提示符。
使用日志记录启动 Docker 进程后,您现在还将看到发送到控制台的调试日志。
现在,如果您执行任何 Docker 命令,例如docker images,调试信息也会发送到控制台。
容器日志
在容器级别也可以使用日志记录。所以在我们的例子中,让我们先启动一个 Ubuntu 容器。我们可以使用以下命令来完成。
sudo docker run –it ubuntu /bin/bash
现在,我们可以使用docker log 命令查看容器的日志。
句法
Docker logs containerID
参数
-
containerID – 这是您需要查看日志的容器的 ID。
例子
在我们的 Docker 主机上,让我们发出以下命令。在此之前,您可以在容器中发出一些命令。
sudo docker logs 6bfb1271fcdd
输出
从输出中可以看到,在容器中执行的命令都显示在日志中。
Docker – 撰写
Docker Compose用于将多个容器作为单个服务运行。例如,假设您有一个需要 NGNIX 和 MySQL 的应用程序,您可以创建一个文件,将两个容器作为服务启动,而无需单独启动每个容器。
在本章中,我们将看到如何开始使用 Docker Compose。然后,我们将看看如何使用 Docker Compose 启动并运行带有 MySQL 和 NGNIX 的简单服务。
Docker Compose ─ 安装
需要遵循以下步骤来启动和运行 Docker Compose。
步骤 1 –使用以下命令从github下载必要的文件–
curl -L "https://github.com/docker/compose/releases/download/1.10.0-rc2/dockercompose -$(uname -s) -$(uname -m)" -o /home/demo/docker-compose
上述命令将下载最新版本的 Docker Compose,在撰写本文时为1.10.0-rc2。然后它将它存储在目录/home/demo/ 中。
步骤 2 – 接下来,我们需要使用以下命令为下载的 Docker Compose 文件提供执行权限–
chmod +x /home/demo/docker-compose
然后我们可以使用以下命令查看撰写 版本。
句法
docker-compose version
参数
-
version – 这用于指定我们想要Docker Compose版本的详细信息。
输出
将显示 Docker Compose 的版本详细信息。
例子
以下示例显示了如何获取docker-compose版本。
sudo ./docker-compose -version
输出
然后您将获得以下输出 –
创建您的第一个 Docker-Compose 文件
现在让我们继续创建我们的第一个 Docker Compose 文件。所有 Docker Compose 文件都是 YAML 文件。您可以使用 vim 编辑器创建一个。所以执行以下命令来创建撰写文件 –
sudo vim docker-compose.yml
让我们仔细看看这个文件的各种细节 –
-
该数据库和网页的关键字来定义两个单独的服务。一个将运行我们的mysql数据库,另一个将是我们的nginx Web 服务器。
-
该图像关键字用于从指定图像dockerhub我们的MySQL和Nginx的容器
-
对于数据库,我们使用 ports 关键字来提及需要为mysql公开的端口。
-
然后,我们还为mysql指定了运行mysql所需的环境变量。
现在让我们使用以下命令运行我们的 Docker Compose 文件 –
sudo ./docker-compose up
此命令将获取本地目录中的 docker-compose.yml文件并开始构建容器。
执行后,所有图像将开始下载,容器将自动启动。
当您执行docker ps 时,您可以看到容器确实已启动并正在运行。
Docker – 持续集成
Docker 与许多持续集成工具集成,其中还包括流行的 CI 工具Jenkins。在 Jenkins 中,您可以使用插件来处理容器。因此,让我们快速查看一个可用于 Jenkins 工具的 Docker 插件。
让我们一步一步来看看 Jenkins 中有什么可用于 Docker 容器。
第 1 步– 转到您的 Jenkins 仪表板并单击管理 Jenkins。
步骤 2 – 转到管理插件。
第 3 步– 搜索 Docker 插件。选择 Docker 插件并单击Install without restart按钮。
第 4 步– 安装完成后,转到 Jenkins 仪表板中的工作。在我们的示例中,我们有一个名为Demo的作业。
第 5 步– 在工作中,当您进入构建步骤时,您现在可以看到启动和停止容器的选项。
步骤 6 – 作为一个简单的例子,您可以选择进一步的选项在构建完成时停止容器。然后,单击保存按钮。
现在,只需在 Jenkins 中运行您的工作。在控制台输出中,您现在将能够看到停止所有容器的命令已运行。
Docker – Kubernetes 架构
Kubernetes 是 Docker 容器的编排框架,有助于将容器作为服务公开给外界。例如,您可以有两个服务 – 一个服务将包含nginx和mongoDB,另一个服务将包含nginx和redis。每个服务都可以有一个 IP 或服务点,可以由其他应用程序连接。然后使用 Kubernetes 来管理这些服务。
下图以简单的格式从架构的角度显示了 Kubernetes 的工作原理。
该奴才是运行于其上的所有服务的节点。您可以在一个时间点运行多个 Minion。每个 minion 将托管一个或多个 POD。每个POD就像托管一个服务。然后每个 POD 都包含 Docker 容器。每个 POD 可以托管一组不同的 Docker 容器。然后使用代理来控制向外界公开这些服务。
Kubernetes 在其架构中有几个组件。每个组件的作用解释如下 &mius
-
etcd – 此组件是一个高度可用的键值存储,用于存储共享配置和服务发现。在这里,各种应用程序将能够通过发现服务连接到服务。
-
Flannel – 这是容器所需的后端网络。
-
kube-apiserver – 这是一个 API,可用于编排 Docker 容器。
-
kube-controller-manager – 用于控制Kubernetes 服务。
-
kube-scheduler – 用于在主机上调度容器。
-
Kubelet – 这用于通过清单文件控制容器的启动。
-
kube-proxy – 用于向外界提供网络代理服务。
Docker – Kubernetes 的工作
在本章中,我们将看到如何安装Kubenetes通过kubeadm。这是一个有助于安装 Kubernetes 的工具。让我们一步一步来学习如何安装 Kubernetes。
步骤 1 – 确保您正在使用的Ubuntu 服务器版本是16.04。
步骤 2 – 确保您生成可用于ssh登录的ssh密钥。您可以使用以下命令执行此操作。
ssh-keygen
这将在您的主文件夹中生成一个密钥,如下所示。
第 3 步– 接下来,根据您拥有的 Ubuntu 版本,您需要将相关站点添加到apt 包管理器的docker.list中,以便它能够从kubernetes站点检测到Kubernetes 包并下载他们相应地。
我们可以使用以下命令来完成。
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - echo "deb http://apt.kubernetes.io/ kubernetes-xenial main” | sudo tee /etc/apt/sources.list.d/docker.list
第 4 步– 然后我们发出 apt-get 更新以确保所有软件包都下载到 Ubuntu 服务器上。
第 5 步– 按照前面章节中的详细说明安装 Docker 包。
第 6 步– 现在是通过安装以下软件包来安装kubernetes的时候了–
apt-get install –y kubelet kubeadm kubectl kubernetes-cni
第 7 步–下载所有kubernetes包后,就可以使用以下命令启动 kubernetes 控制器了 –
kubeadm init
完成后,您将收到一条成功消息,表明主节点已启动并正在运行,节点现在可以加入集群。