Quantcast
Channel: CodeSection,代码区,Python开发技术文章_教程 - CodeSec
Viewing all articles
Browse latest Browse all 9596

通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

$
0
0

IBM Bluemix 上的 Docker 容器服务是 IBM Containers 。该服务目前处于测试阶段,我很幸运能够访问它。您可以在上面给出的 Bluemix 主页上注册参加测试。


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上
创建 Docker 容器

要使用此服务,必须先将 IBM Containers Extension (ice) 安装在我们本地的 Docker 主机上。我们在此处提供了安装它的详细说明。因此,我们假设您拥有一个带有 ice 的有效的 Boot2Docker 安装。

第一步是登录到 ice。键入 ice login 和以下指令。您必须使用向该服务注册时使用的凭证。


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

上面屏幕截图中的所有擦除部分是我的电子邮件。我输入了一次,使用它作为我的用户 ID 和组织 ID。您在登录时应该会看到您自己的信息。

我们现在已完成设置。让我们将上一篇文章中创建的一个容器移动到 IBM Containers 中。让我们移动最初创建的 Docker 镜像。该镜像是使用 Dockerfile 在 myserver 目录中创建的。我们可以为 ice 重用同一个 dockerfile。dockerfile 的内容为:

FROM ipython/scipyserver

MAINTAINER Jean-Francois Puget

EXPOSE 9000

RUN cp /usr/local/bin/pip2 /usr/local/bin/pip

我们的镜像源自 ipython/scipyserver 镜像。为了节省您的时间,推荐您在构建镜像之前,直接从 Docker Hub 将 ipython/scipyserver 镜像复制到 IBM Containers 中。如果不这么做,则会从您的本地机器上传该镜像,这可能会慢得多。复制的命令是:

ice cpi ipython/scipyserver <your ice repository>/scipyserver:latest

对我而言,它是:

ice cpi ipython/scipyserver jfpuget/scipyserver:latest

完成后,使用 ice images 检查该镜像是否可用:


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

我们看到了该服务的两个基础镜像(ibmnode 和 ibmliberty),以及从 Docker Hub 复制的两个镜像(anaconda 和 scipyserver)。

现在我们可以构建自己的新镜像了。ice 命令与 docker 命令非常相似:

ice build -t jfpuget/myserver .

请注意末尾的点:它指明了 DockerFile 的位置。我们使用 -t 选项指定我们的镜像名称。我们需要提供 ice 存储库名称(这里使用的是 herejfpuge)和一个镜像名称(这里使用的是 myserver)。


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

我们看到,得益于之前上传的 ipython/scipyserver 镜像,它跳过了一些步骤。如果我们没有上传,则需要等待大约 2.5GB 的数据从本地机器上传到 IBM Bluemix。这肯定会花不少时间!

完成构建后,我们可以使用 ice images 检查该服务上是否存在该镜像。


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

我们现在可使用它创建一个容器。命令类似于 Docker 命令。docker 命令是:

docker run -d -p 443:8888 -p 9000:9000 -e "PASSWORD=MakeAPassword" -e "HOST_PUBLIC_IP=192.168.59.103" -v /c/Users/IBM_ADMIN/Documents/Notebooks:/notebooks --name iserver jfpuget/myserver

我们显然无法将本地主机目录挂载到云上运行的容器中。然后,我们需要在云上创建一个 Docker 卷。实现此操作的 ice 命令非常简单:

ice volume create notebooks

我们只需为该卷提供一个名称。完成创建之后,我们可以使用 ice volume list 检查该卷是否存在:


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

我们还需要提供一个 IP 地址。首先请求一个公共 IP 地址,使用的命令是:

ice ip request

执行命令后,我们会获得一个 IP 地址。请注意,对于测试版本,我们只可以获得 2 个公共 IP 地址。我们可以使用 ice ip list 列出已有的 IP 地址:


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

在创建此地址后,将它绑定到我们的容器。

我们已完成设置。ice 命令非常类似于 Docker 命令。

