我想,复习一下创建一个 IBM Container 来托管用 Swift 编程语言编写的示例服务器端应用程序的步骤,这对您可能有所帮助。示例应用程序将会侦听端口 9080,并向客户端返回一个基本的 HTML 响应。虽然示例应用程序不是一个生产就绪应用程序,但它可以让您了解,使用 Swift 可以开发不同类型的服务器端应用程序。
我们会向不熟悉 Swift 的人介绍一下它,Swift 是苹果公司创造的一种现代的编程语言,可用于开发 OS X 和 Linux 的应用程序。除了 Swift 之外,苹果公司还实现了 Swift Package Manager (SPM) 工具,用该工具来构建 Swift 应用程序,并指定它们的依赖关系。值得一提的是,示例服务器应用程序遵循 SPM 所要求的结构和约定。因此,SPM 可用于编译和创建可执行的示例服务器程序。
在复习创建 IBM Container 来托管示例 Swift 示例服务器应用程序的步骤之前,让我们简单讨论一下开发人员选择这样做的一些原因:
现在,让我们复习那些您想要了解的步骤!如果您遵循以下 10 个简单的步骤,就可以很轻松地在 Bluemix 上的 IBM Container 中运行 Swift 示例应用程序。
I 安装 Docker
首先,应该在您的开发系统上安装最新版本的 Docker 。完成安装后,应该启动一个 Docker 会话。在 OS X 系统上,您可以使用 Docker QuickStart Terminal 程序启动一个 Docker 会话。启动 Docker 会话后,就会出现一个终端窗口,您可以从该窗口中发出 Docker 命令。
II 安装 Cloud Foundry 命令行
第二步是在您的系统上安装最新版的 Cloud Foundry 命令行 。该命令行使您可以对 Bluemix 云执行命令。
III 配置 Cloud Foundry 命令行
在尝试使用 Cloud Foundry 命令行之前,应该先配置它,以便它能与您的 Bluemix 地区进行通信:
使用 cf api 命令指定 Bluemix 地区 URL,如下面的例子所示:
$ cf api https://api.ng.bluemix.net Setting api endpoint to https://api.ng.bluemix.net... OK ...
现在,您应该执行 身份验证 ,并使用 cf login 命令访问您的 Bluemix 组织和空间:
$ cf login API endpoint: https://api.ng.bluemix.net Email> john_doe@us.ibm.com ...
IV 安装并配置 IBM Containers 插件
完成 Cloud Foundry 命令行的配置后,您应该安装和初始化 IBM Containers 插件 。在 OS X 系统上,可以发出以下命令来安装该插件:
$ cf install-plugin https://static-ice.ng.bluemix.net/ibm-containers-mac
安装 IBM Containers 插件后,需要通过执行 cf ic init 命令来初始化它。请注意,由 IBM Containers 插件解释的任何命令 (cf ic <cmd>) 都应该从 Docker 终端窗口提交:
$ cf ic init Deleting the old configuration file... Retrieving client certificates from IBM Containers... ...
V 获得您的命名空间
为了利用 IBM Containers 插件,您需要获得分配给您的组织的命名空间。您可以通过发出以下命令来找到您的命名空间:
$ cf ic namespace get space1
记下返回的命名空间的值(如 space1),因为您很快会用到它!
VI 下载 Docker 镜像
我们的团队已将两个 Docker 镜像发布到 Docker Hub,放在 IBM 组织下面:
为了将您的 Swift 应用程序部署到 Bluemix 上的 IBM Container,您可以根据 ibmcom/swift-ubuntu 镜像创建一个新的 Docker 镜像。请注意,这正是我们对 Swift 示例应用程序所执行的操作!
您可以在 ibmcom/swift-ubuntu 镜像的 GitHub 库 中找到它的 Dockerfile。这个 Dockefile 下载并安装 1) Swift 二进制文件和它的依赖关系;2) swift-corelibs-libdispatch 库;3) 我们在 Swift 开发工作中认为有用的几个系统级软件包。
ibmcom/swift-runtime 镜像的 Dockerfileis 的内容如下所示:
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"]
如果您想知道,start-swift-helloworld.sh 文件的内容如下:
# Run sample server cd /root/swift-helloworld && .build/debug/Server
正如我们可以在上面看到, Swift 示例应用程序 的源代码是在创建 Docker 镜像的过程中被下载和编译的。此外,请注意,start-swift-helloworld.sh shell 脚本只负责启动示例服务器应用程序。
我们最初认为,在创建容器时下载 Swift 示例应用程序的源代码可确保每个新的 IBM Container 都具有最新的可用代码。但是,我们注意到,这样做可能会导致网络问题。第一次启动 IBM Container 时,网络配置还没有准备好。因此,尝试克隆一个 git repo 可能会产生错误,导致停止容器。
现在,让我们使用以下命令从 Docker Hub 下载 ibmcom/swift-runtime 镜像:
$ docker pull ibmcom/swift-runtime:latest
VII 标记 Docker 镜像
下一步是用您的私有 Bluemix 注册表和镜像名称来标记 ibmcom/swift-runtime Docker 镜像。用注册表信息标记镜像可以让 Docker 知道,您打算将哪个镜像推送到 Bluemix 注册表,而不是 Docker Hub:
docker tag -f ibmcom/swift-runtime <bluemix registry>/<namespace>/swift-runtime
您应该用分配给您的组织的命名空间替换 <namespace>,并用您的 Bluemix 地区的注册表名称替换 <bluemix registry>。例如,对于美国南部地区,注册表名称是 registry.ng.bluemix.net。
请注意,您将执行 docker tag 命令来创建一个原始 Docker 镜像副本。您可以通过执行 docker images 命令来验证这一点:
$ 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
VIII 将 Docker 镜像推送到 Bluemix 注册表
我们现在已准备好,通过发出以下命令将标记过的镜像推送到 Bluemix:
$ docker push <bluemix registry>/<namespace>/swift-runtime
像以前一样,务必使用您的命名空间替换 <namespace>,并用您的 Bluemix 地区的注册表名称替换 <bluemix registry>。
IX 获得一个公网 IP 地址
要访问 IBM Container,必须将为其分配一个公网 IP 地址。您可以通过发出以下命令,使用 IBM Containers 插件来请求 IP 地址:
$ cf ic ip request OK The IP address "X.X.X.X" was obtained.
X 创建 IBM Container
我们现在已准备好创建一个 IBM Container 来托管 Swift 示例应用程序。通过执行一个简单的命令来创建 IBM Container,并分配您在先前的步骤中获得的 IP 地址:
$ cf ic run -p <ip_address>:9080:9080 --name swift-runtime <bluemix registry>/<namespace>/swift-runtime
请注意,您应该将 <ip_address>、<bluemix registry> 和 <namespace> 替换成相应的值。
就是这样!您现在应该有一个运行 Swift 示例应用程序的 IBM Container。如果访问 Bluemix 上的仪表板,您会看到与刚刚创建的 swift-runtime 容器对应的条目。您可以单击该条目,验证该容器已启动并运行。此外,您还可以使用浏览器测试 Swift 示例服务器确实正在运行,访问 http://<ip_address>:9080,其中 <ip_address> 是分配给您的 IBM Container 的 IP 地址。您的浏览器上应该显示“Hello from Swift on Linux!”消息。
这些是让 Swift 开发人员非常兴奋的时刻。最初,Swift 是一种仅用于 iOS 应用程序开发的语言。现在,您还可以用它来开发后端组件,iOS 和其他移动平台可以使用这些组件向用户提供独特的体验和功能!
原文请访问 IBM developerWorks / Developer CentersSwift@IBM。
Swift 和 Swift 标志属于 Apple Inc。