Webhostingtalk资讯网

使用Windows和Docker容器:启动并运行

2017-09-05 11:32
作者:admin

通过使用Docker和Windows容器,您可以以多种方式简化部署过程;但您要如何才能使用这些容器?作为Windows容器和Docker容器实用系列文章的一部分,之前为大家展示了如何将容器主机部署到Microsoft Azure云端上:从Docker Hub中检索图像,然后构建自己的容器映像,并将映像推送至Docker Hub。

概述

在本系列文章《Windows和Docker容器进阶教程》中,介绍了如何在Windows Server 2016操作系统中实施容器虚拟化的方法。 有了这篇归纳Windows容器的基础文章,下面继续向您解释如何才能在Windows Server 2016中使用此新功能了。

引言

在本系列文章中我们了解了Windows容器和Docker容器的基本原理。 容器提供了轻量且灵活的虚拟化功能,这使得开发人员可以在自己的开发环境中快速部署和升级应用程序。在本文中,将为您介绍如何使用Docker容器创建和管理Windows Server容器。在完成该步骤后,就能仅使用一个IIS容器来启动并运行容器主机了。

联合使用Azure云环境中的容器和Windows Server 2016

对于许多开发人员和系统管理员来说,将服务部署到Microsoft Azure云环境中是非常有意义的,不过您也可以选择将容器主机部署到Microsoft Azure云环境中。 以这种方式使用Azure的优点之一是您可以部署配有内置容器功能的Windows Server 2016虚拟机。 这样一来,您就可以使用同时安装了服务器核心和纳米服务器容器操作系统映像的Windows Server 容器,并能将其与Docker容器一起使用了。

登录到您的Azure portal,并使用Windows Server 2016 Core 和容器映像来创建虚拟机,如下所示:

Docker命令

在Windows Server上如何设置才能使用Docker容器呢? 在进一步实践之前,我们首先需要熟悉基本的Docker PowerShell命令。 您可以运行docker –help命令:

这已经能满足您的日常使用需求了。首先,我们会使用最常见的Docker命令之一:

此命令会向您显示可用的本地Docker映像。 在安装Windows 容器之后,您还没有安装任何Docker映像。 因此,您首先要做的是从Docker Hub中获取Windows Server 映像。 不过,您无需Docker Hub帐户就能执行此任务:

在下文中详细介绍这个命令。当您至少有一个可用映像时,您就可以启动Windows容器了:

这意味着,名为《容器_名称》的Windows容器将从名为《映像_名称》的映像中启动。 当您运行了多个容器时,拥有一张罗列出所有正在运行的容器的列表十分有用:

最后,您将需要了解一些有关容器的信息,如:IP地址。您可以使用以下命令检索此信息:

从Docker Hub中检索映像

在Docker容器用语中,映像是指您用来创建新容器的模板。我们可以从Docker Hub中下载一些预建的Docker映像。在撰写本文时,微软公司已经构建了两个容器映像:Nano Server和Windows Server Core。 让我们从Docker Hub中获取这两个映像,并进行下载:

那么您如何才能知道所需映像的确切名称呢?这很简单,因为您在Docker Hub中能看到名为“Docker Pull Command”的下列板块。

您唯一要做的就是复制并粘贴该命令,从而下载映像。 映像安装过程完成后(这可能需要一段时间,具体取决于您的网络连接速度),请确认本地Windows Server Core映像是可用的。 请运行Docker映像进行核实:

如果您已经在Azure环境中部署了预先配置的虚拟机,那您就已经获取了这两个基本映像了。

部署新的Windows容器

现在,我们将使用Docker运行命令来部署一个名为CoreServerCMD的新容器,它使用的是Windows Server Core映像。 -it开关是指交互式会话,而cmd.exe表示我们要在新的cmd.exe控制台中添加容器。请注意,存储库名称必须小写。

基本上,docker run命令会在基于服务器核心的新容器中转换cmd.exe命令。 现在,我们有一个名为CoreServerCMD的容器正在运行中。我们可以使用Docker ps命令进行查看:

Docker ps在命令默认情况下仅显示运行中的容器,但将-a标志添加进该命令后,您就能看到所有的容器了。 您可以通过运行以下命令来简单地启动和停止容器:

当您启动Windows容器时,如果您查看任务管理器工具,就会注意到一个名为“Docker”的新进程。 当您停止容器时,此进程将消失:

