CS/wasm
wasm 컨테이너 실행하기
아야는 못말려
2024. 11. 28. 23:18
wasm 컨테이너 이미지 생성하기
타겟 추가하기
rustup target add wasm32-wasip1
프로젝트 생성하기
cargo new http-server
설정 변경하기
[package]
name = "http-server" # 프로젝트 이름
version = "0.1.0" # 프로젝트 버전
edition = "2021" # Rust 에디션
[dependencies]
tokio_wasi = { version = "1", features = ["rt", "macros", "net", "time", "io-util"]}
warp_wasi = "0.3.3" # warp_wasi 의존성
코드 수정하기
// src/main.rs
use warp::Filter;
#[tokio::main(flavor = "current_thread")]
async fn main() {
let hello = warp::get()
.and(warp::path::end())
.map(|| "Hello, World!");
println!("Listening on http://0.0.0.0:8080");
warp::serve(hello)
.run(([0, 0, 0, 0], 8080))
.await;
}
빌드하기
cargo build --target wasm32-wasip1 --release
잘 실행되는지는 wasmedge를 사용해서 실행해볼 수 있습니다. 먼저 wasmedge를 설치합니다.
curl https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash
그리고 wasmedge를 이용해서 실행해보도록 하겠습니다.
wasmedge target/wasm32-wasip1/release/http-server.wasm
실행 결과
이미지 빌드해보기
wasm을 컨테이너로 동작시키기 위해서 이미지를 빌드해야합니다.
WebAssembly 모듈을 컨테이너 이미지로 패키징
wasm-edge를 런타임으로 두고 실행하는 경우
FROM wasmedge/slim-runtime:0.10.1
COPY target/wasm32-wasip1/release/http-server.wasm /
CMD ["wasmedge", "--dir", ".:/", "/http-server.wasm"]
(다음에 해볼 예정) wasmedge가 컨테이너 런타임인 경우
FROM scratch
COPY target/wasm32-wasip1/release/http-server.wasm /
CMD ["/http-server.wasm"]
docker로 빌드한다면
docker build -t docker.io/unknown/wasm-demo-app:v1 .
buildah로 빌드한다면
buildah build -t wasm-demo-app:slim .
빌드 했을 때 워닝 뜨는 것
docker desktop (혹은 orbstack)으로 실행해보기
docker run -itd -p 8080:8080 \
--name wasm-demo-app docker.io/unknown/wasm-demo-app:v1