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

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

在这里输入图像说明

使用Xcode处理代码,然后在docker buildterminal上运行。 它build立。 你docker run ,你甚至可以在localhost本地查看网页 。 然后,您可以通过docker push 送到AWS主云并进行托pipe。

这很好。

但是如果我想使用Swift-Docker-Kitura“不在Mac上”呢?

你能“build立”和“推”这样一个快速的项目,也许在一个正常的unix框,或在AWS上?

您可以在MacOS上工作,使用docker在Ubuntu上构build并运行Kitura应用程序 – 请参阅本教程http://www.kitura.io/en/starter/leveragedocker.html

您还可以直接在Ubuntu上开发,构build和运行Kitura应用程序,使用任何文本编辑器和命令行swift build

您的select是有限的。 首先,Swift目前仅在Ubuntu上获得authentication。 所以要开发的主机必须运行Ubuntu,或者运行Docker,在其下运​​行Ubuntu。

理论上你也可以在目标主机上编译swift。 我曾经为Debain(Jessie)做了一个老版本的Swift,虽然我设法把它编译出来,但它肯定不稳定。 从那时起情况可能有所改善,我没有检查过。

所以最简单的方法就是依靠Docker。 这也让你仍然可以通过在Xcode中进行编辑,然后在命令行上进行开发,你可以select手动编译它。

我使用下面的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。

我想要做的最后一点是使用build目录。 我使用Makefile来执行构build,并在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进行构build,Linux将使用.build-Linux文件。 在构build期间,文件Package.pins被删除,以确保在两个环境之间不会传输有关要使用的版本的内存。