主題

[Docker] 在Mac M1使用Docker安裝MySQL,並存取本地端資料

帥氣跳蚤蛋 | 2022-01-16 14:52:43 | 巴幣 2 | 人氣 748

Docker與MySQL目前官方皆已支援M1晶片,
但使用Docker的Mysql官方Image仍會提示不支援該平台,無法直接安裝,
本文示範在Mac M1上的本地端,存取Docker中的MySQL,
並利用本地端的路徑與Docker中MySQL做Bind Mount資料連結,
方便的存取檔案,與永久保存於本地端.

=============================================================================
巴哈小屋的程式碼不易排版,希望有好的閱讀體驗可至,網頁好圖版,Medium部落格:跳蚤的蛋蛋跳蚤蛋
=============================================================================

在Docker中下載MySQL Image,
照一般的安裝方法,使用指令 “docker image pull mysql”,
會出現錯誤訊息,提示不支援arm64的cpu.

因此將指令加入platform的參數,即可進行安裝:
docker image pull — platform linux/x86_64 mysql

下載完成後,可利用“docker image ls”,檢查image是否已在清單中,

=============================================================================

接著將使用Bind Mount的資料連結方式來創建Container,讓MySQL可存取本地端檔案,並將資料永久保存在本地端,
docker container run — name mysql_source -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -v ~/Desktop/Docker_MySQL_Folder:/root -v ~/Desktop/Docker_MySQL_Data:/var/lib/mysql mysql:latest

此行命令有幾個參數可供設置,其中“{0}”為設定的變數:
— name {0}: Container的名稱
-p {0}: 本地端與MySQL要連接的Port號,MySQL預設為3306
-e MYSQL_ROOT_PASSWORD {0}: 為root的預設密碼
-v {0}: /root -v: 為MySQL與本地端存取的資料夾路徑
-v {0}: /var/lib/mysql mysql:latest: 為MySQL放置的本地端路徑

創建Container後,可使用“docker container ls -a”檢查Container ID

並且在本地端Bind Mount的MySQL資料夾,可看見MySQL的檔案,
創建Container時的參數路徑為:“~/Desktop/Docker_MySQL_Data”

=============================================================================

接著使用“docker exec -it 7e0 sh”進入Docker的Linux互動環境,
其中-it {0}: 為Container的Id,
“7e0”為我剛創建的Container ID,因每個C創建時,會有不同的ID,
可利用上節的”ls -a”指令查詢Container ID

在Linux環境下,可登入MySQL囉!登入後,即可看到MySQL的歡迎訊息.
使用”mysql -u root -p“指令來登入root帳號,
密碼為剛才創建Container時的預設密碼: my-secret-pw

進入MySQL的環境後,可正常使用MySQL指令囉!
試試”select version();”與”select databases;
MySQL指令都可正常執行.

=============================================================================

本節將藉由Bind Mount的資料夾與MySQL進行資料的存取,
首先先創建一個新的database,使用指令“create database TestDatabase;

使用命令“use TestDatabase;”來使用此database

接著建立一個”Bind Mount Test.sql”檔案,內容如下所示,
等會在MySQL中使用source指令執行該檔案
CREATE TABLE TestTable(
    id INT,
    title VARCHAR(20)
);

INSERT INTO TestTable(id,title) VALUES
(0,"ABC"),
(10,"WWW"),
(87,"Orz");

將“Bind Mount Test.sql”放入,Container創建時的Bind Mount資料夾,
創建Container時的參數路徑為:”~/Desktop/Docker_MySQL_Folder”

回到MySQL的環境,用source命令,使用本地端“”Bind Mount Test.sql”檔案,
因在創建Container時,使用本地端的“~/Desktop/Docker_MySQL_Data”與MySQL的” /root”路徑做連結,
所以在MySQL下讀取本地端的檔案,
命令會變成”source /root/Bind Mount Test.sql;

使用“select * from TestTable;
可看到由本地端的.SQL檔案所創建出的table資料

=============================================================================

本節將使用SQL管理工具”DBeaver”,與在Docker中所建立的MySQL進行互動,
使用之前建立的MySQL Container帳號密碼,進行資料庫的連線,
連接地址:localhost
port:3306
帳號:root
密碼:my-secret-pw


連線成功後,即可在介面中看到創建的”TestDatabase”與“TestTable”,

=============================================================================

本文在MAC M1的環境下,建立Docker的MySQL開發環境,
並藉由Bind Mount的方式,讓MySQL可與本地端的資料進行存取,
可永久保存資料,若Docker Image或Container移除,資料仍會存在,
可將SQL資料移到另一台電腦進行使用,
最後使用SQL管理工具”DBeaver”,與Docker上的MySQL連線,
確認可在MAC M1的桌面環境下開發MySQL.
送禮物贊助創作者 !
0
留言

創作回應

相關創作

更多創作