M1 和 Docker 談了個戀愛

出於開源項目的需要,我準備把之前在 windows 下運行的開源項目移植到 Mac 上跑得試下,但是 Mac M1 晶片並不能很好地支援 Docker,這不,發現 Docker 也正式支援 Mac 了,M1 看了 Docker 的芳容,竟悄悄愛上了 Docker。

本文主要內容如下:

一、官宣

1.1 官宣版

之前 Docker 只支援在 Intel 晶片的 X86 架構上運行,Docker 已經正式支援蘋果 M1 晶片了,而 M1 晶片是 ARM 架構的,所以說 Docker 真的是太強大了,短短几個月就適配了蘋果最新的系統!

這不就是官宣 Docker 帥哥要追 M1 妹紙么?

悟空到官網上看了下,2021-04-15 發布的正式版:Docker Desktop 3.3.1,而且可以直接下載。

官網地址://docs.docker.com/docker-for-mac/apple-silicon/

這個 Desktop 包含很多功能:

  • Docker Engine
  • Docker CLI client
  • Docker Compose
  • Notary
  • Kubernetes
  • Credential Helper

另外在 M1 上運行 Docker 還有些條件需要滿足。

1.2 要求

因為 M1 比較前衛,所以需要安裝 Rosetta 軟體來進行兼容。

必須安裝 Rosetta ,因為某些二進位文件仍是Darwin / AMD64。要從命令行手動安裝Rosetta 2,請運行以下命令:

softwareupdate --install-rosetta

Docker 官方有望在將來的版本中修復此問題。

1.3 磨合

Docker 和 M1 還有許多地方需要磨合:

  • 並不是所有鏡像都可以用於 M1 的 ARM64 架構,比如 mysql 鏡像就不適合。但可以通過使用 mariadb 鏡像來解決此問題。

我試了下,確實沒有合適的 mysql 鏡像。

  • 由於QEMU有時無法運行容器,因此在 Apple Silicon電腦上運行基於Intel的容器可能會導致崩潰。我們建議您在Apple Silicon電腦上運行 ARM64 容器。與基於Intel的容器相比,這些容器還更快並且使用的記憶體更少。
  • ping從容器內部到 Internet 的連接無法正常工作。要測試網路,我們建議使用curlwget
  • 當TCP流半關閉時,用戶有時可能會遇到數據丟失的情況。

二、手拉手

2.1 左手拉右手

之前在 Linux 環境安裝 Docker 是通過命令行安裝的,但是在 Mac 上有客戶端可以使用,確實方便很多。安裝 Mac 版的 Docker非常方便,下載完成後的文件名叫做 Docker.dmg。雙擊文件後,彈出如下介面,把 Docker.app 圖標拖到右邊 Appliactions 就可以了,就像左手拉右手

Docker 帥哥成功牽手 M1。

安裝完成後,在應用程式中找到 Docker,雙擊打開就可以了。

接著就可以看到 Docker 在菜單欄中有顯示。

2.2 啟動容器

打開的介面,會提示沒有容器正在運行,客戶端提示執行以下命令啟動一個新的容器。

docker run -d -p 80:80 docker/getting-started

我們將命令拷貝到控制台後運行,如下圖所示:

然後我們來check 下容器是否創建和啟動成功。通過以下命令來查看 docker 容器的運行狀態。

docker ps

我們同樣可以通過 Docker 客戶端來查看容器狀態:容器正在運行中,對應的埠號是 80。如下圖所示:

另外我們也可以看下有哪些鏡像已經下載好了,如下圖所示,目前有一個鏡像:docker/getting-started。

2.3 Intel & Apple

我們打開活動監視器,可以看到打開的 docker 進程既有 Apple 架構的,也有 Intel 架構的,比如桌面 UI 用的是 Intel 架構的,但 Docker 核心應用程式用的 Apple 架構,說明雖然有部分用的 Intel 架構,但核心還是 Apple 架構,不影響使用。

再來看下記憶體使用情況,12 個進程,總共佔用 430 M 記憶體,說明佔用的記憶體並不高,性能還是可以的。

