成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Docker + WebAssembly 集成簡介

云計算 云原生
WebAssembly,通常簡稱為 Wasm,是一種相對較新的技術,它允許你編譯用 40 多種語言(包括 Rust、C、C++、JavaScript 和 Golang)編寫的應用程序代碼,并在沙盒環境中運行它。

Docker+Wasm 的技術預覽版現在已經發布了,Wasm 最近引起了很多轟動,該功能將使你更容易快速構建針對 Wasm 運行時的應用程序。

作為本次發布的一部分,我們也很高興地宣布 Docker 將作為投票成員加入字節碼聯盟[1],字節碼聯盟是一個非營利組織,致力于在 WebAssembly 和 WebAssembly 系統接口(WASI)等標準的基礎上,創建安全的新軟件基礎。

什么是 Wasm?

WebAssembly[2],通常簡稱為 Wasm,是一種相對較新的技術,它允許你編譯用 40 多種語言(包括 Rust、C、C++、JavaScript 和 Golang)編寫的應用程序代碼,并在沙盒環境中運行它。

最初的用例主要是在 Web 瀏覽器中運行本地代碼,例如 Figma、AutoCAD 和 Photoshop。而實際上,fastq.bio 將其基于 Web 的 DNA 序列質量分析儀轉換為 Wasm 時,速度提高了 20 倍。迪士尼在 Wasm 之上構建了他們的 Disney+ 應用程序開發工具包。瀏覽器的好處是顯而易見的。

但是由于 WebAssembly 系統接口(WASI)的存在,Wasm 正在迅速向瀏覽器之外擴展,Vercel、Fastly、Shopify 和 Cloudflare 等公司支持使用 Wasm 在邊緣運行代碼,而 Fermyon 正在構建一個平臺,以在云上運行 Wasm 微服務。

為什么是 Docker?

在 Docker,我們的目標是通過克服應用程序開發的復雜性,來幫助開發人員將他們的想法變為現實。無論底層技術如何,我們都努力使構建、共享和運行你的應用程序變得更容易。通過讓所有人都可以使用容器,我們證明了我們有能力讓開發者的生活更輕松,并被公認為是第一大最受喜愛的開發者工具。

我們將 Wasm 視為 Linux 容器的補充技術[3],開發人員可以根據使用情況選擇使用哪種技術(或兩者都使用!)。隨著社區探索 Wasm 的可能性,我們希望幫助使 Wasm 應用程序更容易開發、構建和運行,使用你所熟悉和喜愛的經驗和工具。

如何獲取預覽版?

你是否已經準備好開始來親自嘗試了嗎?很好!但在此之前,你需要記住幾個注意事項:

  • 重要事項 #1:這是 Docker Desktop 的技術預覽版本,可能無法按預期工作,請務必在繼續之前備份你的容器和鏡像。
  • 重要事項 #2:該預覽版啟用了 containerd 鏡像存儲,并且不能被禁用。如果您當前未使用 containerd 鏡像存儲,則將無法訪問預先存在的鏡像和容器。

你可以在下面下載 Docker Desktop 的技術預覽版本:

  • macOS Apple Silicon[4]
  • macOS Intel[5]
  • Windows AMD64[6]
  • Linux Arm64 (deb[7])
  • Linux AMD64 (deb[8]rpm[9]tar[10])

是否有一些限制?

是的!這是一個早期的技術預覽版本,我們仍在努力使體驗盡可能流暢,但這里有一些你應該注意的事情:

  1. 當中斷時,Docker Compose 可能無法干凈退出。
  • 解決方法:通過向 docker-compose 進程發送SIGKILL(killall -9 docker-compose)來清理它們。
  1. 推送到 Hub 可能會出現錯誤,類似于這樣的錯誤信息server message: insufficient_scope: authorization failed,即使在使用 Docker Desktop 登錄后也是如此。
  • 解決方法:在 CLI 中運行 docker login。

使用

首先,我們需要提醒你,由于這是一個技術預覽,事情可能會很快發生變化,但這是它目前的工作方式。

  1. 我們正在利用我們最近的工作,將鏡像管理遷移到 containerd,因為它提供了使用與 OCI 兼容的工件和 containerd shims 的能力。
  2. 我們與WasmEdge[11] 合作創建了一個 containerd shim。此 shim 從 OCI 工件中提取 Wasm 模塊并使用 WasmEdge 運行時運行它。
  3. 我們添加了對聲明 Wasm 運行時的支持,這將允許使用這個新的 shim。

圖片