ice run --memory 1024 -p 8888 -p 9000 -e "PASSWORD=MakeAPassword" -e "HOST_PUBLIC_IP=129.41.233.243" -v notebooks:/notebooks --name iserver jfpuget/myserver

除了挂载的卷和 IP 地址中的差别之外,我们公开端口的方式也有不同。Docker 支持端口映射。在使用 ice 时,我们无法将内部容器端口映射到不同的外部端口。

执行该命令会为我们构建该容器,然后将它部署到我们的 Bluemix 存储库。可以在 Bluemix 上看到我们的容器在正常运行:


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

现在使用 ice ip bin 将这个 IP 地址绑定到该容器:


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

让我们返回到 Bluemix 仪表板。我们现在可以看到容器的公共 IP 地址:


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

让我们看看它是否能有用。这个容器与我们 在 windows 上的 Docker 容器中使用 IPython Notebook中创建的容器相同。它应该运行一个 IPython Notebook 服务器,并将 Notebook 持久保存在我们挂载的 notebooks 卷中。该 Notebook 应该可以在容器的 8888 端口上进行访问,因此应该可以通过 https://129.41.233.243:8888 访问它。

在一个 Web 浏览器中输入此地址会打开一个要求输入密码的页面。在看到一个安全警告后(因为我们没有使用已知的证书),我们会进入一个需要密码的主页。


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

Jupyter 是 IPython Notebook 服务器的新名称。毫不奇怪,所需的密码是作为参数传递给 docker run 命令的密码。如果未修改该密码,它应该是 MakeAPassword。不过我希望您已经修改了该密码。

输入密码后,我们将进入 Notebook 服务器。


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

这里没有 Notebook,因为我们启动了一个全新的服务器,但您可以开始使用它。

回页首

运行应用程序

让我们向它上传一个 Notebook。我们将使用我们为一个数独 Web 应用程序游戏开发的 Notebook。可以在此处下载它,我们已在 一个基于 DOcloud 和 Pytho.n 的数独 Web 应用程序 游戏中对其进行了介绍。

您会获得这个视图:


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

下载之后,可以通过该 Notebook 的上传按钮将它上传到服务器。

单击该 Notebook 会启动它的 Python 内核,并打开一个显示 Notebook 内容的新窗口(或者一个新选项卡,具体情况取决于您的浏览器配置)。


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

我们通过 Cell → Run All 运行它。

此 Notebook 在端口 9000 上启动一个数独游戏 Web 应用程序。为了访问它,我们在浏览器中输入了 http://129.41.233.243:9000 。我们会获得以下页面:


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

似乎该应用程序在正常运行。我们单击 Solve 按钮来测试它。在通过我们的DOcloud 服务解出该网格后,它显示了结果。


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

请注意,我们的 Web 应用程序代码不需要进行任何修改即可在 Bluemix 上运行。这是因为我们在 Bluemix 上使用了与我们的开发机器上相同的 Docker 容器。这一点值得注意,因为我们的开发机器是一个 Windows 工作站,而 Bluemix 运行的是 linux VM。

让我们概括一下我们运行的架构。我们在一个 Python Notebook 中运行我们的数独 Web 应用程序游戏。该 Notebook 在一个 Docker 容器中运行。该容器在 IBM Bluemix 上的 IBM Containers 服务内运行。


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

我们在一个 Windows 工作站上使用 Docker 测试了此架构。这个架构如下所示:


通过 Docker 在几分钟内将 IPython Notebook 部署在 Bluemix 上

Docker 将我们与底层主机隔离,无论它是 Windows 还是 Bluemix。使用它也比Peter Parente 编写的两篇有趣的文章中描述的方法还要简单:

在 IBM Bluemix 上运行 IPython Notebook

在云中使用 Notebook 开展出色的数据科学研究

回页首

结束语

我停止了该 Notebook 的 Python 内核。因此这个 Web 应用程序不再可用。但您可以按照上述说明轻松地自行构建它。


Viewing all articles
Browse latest Browse all 9596

Trending Articles