HTTP 服务端实例

    这个 HTTP 服务应用程序是基于 Rust 开发,并采用了 。

    Kubernetes 可以使用 CRI-O、Docker 和 Containerd 来管理 wasm 应用程序生命周期。

    这是一个 Rust 示例,它需要你先安装 Rust 和 以便可以编译运行 http 服务。

    1. cargo build --target wasm32-wasi --release

    wasm 字节码应用程序现在应该位于 ./target/wasm32-wasi/release/http_server.wasm 目录下。 你现在可以使用 wasmedge 测试运行它,然后将其发布为容器镜像。

    1. chmod +x ./target/wasm32-wasi/release/http_server.wasm

    你可以在另一个的终端窗口中测试这个服务端。

    1. echo: name=WasmEdge

    target/wasm32-wasi/release 文件夹中创建一个命名为 Dockerfile 的文件,其内容如下:

    1. FROM scratch
    2. ADD http_server.wasm /
    3. CMD ["/http_server.wasm"]

    crun 容器运行时可以启动上述基于 WebAssembly 的容器镜像。但它需要容器镜像上的 注释来表明它是一个没有客人操作系统(安装在虚拟机上的系统)的 WebAssembly 应用程序。你可以在官方 crun repo 中找到详细信息。

    在 Ubuntu zesty 和 xenial 上,使用这些命令为 buildah 做准备。

    然后,按照下列步骤在 Ubuntu 上编译和安装 buildah。

    1. mkdir -p ~/buildah
    2. cd ~/buildah
    3. export GOPATH=`pwd`
    4. git clone https://github.com/containers/buildah ./src/github.com/containers/buildah
    5. cd ./src/github.com/containers/buildah
    6. PATH=/usr/lib/go-1.16/bin:$PATH make
    7. cp bin/buildah /usr/bin/buildah
    8. buildah --help

    创建和发布具备 buildah 的容器镜像

    target/wasm32-wasi/release/ 文件夹下,执行下列指令。

    1. #
    2. # make sure docker is install and running
    3. # systemctl status docker
    4. # to make sure regular user can use docker
    5. # sudo usermod -aG docker $USER#
    6. # newgrp docker
    7. # You may need to use docker login to create the `~/.docker/config.json` for auth.
    8. #
    9. # docker login

    好了! 现在你可以尝试在 或 Kubernetes 上运行它了!