三、暖男

Docker 客戶端還有一系列人性化的配置,優質暖男一枚。來看下有什麼配置吧。

3.1 通用偏好設置

Docker 客戶端,有很多人性化的通用設置。如下圖所示:

  • 自動檢查更新:默認情況下,Docker Desktop配置為自動檢查較新版本。如果您作為組織的一員安裝了Docker Desktop,則可能無法自己更新 Docker Desktop。在這種情況下,請將您現有的組織升級為團隊計劃,然後清除此複選框以禁用自動檢查更新。
  • 登錄時啟動 Docker Desktop:打開會話時自動啟動Docker Desktop。
  • 在 Time Machine 備份中包括 VM:選擇此選項以備份 Docker Desktop 虛擬機。默認情況下未勾選此選項。
  • 使用 gRPC FUSE 進行文件共享:清除此複選框可改用舊版 osxfs 文件共享。
  • 發送使用情況統計資訊:Docker Desktop發送診斷、崩潰報告和使用情況數據。此資訊可幫助Docker 改善應用程式並進行故障排除。
  • 顯示每周提示:顯示有關使用Docker的有用建議。
  • 啟動時打開 Docker Desktop 儀錶板:啟動 Docker Desktop 時自動打開儀錶板。

3.2 資源高級配置

還有些關於資源的高級配置也非常強大,來瞧一瞧吧。

  • CPU:默認情況下,Docker Desktop設置為使用主機上可用處理器數量的一半。要提高處理能力,請將其設置為更高的數字。
  • 記憶體:默認情況下,Docker Desktop設置為使用2GB運行時記憶體,該記憶體是從Mac上的總可用記憶體分配的。要增加RAM,請將其設置為更大的數字,如果要減少它,請降低數字。
  • 交換:根據需要配置交換文件的大小,默認值為1 GB。
  • 磁碟映像大小:指定磁碟映像的大小
  • 磁碟映像位置:指定Linux卷的容器和映像的存儲位置。

3.3 K8S

Docker Desktop 竟然直接支援 kubernets(K8S) ,太酷了吧!

Docker Desktop 包含一個可在 Mac 上運行的獨立 Kubernetes 伺服器,因此可以測試在Kubernetes上部署 Docker 的工作負載。要啟用Kubernetes支援並安裝作為Docker容器運行的Kubernetes獨立實例,請選擇Enable Kubernetes

還有很多非常有用的功能,這裡就不一一介紹了,感興趣的可以到官網上查看哦~

Docker 對於 M1 來說,絕對是優質暖男一枚!實錘了!🔨

四、約會

說了 Docker 的那麼多優點,M1 終於願意和 Docker 談戀愛了,他們第一個約會活動就是實戰 Redis

4.1 下載 Redis 鏡像

先讓 Docker 下載個 Redis 鏡像試下:

sudo docker pull redis

我們可以通過 Docker 客戶端來看下鏡像是否下載成功,如下圖所示,確實下載成功。另外也可以通過命令 docker ps 查看。

4.2 啟動 Redis

  • 啟動 redis
docker run -d -p 6379:6379 redis

4.3 連接redis

docker exec -it <容器 id> redis-cli

需要通過 docker ps 找到 redis 容器 id,我的機器上運行的 redis 容器 id 是 17c…,命令中可以簡寫,只要能識別這個容器就可以。

連接成功後,會進入到 redis 命令行。

4.4 測試 Redis

設置a=100,返回OK

set a 100

獲取a的值,返回”100″

get a

說明 docker 在 M1 上 完美運行 Redis。

另外我的開源項目中要用 Elasticsearch 和 Kibana,但是都沒有適配的鏡像,這就很難受了啊!

看來 Docker 和 M1 還有很長的路要走,談戀愛磕磕碰碰很正常,需要磨合的還有很多,但悟空相信他們最終一定會走到一起,並過上幸福的日子~

參考資料:
www.passjava.cn
//github.com/Jackson0714/PassJava-Platform
//docs.docker.com/docker-for-mac/apple-silicon

Tags: