使用 Docker + Kitura,但不使用 Mac

Use Docker + Kitura, but not on a Mac

我在 Mac ...

上有一个非常好的 Swift-Docker-Kitura 项目

您使用 Xcode 处理代码 ,然后在终端中 docker build。它建立。您 docker run,甚至可以 在本地主机上本地查看网页 。然后您可以 docker push 并且它 进入主 AWS 云 并被托管。

太好了。

但是如果我想使用 Swift-Docker-Kitura "not on a Mac" 怎么办?

你能 "build" 和 "push" 这样的 swift 项目 - 在 AWS(或类似服务)上的某种 shell 上吗?

有多种构建和 运行 Kitura Web 应用程序的选项,但并非所有选项都得到官方支持。

  1. 运行 它来自 Mac 上的 Xcode 项目,在 Xcode.
  2. 中构建
  3. 运行 它在 Mac 上的命令行中,使用 swift build.
  4. 构建
  5. 运行 它在 Ubuntu 上的命令行中,使用 swift build.
  6. 构建
  7. 运行 它在支持 Cloud Foundry 构建包的云上。参见 https://github.com/IBM-Swift/swift-buildpack. For example, on IBM Bluemix, see https://console.bluemix.net/catalog/starters/runtime-for-swift
  8. 运行 它在 Ubuntu docker 中,参见 http://www.kitura.io/en/starter/leveragedocker.html,在任何支持 docker.
  9. 的平台上
  10. 使用 Kitura 应用程序代码创建 docker 图像(参见 https://github.com/IBM-Swift/swift-ubuntu-docker#using-ibmcomswift-ubuntu-runtime) and push it to any cloud that supports executing docker images. For example, IBM Bluemix Kubernetes Cluster https://console.bluemix.net/containers-kubernetes/catalogCluster
  11. 您甚至可以将其嵌入到 iOS 应用程序中,请参阅 https://developer.ibm.com/swift/2017/03/13/kitura-ios/
  12. 而且您可以在大型机上 运行 它,请参阅 https://developer.ibm.com/swift/2017/10/05/swift-zos-swift-4-0-beta-update/

从 iPhone 到大型机,在 Mac、Ubuntu、Docker 和各种云提供商上,这些是 运行 Kitura 的选项。

免责声明:我在 IBM 工作。截至本次编辑之日(2017 年 12 月 28 日),据我所知,Kitura 仅在此处描述的环境中受 IBM 支持 https://developer.ibm.com/swift/2017/10/30/commercial-support/

您的选择有限。首先 Swift 目前仅在 Ubuntu 上获得认证。所以你想开发的 host 要么必须 运行 Ubuntu 要么必须 运行 Docker 在其下你可以 运行 Ubuntu。

理论上你也可以在目标 host 上编译 swift。我曾经为 Debain (Jessie) 为 Swift 的旧版本做过一次,虽然我设法编译了它,但它肯定不稳定。从那以后情况可能有所改善,我还没有检查过。

所以最简单的方法就是靠Docker。这还允许您通过在 Xcode 中编辑,然后在命令行上选择手动编译它,仍然可以在 mac 上进行开发。

我使用以下 bash 函数打开我的 Linux 环境:

SwiftDocker2 ()
{
    name=`perl -e 'open IN, "</usr/share/dict/words";rand($.) \
        < 1 && ($n=$_) while <IN>;print $n'`;
    docker run -i -t --name=${name} -h ${name} --log-driver=json-file \
        -w /project -v $(pwd):/project -p 9000:9000 ibmcom/swift-ubuntu /bin/bash;
    echo "Created image ${name}";
    echo "Stopping image";
    docker stop ${name};
    echo "Removing image";
    docker rm ${name}
}

在上面的示例中,我打开了您的应用程序可能不需要的端口 9000。

我想说的最后一点是构建目录的使用。我使用 Makefile 进行构建,在 Makefile 中有以下部分:

BUILD_LINUX = "./.build-linux"
BUILD_MACOS = "./.build-macos"
UNAME = $(shell uname)

ifeq (${UNAME}, Darwin)
BUILD_PATH = ${BUILD_MACOS}
else
BUILD_PATH = ${BUILD_LINUX}
endif

xcode:
    @swift package --build-path ${BUILD_PATH} -Xlinker -L/usr/local/lib generate-xcodeproj

build:
    rm -f Package.pins
    swift build --build-path ${BUILD_PATH} -Xlinker "-L/usr/local/lib"

通过使用此构造,MacOS 环境将使用目录 .build-macos 进行构建,Linux 将使用文件 .build-Linux .文件 Package.pins 在构建期间被删除,以确保一些关于要使用的版本的内存不会在两个环境之间传输。