现在,您已经启动并运行了容器,但您不需要再次执行docker run命令了。 要再次进入正在运行中的容器,您只需要输入docker attach命令即可:

容器同时具有名称和标识符,而您可以使用任一一种来识别需要检查的容器。 检查是Docker容器的核心指令(Docker Docs- Docker Inspect),它能允许您获取所有有关容器和映像的信息。我通过下方的命令检查了我的容器:

输出已被截断。 您可以使用-f参数显示特定设置:

建立您自己的容器映像

Docker容器是使用基本映像创建而成的。 基本上,映像可以只包含操作系统原理,或者也可以包含一个可供使用的完整应用程序堆栈。 下面,让我们来看一个示例。 您可能想在Windows容器中部署一个自定义网站,那您可以通过两种方式来完成这项工作:您可以运行Windows容器,或仅使用一个Docker文件即可。 要运行Windows容器,请安装并配置IIS角色,并在最后导入html文件:使用Docker文件则更为复杂。试想一下,要想实现该示例的目的,您得拥有一个包含两个文件的“MyWebSite”文件夹:

· Index.html

· Dockerfile

什么是Dockerfile?

Dockerfile是一个脚本,由各种也称为“指令”的“命令”和连续列出的参数组成。它可以在基本映像上自动执行操作,从而创建新的映像。 Dockerfile通过自动化和简化此过程,能为部署提供极大的便利。

以下是我的Dockerfile内容:

我的Dockerfile以“FROM”关键字开头,而此关键字能决定启动构建过程的映像。 在我的例子中,我将使用Microsoft IIS映像,然后创建一个文件夹,最后通过“RUN”关键字运行一些PowerShell命令。得益于Dockerfile,Docker将为我创建一个新的容器映像。容器映像是指您在容器主机上创建和定制的容器的捕获状态信息。 当您出于特定目的定制了一个容器映像后,就可以使用它来创建新的容器了。它就像一个“模板”,可用来创建用于特定目的(您可以使用Docker images命令列出)的新容器。

创建容器映像

现在,我的Dockerfile已经准备完毕了。 以下是我要创建新映像需要运行的命令:

“myiis”是存储库名称,必须小写。 在Dockerfile的末尾,我公开了我的网站8080端口号。 在此步骤中,我可以确认我的容器映像是否已成功创建:

现在,只需要使用Docker run命令,就能从新容器映像中创建一个新的容器了:

容器已经启动并运行了,接着,就可以使用以下命令获取容器IP地址,并通过以下URL访问网站了://172.21.158.179:8080

请注意,如果您刚开始接触Docker和Windows容器,那可能会犯以下错误:您可能会尝试从映像而不是从容器中获取IP地址。请确保您是从docker ps中获取容器ID的。 如果您使用了映像名称,那您就是在要求Docker向您展示映像的IP地址。 当然,这毫无意义可言,因为映像根本没有IP地址。

将您的映像推送到Docker Hub中

首先,请点击进入该网址,然后创建一个免费的Docker帐户://cloud.docker.com/。 Docker Hub可以让您存储和分享您的基本映像,这意味着您的同事也可以使用您存储库中的基本映像。

您可以创建存储库,并使用docker push 命令手动推送映像。您可以公开这些存储库,也可以将它们设置为私有的。此外,您只可以免费创建一个私人存储库,但能创建无数个公共存储库。

点击存储库并开始创建。 您必须输入名称和可选描述。 接下来,请为存储库设置可见性。

当您需要将映像推送到Docker Hub时,您必须使用三个命令。其中,第一个命令将标记该映像:

· Getcmd是我的Docker ID

· Lab是我的私人存储库

· Latest是标签

现在,请运行docker images命令来验证两个不同的存储库中是否已经存在了相同的映像ID。

第二个命令会使用docker login命令来存储您的凭据:

现在,您可以推送映像了:

请注意:您可以使用docker logout命令来注销Docker Hub账户。

总结

在本文中,我们讨论了您可以用于Windows容器的Docker命令。我们还从Docker HUB中下载了容器映像,并创建了一个免费的Docker帐户来存储我们自己的映像。 接下来,我们又探讨了如何构建容器映像,以及如何使用容器映像来创建容器的方法。

容器化为您提供了一种开放式设备,它可以从各个方面简化您的部署流程。 在下一篇文章中,我将向您介绍如何使用Hyper-V容器,以及如何将Windows服务进行转换,从而使其能在Windows容器中运行,而且还会向您透露Docker-compose的奥秘。

网友评论
暂无评论!