使用 docker run 啟動 Wasm 應用

安裝預覽版后,我們可以運行以下命令來啟動一個 Wasm 示例應用程序:

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

可以看到有一些參數可能不是很熟悉,讓我們來解釋下它們的作用。

  • --runtime=io.containerd.wasmedge.v1 - 這會通知 Docker 引擎,我們要使用 Wasm containerd shim,而不是標準的 Linux 容器運行時
  • --platform=wasi/wasm32 – 這指定了我們要使用的鏡像的架構,通過利用 Wasm 架構,我們不需要為不同的架構構建單獨的鏡像,Wasm 運行時將做最后一步,將 Wasm 二進制文件轉換為機器指令。

拉取鏡像后,運行時讀取鏡像的 ENTRYPOINT 來定位并提取 Wasm 模塊。然后該模塊被加載到 Wasm 運行時中,啟動并配置網絡。現在我們的機器上運行了一個 Wasm 應用程序!

該示例應用是一個簡單的 Web 服務器,它會顯示 Hello world! 并將數據回顯給我們,為了驗證它是否正常工作,讓我們首先查看日志。

$ docker logs wasm-example
Server is now running

我們可以通過打開 http://localhost:8080 或使用 curl 來獲取 Hello world 消息。

$ curl localhost:8080
Hello world from Rust running with Wasm! Send POST data to /echo to have it echoed back to you

將數據發送到 echo 端點,我們可以使用 curl 命令:

$ curl localhost:8080/echo -d '{"message":"Hi there"}' -H "Content-type: application/json"
{"message":"Hi there"}

要刪除應用程序,可以像執行任何其他 Docker 服務一樣刪除它:

$ docker rm -f wasm-example

新的集成意味著你可以在 Linux 容器旁邊運行 Wasm 應用程序(甚至使用 Compose)。

使用 Compose 啟動 Wasm 應用

同樣的我們也可以使用 Docker Compose 來運行 Wasm 應用,如下所示的 Compose 文件:

services:
app:
image: michaelirwin244/wasm-example
platform: wasi/wasm32
runtime: io.container.wasmedge.v1
ports:
- 8080:8080

然后使用如下所示的命令即可啟動該應用:

$ docker compose up

使用 Wasm 運行多服務應用程序

網絡的工作方式與你對 Linux 容器的預期相同,讓你可以靈活地將 Wasm 應用與其他容器化工作負載(例如數據庫)組合在單個應用程序堆棧中。

在以下示例中,Wasm 應用程序利用了在容器中運行的 MariaDB 數據庫。

  1. Clone 示例倉
$ git clone https://github.com/second-state/microservice-rust-mysql.git
Cloning into 'microservice-rust-mysql'...
remote: Enumerating objects: 75, done.
remote: Counting objects: 100% (75/75), done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 75 (delta 29), reused 48 (delta 14), pack-reused 0
Receiving objects: 100% (75/75), 19.09 KiB | 1.74 MiB/s, done.
Resolving deltas: 100% (29/29), done.
  1. 導航到項目根目錄并使用 Docker Compose 啟動項目。
$ cd microservice-rust-mysql
$ docker compose up
[+] Running 0/1
? server Warning 0.4s
[+] Building 4.8s (13/15)
...
microservice-rust-mysql-db-1 | 2022-10-19 19:54:45 0 [Note] mariadbd: ready for connections.
microservice-rust-mysql-db-1 | Version: '10.9.3-MariaDB-1:10.9.3+maria~ubu2204' socket: '/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution

在另一個終端中,我們可以看到創建的 Wasm 鏡像。

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
server latest 2c798ddecfa1 2 minutes ago 3MB

檢查鏡像顯示鏡像是否具有 wasi/wasm32 平臺,操作系統和架構的組合。

$ docker image inspect server | grep -A 3 "Architecture"
"Architecture": "wasm32",
"Os": "wasi",
"Size": 3001146,
"VirtualSize": 3001146,
  1. 在http://localhost:8090 打開網站并創建一些示例訂單,所有這些都是與 Wasm 服務器交互。
  2. 完成后,在你啟動應用程序的終端中按 Ctrl+C 將所有內容刪除。

構建和推送 Wasm 模塊

  1. 創建一個構建 Wasm 應用程序的 Dockerfile,當然這取決于你使用的語言。
  2. 在 Dockerfile 的單獨階段中,提取模塊并將其設置為ENTRYPOINT。
