pre.ctl { font-family: "Liberation Mono", monospace }
p { margin-bottom: 0.25cm; line-height: 120% }
code.ctl { font-family: "Liberation Mono", monospace }
a:link { }
我的学习 笔记
2017/9/25
一、 搭建Unik的开发环境
去到官方教程网址:https://github.com/cf-unik/unik
然后进入到具体教程文档:https://github.com/cf-unik/unik/blob/master/docs/getting_started.md
——》unik/docs/getting_started.md
0,依据教程需要先安装如下软件包:
Docker installed and running (Docker machine and Docker for Mac are supported)
jq
make
- Virtualbox (if using the virtualbox provider)
——》安装方法:
(可以参考)在Ubuntu 14.04安装和使用Docker的教程:
http://www.linuxidc.com/Linux/2015-08/121088.htm
关键命令: apt-get -y install docker.io
注意:我们需要root权限才能执行软件安装的命令,所以普通用户下 要在命令前面加上:sudo
剩下的软件安装就比较简单:例如 sudo apt-get install jq
1,安装、配置和启动Unik??
(1)安装Unik
$
git clone https://github.com/emc-advanced-dev/unik.git
$
cd unik
$
make binary
或者执行:
$
make
$ _build/unik
#
编译成功后,执行此条命令 会出现如下提示:
Unik
is a tool for compiling application source code
into
bootable disk images. Unik also runs and manages unikernel
instances
across infrastructures.
...
这将在目录unik / _build / 下生成可执行文件:unik。
使用./_build/unik就可运行UniK命令,或将二进制文件移动到路径的某个位置,例如/ usr / local / bin,可以在任何路径下执行unik命令:unik [command] ,执行命令如下:
$
mv _build/unik /usr/local/bin/
2、在virtualbox上配置主机网络
(1)打开虚拟机:$virtualbox
(2)
打开管理>全局设定>网络>仅主机网络
—》
点击用户界面右侧的绿色添加按钮
—》
记录新的仅主机适配器的名称(例如“vboxnet0”)。您将需要在UniK配置中
—》确保此主机网络启用了Virtualbox
DHCP服务器:
a.选择主机网络后,单击编辑按钮(螺丝刀图像)
b.在“适配器”选项卡中,记下适配器的IPv4地址和网络掩码。
c.
在“DHCP服务器”选项卡中,选中“启用服务器”框
设置服务器在与适配器IP相同的子网上寻址IP。例如,如果适配器IP为192.168.100.1,请将DHCP服务器IP设置为192.168.100.X,其中X为2-254之间的数字。
d.
将服务器掩码设置为您刚刚注意到的网络掩码
将上/下地址设置为同一子网上的IP范围。我们建议使用范围X-254,其中X比您用于DHCP服务器本身的IP高一个。如果您的DHCP服务器为192.168.100.2,则可以分别将下限和上限设置为192.168.100.3和192.168.100.254。
例如:
3.
配置 UniK
daemon (守护进程)
- UniK
配置文件存储在$HOME/.unik
,如果不存在,就创建此目录:
$mkdir $
HOME
/.unik
(备注说明:
.
表示是隐藏文件,这里的
HOME/
表示目录:
home/
用户名
)
在
$HOME/.unik/
目录下创建一个
daemon-config.yaml
文件
,写入以下内容
:
providers:
virtualbox:
- name: my-vbox
adapter_type: host_only
adapter_name: NEW_HOST_ONLY_ADAPTER
用您创建的网络适配器的名称替换NEW_HOST_ONLY_ADAPTER。
4.
启动UniK并自动部署VirtualBox实例侦听器(
Virtualbox
Instance Listener )
- 打开一个新的终端窗口。 这个终端将是我们离开UniK守护进程的地方。
cd
到由
make
创建的
_build
目录
- 执行命令:sudo
unik daemon --debug
(--debug标志是可选的,如果你想看到更详细的输出) - UniK将编译和部署自己的30 MB unikernel。 这个unikernel是Unik Instance Listener. The Instance Listener uses udp广播来检测(IP地址)和在Virtualbox上运行的引导实例.
- 完成后,UniK正在运行并准备好接受命令.
如图:
- 打开一个新的终端窗口执行命令:unik
target --host localhost,将CLI目标设置为本地计算机。
二、写一个Go
HTTP服务器
- 从守护进程运行的窗口离开 ,打开一个新的终端窗口。此窗口将用于运行UniK
CLI命令。 - 使用文本编辑器创建一个文件 :
httpd.go
。 将以下代码复制并粘贴到该文件中:
package maind
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "my first unikernel!")
}
- 尝试运行此代码:go run http.go.访问 http://localhost:8080/ 看到服务器正在运行。
我们需要创建一个虚拟的Godep文件。告诉Go编译器如何构建Go项目及其依赖关系是必要的。幸运的是,在这个例子中,我们的项目没有依赖关系,我们可以填写一个简单的Godep文件,而无需安装godep
.注意:对于具有导入依赖关系的Go项目和嵌套包,您将需要安装Godeps并在项目中运行GO15VENDOREXPERIMENT=1 godep save ./..
。有关详细信息,请参阅使用UniK编译Go应用程序: Compiling Go Apps with UniK 。
具体操作步骤:https://github.com/tools/godep
其他学习网站:
GOPATH设置
go 命令依赖一个重要的环境变量:$GOPATH
$ gedit ~/.bashrc
在打开的.bashrc文件中加入如下内容:
export GOPATH=/home/shm/gocode
再执行安装命令:$ go get github.com/tools/godep
(注意:执行该命令后,可能会遇到一些问题,需要根据内容提示,一步步来解决)
- 要创建虚拟Godeps文件,请在与httpd.go相同的目录中创建名为Godeps的文件夹。 在里面,创建一个名为Godeps.json的文件并粘贴以下内容:
{
"ImportPath": "my_httpd",
"GoVersion": "go1.6",
"GodepVersion": "v63",
"Packages": [
"./.."
],
"Deps": [
{
"ImportPath": "github.com/cf-unik/unik/docs/examples",
"Rev": "f8cc0dd435de36377eac060c93481cc9f3ae9688"
}
]
}
- 为了这个例子的目的,这里重要的是my_httpd。 它指示go编译器,该项目应该从$ GOPATH / src / my_httpd安装。
例如:
‘/home/shm/gocode/src/my_httpd/httpd.go‘
- 很好!
现在我们已经准备好将这个代码编译成unikernel。
三、 编译镜像并在Virtualbox上运行
- 从httpd.go所在的目录运行以下命令:
unik
build --name myImage --path ./ --base rump --language go --provider
virtualbox
该命令将指示UniK使用rump-go-virtualbox编译器编译工作目录(./)中找到的源。
2.您可以在运行守护程序的终端窗口中观察build命令的输出。
3.构建完成后,生成的磁盘映像将驻留在$ HOME / .unik / virtualbox / images / myImage /boot.vmdk
4.运行此映像的实例:
unik
run --instanceName myInstance --imageName myImage
- 当实例完成启动时,我们来检查它的IP,看看它正在运行我们的应用程序。
- 执行命令:
unik instances
。
应列出实例IP地址。
7.将您的浏览器指向http:// instance-ip:8080,并看到您的实例正在运行!
测试结果图:
8.清理您的镜像和您创建的实例:
unik rmi --force --image myImage