WAS란 원래 Javascript만 실행 가능한 web browser에서 다른 프로그래밍 언어를 사용하기 위해 Javascript interpreter bytecode로 compile하여 브라우저에서 실행하는 기술이다.
(참고자료)
https://docs.docker.com/desktop/wasm/
https://developer.mamezou-tech.com/blogs/2023/01/25/using-wasm-on-docker/
두 가지 방법으로 설치할 수 있다. 본인이 편한 방법을 사용하면 됨! (하지만 docker run 추천)
docker run -dp 8080:8080 \
--name=wasm-example \
--runtime=io.containerd.wasmedge.v1 \
--platform=wasi/wasm32 \
michaelirwin244/wasm-example
실행하면 아래와 같이 image가 검색되어 실행된다.

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
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가 개발됐다고 한다.