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,而且可以直接下載。
這個 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 的連接無法正常工作。要測試網路,我們建議使用curl
或wget
。- 當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設置為使用
2
GB運行時記憶體,該記憶體是從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