WAS(Web Assembly) 써보기

Soyeon You·2023년 5월 15일

Cloud

목록 보기
1/1

WAS란?

WAS란 원래 Javascript만 실행 가능한 web browser에서 다른 프로그래밍 언어를 사용하기 위해 Javascript interpreter bytecode로 compile하여 브라우저에서 실행하는 기술이다.

Docker로 WebAssembly를 build&run 해보자

(참고자료)
https://docs.docker.com/desktop/wasm/
https://developer.mamezou-tech.com/blogs/2023/01/25/using-wasm-on-docker/

WAS Install 하기

두 가지 방법으로 설치할 수 있다. 본인이 편한 방법을 사용하면 됨! (하지만 docker run 추천)

1. Docker run을 써서 WAS를 install 한다.

docker run -dp 8080:8080 \
  --name=wasm-example \
  --runtime=io.containerd.wasmedge.v1 \
  --platform=wasi/wasm32 \
  michaelirwin244/wasm-example

실행하면 아래와 같이 image가 검색되어 실행된다.

2. Docker-compose up을 써서 WAS를 install 한다.

repository clone 해온다.

git clone https://github.com/second-state/microservice-rust-mysql.git

clone 한 directory로 이동해서 docker-compose.yml 파일을 수정한다.

cd microservice-rust-mysql
vi docker-compose.yml
#docker-compose.yml
services:
  app:
    image: michaelirwin244/wasm-example
    platform: wasi/wasm32
    runtime: io.containerd.wasmedge.v1
    ports:
      - 8080:8080

docker-compose up -d로 WASM을 run한다.

docker-compose up -d

Install 확인하기

8080 port에서 WASM 바이너리가 서버로 시작되는 걸 확인할 수 있다.

docker ps

container image를 확인해보면 일반 image보다 훨씬 작다.

docker image ls

image 정보도 확인할 수 있다.

docker image inspect "img" | grep -A 3 "Architecture"

http://localhost:8080/ 으로 접속해서 아래와 같은 메세지를 확인한다면 정상적으로 설치완료!

일반 컨테이너와 상호 운영 해보자

Docker 공식 문서에서 제공하는 WASM과 일반 컨테이너를 혼합해서 MySQL에 데이터를 저장하는 WA 샘플을 써볼 것이다.

docker-compose.yml을 다음과 같이 작성한다.

services:
  client:
    image: nginx:alpine
    ports:
      - 8090:80
    volumes:
      - ./client:/usr/share/nginx/html
  server:
    image: demo-microservice
    platform: wasi/wasm
    build:
      context: .
    ports:
      - 8080:8080
    environment:
      DATABASE_URL: mysql://root:whalehello@db:3306/mysql
      RUST_BACKTRACE: full
    restart: unless-stopped
    runtime: io.containerd.wasmedge.v1
  db:
    image: mariadb:10.9
    environment:
      MYSQL_ROOT_PASSWORD: whalehello
docker-compose up -d

http://localhost:8090/ 으로 접속해서 아래와 같은 화면을 확인한다면 정상적으로 설치완료!

마무리하기

이번엔 Docker Desktop에 통합된 WASM 실행 환경인 Docker+Wasm을 사용해보았다.
WASM 런타임이 포함된 이미지를 준비하지 않고 Docker가 직접! WASM을 실행해줘서 Image도 작고 일반 컨테이너와의 상호 운용도 간단했다.

추가로 Kubernetes의 경우 WASM 워크로드를 직접 실행할 수 있는 Krustlet이라는 OSS가 개발됐다고 한다.

0개의 댓글