使用Docker + Kitura,但不能在Mac上使用

时间:2017-11-30 20:43:04

标签: docker kitura

我在Mac上有一个完美的Swift-Docker-Kitura项目...

enter image description here

您使用Xcode处理代码 ,然后在终端docker build处理。它构建。您docker run,您甚至可以在localhost上本地查看网页。然后,您可以docker push并将转到主AWS云并托管。

这一切都很棒。

但是如果我想使用Swift-Docker-Kitura"而不是在Mac&#34上呢?

你能"建立"和"推"这样一个快速的项目 - 在AWS(或类似服务)上的某种shell上?

2 个答案:

答案 0 :(得分:5)

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

  1. 从Mac上的Xcode项目运行它,在Xcode中构建。
  2. 在Mac上的命令行中运行它,使用swift build
  3. 进行构建
  4. 在Ubuntu的命令行中运行它,使用swift build构建。
  5. 在支持Cloud Foundry buildpack的云上运行它。见https://github.com/IBM-Swift/swift-buildpack。例如,在IBM Bluemix上,请参阅https://console.bluemix.net/catalog/starters/runtime-for-swift
  6. 在任何支持docker的平台上,在Ubuntu docker中运行它,请参阅http://www.kitura.io/en/starter/leveragedocker.html
  7. 使用Kitura应用程序代码创建docker镜像(请参阅https://github.com/IBM-Swift/swift-ubuntu-docker#using-ibmcomswift-ubuntu-runtime)并将其推送到支持执行docker镜像的任何云。例如,IBM Bluemix Kubernetes Cluster https://console.bluemix.net/containers-kubernetes/catalogCluster
  8. 您甚至可以将其嵌入iOS应用程序中,请参阅https://developer.ibm.com/swift/2017/03/13/kitura-ios/
  9. 您可以在大型机上运行它,请参阅https://developer.ibm.com/swift/2017/10/05/swift-zos-swift-4-0-beta-update/
  10. 从iPhone到大型机,Mac,Ubuntu,Docker和各种云提供商,这些都是运行Kitura的选项。

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

答案 1 :(得分:2)

您的选择有限。首先,Swift目前仅在Ubuntu上获得认证。因此,您要开发的主机必须运行Ubuntu,或者必须运行Docker,您可以在其下运行Ubuntu。

理论上,您还可以在目标主机上编译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,以确保在两个环境之间不传输有关要使用的版本的内存。