FROM scratch
COPY --from=build /build/hello_world.wasm /hello_world.wasm
ENTRYPOINT [ "hello_world.wasm" ]
  1. 構建并推送指定wasi/wasm32 架構的鏡像,Buildx 使這在單個命令中變得容易。
$ docker buildx build --platform wasi/wasm32 -t username/hello-world .
...
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => exporting manifest sha256:2ca02b5be86607511da8dc688234a5a00ab4d58294ab9f6beaba48ab3ba8de56 0.0s
=> => exporting config sha256:a45b465c3b6760a1a9fd2eda9112bc7e3169c9722bf9e77cf8c20b37295f954b 0.0s
=> => naming to docker.io/username/hello-world:latest 0.0s
=> => unpacking to docker.io/username/hello-world:latest 0.0s
docker push username/hello-world

Wasm 和 Docker 的下一步

Wasm 正在快速成長和發展,包括探索如何支持多線程、垃圾收集等。還有許多仍待解決的問題,包括縮短開發人員反饋循環和可能的生產路徑。

參考鏈接

  • https://www.docker.com/blog/docker-wasm-technical-preview/。
  • https://docs.docker.com/desktop/wasm/。

參考資料

[1]字節碼聯盟: https://bytecodealliance.org/。

[2]WebAssembly: https://webassembly.org/。

[3]Linux 容器的補充技術: https://www.docker.com/blog/why-containers-and-webassembly-work-well-together/。

[4]macOS Apple Silicon: https://dockr.ly/3sf56vH。

[5]macOS Intel: https://dockr.ly/3VF6uFB。

[6]Windows AMD64: https://dockr.ly/3ShlsP0。

[7]Linux Arm64 deb: https://dockr.ly/3TDcjRV。

[8]Linux AMD64 deb: https://dockr.ly/3TgpWH8。

[9]Linux AMD64 rpm: https://dockr.ly/3eG6Mvp。

[10]Linux AMD64 tar: https://dockr.ly/3yUhdCk

[11]WasmEdge: https://wasmedge.org/。

[12]路線圖: https://github.com/docker/roadmap/issues/426。

責任編輯:姜華 來源: k8s技術圈
相關推薦

2022-06-15 12:48:14

WebAssemblDockerKubernetes

2022-08-15 06:00:00

二進制編程語言

2023-05-05 17:20:04

2014-11-17 09:54:35

云計算Docker

2021-06-11 07:49:01

Docker容器安全 應用程序

2017-03-19 22:13:10

WebAssemblyJavaScript編程

2023-01-31 09:02:24

JSVMVR

2023-10-11 06:50:32

Oracle數據庫系統

2022-06-02 08:01:11

云原生工具

2023-12-10 16:48:00

Wasm瀏覽器

2017-03-19 20:41:57

WebAssemblyJavaScript編程

2017-03-19 22:43:12

WebAssemblyJavaScript編程

2009-04-16 16:31:04

數據轉化數據集成SQL Server

2023-03-27 09:40:01

GoWebAssembl集成

2023-03-27 13:25:18

WebAssembl語言Scheme

2021-06-11 09:00:00

語言WebWebAssembly

2023-10-10 00:09:14

2023-12-12 07:30:54

IstioWasm前端

2022-05-16 10:25:03

Web內部垃圾收集安全性

2020-11-03 08:12:20

WebAssemblyAPI
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产亚洲欧美在线 | 成人伊人 | 99久久精品免费看国产高清 | 亚洲欧美日韩精品久久亚洲区 | 国产一级片一区二区 | 看片国产 | 日韩久久中文字幕 | 久久小视频 | aaa天堂 | 伊人影院99 | 日韩在线免费视频 | 国产日韩欧美精品一区二区 | 日韩在线观看一区 | 国产乱性 | 欧美日韩免费一区二区三区 | 午夜精品久久久久久久久久久久久 | 欧美色999 | 日韩不卡一二区 | 精品免费国产一区二区三区四区介绍 | 成人三级视频 | 中文字幕四虎 | 精品99在线 | 99久久精品免费看国产四区 | 欧美精品在线一区二区三区 | 日本亚洲欧美 | 欧美电影免费观看高清 | 91青青草视频 | 国产精品99久久久久久大便 | 精品在线免费观看视频 | 久久久99精品免费观看 | 欧美精品福利 | 亚洲精品456 | 亚洲午夜网 | 日本一区二区不卡 | 久久伊人一区 | 91九色porny首页最多播放 | 成人免费视频网站在线观看 | 人人人人干 | 亚洲午夜精品一区二区三区他趣 | 亚洲福利在线视频 | 欧美九九 |