在上一篇中,我们达成了安装 Eclipse 和定义自定义指令等。虽然这一切很好,但我们希望这个工作是可扩展的,也就是说可以和我们的朋友或者同事分享这个环境。幸运的是,这个可以通过在 che 里面定义一个 Stack 来实现。Stack 某种意义上像一个 workspace 的蓝图。如果你熟悉面向对象技术的话,stack 可以比喻为一个 java 类,而一个类的实例被称为 workspace。Che 的 Dashboard UI 支持 stack 的定义。我们不需要自己写代码来完成这个工作。技术上说,一个 Che 的 stack 基于一或多个 Docker 文件。如果我们想提供一个实现装好 Eclipse modeling Edition 的 stack,我们需要提供一个实际包含这个 stack 的 docker image。
无论何时,如果你想创建自己的 docker image 作为 Stack 的话,最好是使用一个 Che 的 image 作为你的 base。这样,你不需要维护一些如 Java 之类的先决条件。在我们的例子中,我们将使用 Java stack 的 base image。这里是我们使用的 Docker 文件,如你所见它很小。我们加了一些注释,使其可以让人理解。
FROM codenvy/ubuntu_jdk8
MAINTAINER Mathias Hansen mhansen@eclipsesource.com
USER root
# Install Eclipse Modeling Tools
RUN echo “Installing eclipse…”
cd /
wget -q -O – https://ftp.fau.de/eclipse/technology/epp/downloads/release/neon/1/eclipse-modeling-neon-1-linux-gtk-x86_64.tar.gz | tar zx
# Reset to the default user
USER user
在你写完这段 dockerfile 之后,你需要 build 它。使用如下指令:
docker build -t eclipsesource/emfneon_jdk8
最后,你可以将你的新 image 推送进注册表或者储存库,比如 Docker Hub。现在我们可以根据新的 Docker 镜像设置 Che stack。通过 Che 的 UI 里面的按键添加新的 stack。如下图
如你所见,你可以给你的 Stack 命一个之后方便寻找的名字,定义你想启动的 machine(比如 default)以及要使用的 docker 镜像。除此之外,你可以添加命令(比如上一篇的 Run EMF Code Generator)。最后,选择罗列 Stack 的目录。如果你滑到屏幕低端,你可以用 json 格式编辑你的 Stack 的配置。如果,你想将你的 Stack 的配置分享给好友的话,可以复制发送就行了。我们 EMF stack 的 Json 文件如下,你可以复制进去试试看。
{
“name”: “EMF”,
“description”: “EMF Stack”,
“scope”: “advanced”,
“tags”: [
“Java 1.8”,
“EMF”
],
“components”: [
{
“name”: “Eclipse Modeling Edition”,
“version”: “Neon.2”
}
],
“source”: {
“type”: “image”,
“origin”: “codenvy/ubuntu_jdk8”
},
“workspaceConfig”: {
“environments”: {
“EMF”: {
“machines”: {
“dev-machine”: {
“agents”: [
“org.eclipse.che.terminal”,
“org.eclipse.che.ws-agent”,
“org.eclipse.che.ssh”
],
“servers”: {},
“attributes”: {
“memoryLimitBytes”: “2147483648”
}
},
“EMF”: {
“agents”: [
“org.eclipse.che.terminal”,
“org.eclipse.che.ssh”
],
“servers”: {},
“attributes”: {}
}
},
“recipe”: {
“content”: “services:\n dev-machine:\n image: codenvy/ubuntu_jdk8\n EMF:\n image: eclipsesource/emfneon_jdk8\n mem_limit: 2147483648\n”,
“contentType”: “application/x-yaml”,
“type”: “compose”
}
}
},
“name”: “default”,
“defaultEnv”: “EMF”,
“description”: null,
“commands”: [
{
“name”: “Run EMF Code Generator”,
“type”: “custom”,
“commandLine”: “/eclipse/eclipse -noSplash -data ${current.project.path} -application org.eclipse.emf.codegen.ecore.Generator -model -edit ${current.project.path}/org.eclipse.emf.ecp.makeithappen.model/model/task.genmodel “,
“attributes”: {}
}
]
}
}
现在,我们就可以和其他的编程者共享我们的开发环境了。我们的工具已经捆绑进了一个 Che 的工作空间。你唯一需要的就是一个 json 文件。
将 Tooling 装进 Che 的 workspace 是很简单的,利用强大又轻巧的扩展机制。基本上,每一个在 Docker 容器里面可以运行的工具都可以使用。通过这个我们可以扩展 Che 而不需要任何代码。但是,这里我们除了添加命令,还没有扩展过 IDE。这将在下一篇中介绍。