在 IBM Container 中运行 Swift 应用程序的 10 个 步骤

shixy163 8年前
   <p>我想,复习一下创建一个 IBM Container 来托管用 Swift 编程语言编写的示例服务器端应用程序的步骤,这对您可能有所帮助。示例应用程序将会侦听端口 9080,并向客户端返回一个基本的 HTML 响应。虽然示例应用程序不是一个生产就绪应用程序,但它可以让您了解,使用 Swift 可以开发不同类型的服务器端应用程序。</p>    <p>我们会向不熟悉 Swift 的人介绍一下它,Swift 是苹果公司创造的一种现代的编程语言,可用于开发 OS X 和 Linux 的应用程序。除了 Swift 之外,苹果公司还实现了 <a href="/misc/goto?guid=4959672852667878123" rel="nofollow,noindex">Swift Package Manager</a> (SPM) 工具,用该工具来构建 Swift 应用程序,并指定它们的依赖关系。值得一提的是,示例服务器应用程序遵循 SPM 所要求的结构和约定。因此,SPM 可用于编译和创建可执行的示例服务器程序。</p>    <p>在复习创建 IBM Container 来托管示例 Swift 示例服务器应用程序的步骤之前,让我们简单讨论一下开发人员选择这样做的一些原因:</p>    <ul>     <li>IBM Container 提供了灵活性,使您无需对应用程序进行任何更改就可以在云中运行它。这是有可能的,因为 IBM Container 利用了 Docker。通过 IBM Container,开发人员可以在云上实例化 Docker 镜像并运行它。他们可以在 Docker 容器中打包应用程序,并在支持 Docker 的环境中运行它。这使部署应用程序变得非常轻松,并且可移植性不再只是一个概念。</li>     <li>将应用程序及其所依赖的全部服务都打包到一个单元中也是有可能的。虽然您可能想将应用程序和它所使用的服务分别打包到不同的容器中,但您也可以将所有组件都打包到一个部署单元中,以测试应用程序的功能,或快速构建一个原型或概念证明。</li>     <li>作为系统级软件包(如 libhttp-parser)的封装程序的 Swift 软件包,要求在尝试使用 Swift Package Manager 构建应用程序之前,就要安装好那些系统软件包。可以在 Docker 镜像中将这些系统软件包指定为依赖关系。</li>    </ul>    <p>在 IBM Container 中运行 Swift 应用程序的 10 个 步骤</p>    <p><img src="https://simg.open-open.com/show/efd97d50386207d01087e3a2690d1870.png"></p>    <p>现在,让我们复习那些您想要了解的步骤!如果您遵循以下 10 个简单的步骤,就可以很轻松地在 Bluemix 上的 IBM Container 中运行 Swift 示例应用程序。</p>    <h2>I 安装 Docker</h2>    <p>首先,应该在您的开发系统上安装最新版本的 <a href="/misc/goto?guid=4959667567074701835" rel="nofollow,noindex">Docker</a> 。完成安装后,应该启动一个 Docker 会话。在 OS X 系统上,您可以使用 Docker QuickStart Terminal 程序启动一个 Docker 会话。启动 Docker 会话后,就会出现一个终端窗口,您可以从该窗口中发出 Docker 命令。</p>    <h2>II 安装 Cloud Foundry 命令行</h2>    <p>第二步是在您的系统上安装最新版的 <a href="/misc/goto?guid=4959672852780391286" rel="nofollow,noindex">Cloud Foundry 命令行</a> 。该命令行使您可以对 Bluemix 云执行命令。</p>    <h2>III 配置 Cloud Foundry 命令行</h2>    <p>在尝试使用 Cloud Foundry 命令行之前,应该先配置它,以便它能与您的 Bluemix 地区进行通信:</p>    <ul>     <li>英国 – https://api.eu-gb.bluemix.net</li>     <li>悉尼 – https://api.au-syd.bluemix.net</li>     <li>美国南部 – https://api.ng.bluemix.net</li>    </ul>    <p>使用 cf api 命令指定 Bluemix 地区 URL,如下面的例子所示:</p>    <pre>  $ cf api https://api.ng.bluemix.net    Setting api endpoint to https://api.ng.bluemix.net...    OK    ...</pre>    <p>现在,您应该执行 <a href="/misc/goto?guid=4959672852780391286" rel="nofollow,noindex">身份验证</a> ,并使用 cf login 命令访问您的 Bluemix 组织和空间:</p>    <pre>  $ cf login    API endpoint: https://api.ng.bluemix.net    Email> john_doe@us.ibm.com    ...</pre>    <h2>IV 安装并配置 IBM Containers 插件</h2>    <p>完成 Cloud Foundry 命令行的配置后,您应该安装和初始化 <a href="/misc/goto?guid=4959672852883690710" rel="nofollow,noindex">IBM Containers</a> <a href="/misc/goto?guid=4959672852883690710" rel="nofollow,noindex">插件</a> 。在 OS X 系统上,可以发出以下命令来安装该插件:</p>    <pre>  $ cf install-plugin https://static-ice.ng.bluemix.net/ibm-containers-mac</pre>    <p>安装 IBM Containers 插件后,需要通过执行 cf ic init 命令来初始化它。请注意,由 IBM Containers 插件解释的任何命令 (cf ic <cmd>) 都应该从 Docker 终端窗口提交:</p>    <pre>  $ cf ic init    Deleting the old configuration file...    Retrieving client certificates from IBM Containers...    ...</pre>    <h2>V 获得您的命名空间</h2>    <p>为了利用 IBM Containers 插件,您需要获得分配给您的组织的命名空间。您可以通过发出以下命令来找到您的命名空间:</p>    <pre>  $ cf ic namespace get    space1</pre>    <p>记下返回的命名空间的值(如 space1),因为您很快会用到它!</p>    <h2>VI 下载 Docker 镜像</h2>    <p>我们的团队已将两个 Docker 镜像发布到 Docker Hub,放在 IBM 组织下面:</p>    <ul>     <li><a href="/misc/goto?guid=4959672852972634241" rel="nofollow,noindex">ibmcom/swift-ubuntu</a> – 一个 Ubuntu v15.10 镜像,其中包含最新的 Swift 二进制文件 [ 这在撰写本文时的情况 ] 及其依赖关系。您可以使用该镜像创建自己的自定义镜像,以托管您自己的应用程序。</li>     <li><a href="/misc/goto?guid=4959672853069802286" rel="nofollow,noindex">ibmcom/swift-runtime</a> – 该镜像扩展了 ibmcom/swift-ubuntu 镜像,添加了 Swift 示例应用程序。</li>    </ul>    <p>为了将您的 Swift 应用程序部署到 Bluemix 上的 IBM Container,您可以根据 ibmcom/swift-ubuntu 镜像创建一个新的 Docker 镜像。请注意,这正是我们对 Swift 示例应用程序所执行的操作!</p>    <p>您可以在 ibmcom/swift-ubuntu 镜像的 <a href="/misc/goto?guid=4959672852972634241" rel="nofollow,noindex">GitHub 库</a> 中找到它的 Dockerfile。这个 Dockefile 下载并安装 1) Swift 二进制文件和它的依赖关系;2) swift-corelibs-libdispatch 库;3) 我们在 Swift 开发工作中认为有用的几个系统级软件包。</p>    <p>ibmcom/swift-runtime 镜像的 Dockerfileis 的内容如下所示:</p>    <pre>  FROM ibmcom/swift-ubuntu:latest    MAINTAINER IBM Swift Engineering at IBM Cloud    LABEL Description="Image to run the Swift Sample Starter App inside an IBM Container on Bluemix."   EXPOSE 9080    # Clone Swift Starter App repo    RUN git clone -b master https://github.com/IBM-Bluemix/swift-helloworld    # Build Swift Started App    RUN cd /root/swift-helloworld && swift build    # Add build files to image    ADD start-swift-helloworld.sh /root    USER root    CMD ["/root/start-swift-helloworld.sh"]</pre>    <p>如果您想知道,start-swift-helloworld.sh 文件的内容如下:</p>    <pre>  # Run sample server    cd /root/swift-helloworld && .build/debug/Server</pre>    <p>正如我们可以在上面看到, <a href="/misc/goto?guid=4959672853157427594" rel="nofollow,noindex">Swift 示例应用程序</a> 的源代码是在创建 Docker 镜像的过程中被下载和编译的。此外,请注意,start-swift-helloworld.sh shell 脚本只负责启动示例服务器应用程序。</p>    <p>我们最初认为,在创建容器时下载 Swift 示例应用程序的源代码可确保每个新的 IBM Container 都具有最新的可用代码。但是,我们注意到,这样做可能会导致网络问题。第一次启动 IBM Container 时,网络配置还没有准备好。因此,尝试克隆一个 git repo 可能会产生错误,导致停止容器。</p>    <p>现在,让我们使用以下命令从 Docker Hub 下载 ibmcom/swift-runtime 镜像:</p>    <pre>  $ docker pull ibmcom/swift-runtime:latest</pre>    <h2>VII 标记 Docker 镜像</h2>    <p>下一步是用您的私有 Bluemix 注册表和镜像名称来标记 ibmcom/swift-runtime Docker 镜像。用注册表信息标记镜像可以让 Docker 知道,您打算将哪个镜像推送到 Bluemix 注册表,而不是 Docker Hub:</p>    <pre>  docker tag -f ibmcom/swift-runtime <bluemix registry>/<namespace>/swift-runtime</pre>    <p>您应该用分配给您的组织的命名空间替换 <namespace>,并用您的 Bluemix 地区的注册表名称替换 <bluemix registry>。例如,对于美国南部地区,注册表名称是 registry.ng.bluemix.net。</p>    <p>请注意,您将执行 docker tag 命令来创建一个原始 Docker 镜像副本。您可以通过执行 docker images 命令来验证这一点:</p>    <pre>  $ docker images    REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE    registry.ng.bluemix.net/space1/swift-runtime latest d5182f1d33b1 21 hours ago 1.248 GB    ibmcom/swift-runtime latest d5182f1d33b1 21 hours ago 1.248 GB</pre>    <h2>VIII 将 Docker 镜像推送到 Bluemix 注册表</h2>    <p>我们现在已准备好,通过发出以下命令将标记过的镜像推送到 Bluemix:</p>    <pre>  $ docker push <bluemix registry>/<namespace>/swift-runtime</pre>    <p>像以前一样,务必使用您的命名空间替换 <namespace>,并用您的 Bluemix 地区的注册表名称替换 <bluemix registry>。</p>    <h2>IX 获得一个公网 IP 地址</h2>    <p>要访问 IBM Container,必须将为其分配一个公网 IP 地址。您可以通过发出以下命令,使用 IBM Containers 插件来请求 IP 地址:</p>    <pre>  $ cf ic ip request    OK    The IP address "X.X.X.X" was obtained.</pre>    <h2>X 创建 IBM Container</h2>    <p>我们现在已准备好创建一个 IBM Container 来托管 Swift 示例应用程序。通过执行一个简单的命令来创建 IBM Container,并分配您在先前的步骤中获得的 IP 地址:</p>    <pre>  $ cf ic run -p <ip_address>:9080:9080 --name swift-runtime <bluemix registry>/<namespace>/swift-runtime</pre>    <p>请注意,您应该将 <ip_address>、<bluemix registry> 和 <namespace> 替换成相应的值。</p>    <p>就是这样!您现在应该有一个运行 Swift 示例应用程序的 IBM Container。如果访问 Bluemix 上的仪表板,您会看到与刚刚创建的 swift-runtime 容器对应的条目。您可以单击该条目,验证该容器已启动并运行。此外,您还可以使用浏览器测试 Swift 示例服务器确实正在运行,访问 http://<ip_address>:9080,其中 <ip_address> 是分配给您的 IBM Container 的 IP 地址。您的浏览器上应该显示“Hello from Swift on Linux!”消息。</p>    <p>这些是让 Swift 开发人员非常兴奋的时刻。最初,Swift 是一种仅用于 iOS 应用程序开发的语言。现在,您还可以用它来开发后端组件,iOS 和其他移动平台可以使用这些组件向用户提供独特的体验和功能!</p>    <p> </p>    <p>来自: <a href="/misc/goto?guid=4959672853254603833" rel="nofollow">http://www.ibm.com/developerworks/cn/mobile/zones/10-steps-to-running-a-swift-app-in-an-ibm-container/index.html?ca=drs-</a></p>