22 圖 |硬核解析 M1 上如何使用 Docker

這是悟空的第 95 篇原創文章java

前言

出於開源項目的須要,我準備把以前在 Windows 下運行的開源項目移植到 Mac 上跑得試下,可是以前 Mac M1 芯片並不能很好地支持 Docker,這不,發現 Docker 也正式支持 Mac 了,M1 看了 Docker 的芳容,竟悄悄愛上了 Docker。mysql

本文主要內容以下:git

1、官宣

1.1 官宣版

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

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

悟空到官網上看了下,2021-04-15 發佈的正式版:Docker Desktop 3.3.1,並且能夠直接下載。sql

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

這個 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、手拉手

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 內存,說明佔用的內存並不高,性能仍是能夠的。

3、暖男

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 來講,絕對是優質暖男一枚!實錘了!🔨

4、約會

說了 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 還有很長的路要走,談戀愛磕磕碰碰很正常,須要磨合的還有不少,但悟空相信他們最終必定會走到一塊兒,並過上幸福的日子

對於 M1 和 Docker 的愛情大家怎麼看?評論區見~

參考資料: 

www.passjava.cn

https://github.com/Jackson0714/PassJava-Platform

https://docs.docker.com/docker-for-mac/apple-silicon

- END -

寫了兩本 PDF, 回覆  分佈式  或  PDF  載。

個人 JVM 專欄已上架,回覆  JVM  領取

我是悟空,努力變強,變身超級賽亞人!

本文分享自微信公衆號 - 悟空聊架構(PassJava666)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索