# macOS M4 使用 Docker 安裝 SQL Server ## 0. 開啟 Rosetta,Apple Silicon 必做(目前發現不用,可越過這段) 1. 開啟 **Docker Desktop → Settings → Features in development** 2. 勾選 **Use Rosetta for x86/amd64 emulation on Apple Silicon** 3. **重啟 Docker Desktop** > ✅ 目的:讓 M4(ARM 架構)能執行 x86_64(amd64)的 SQL Server 映像。 --- ## 1. 建立資料持久化目錄 ```bash # 建立資料目錄(持久化) mkdir -p ~/docker/mssql/data # 啦取映像檔 docker pull mcr.microsoft.com/mssql/server:2022-latest # 啟動容器(Apple Silicon 建議加 --platform linux/amd64) docker run -d \ # 以背景模式 (-d) 啟動新容器 --name mssql \ # 指定容器名稱為 mssql --platform linux/amd64 \ # 強制使用 x86_64 架構(Apple M 系列需加此參數) -e "ACCEPT_EULA=Y" \ # 接受 SQL Server 授權條款 (EULA) -e "MSSQL_SA_PASSWORD=YourStrong!Passw0rd" \ # 設定系統管理員帳號 (sa) 的登入密碼 -e "MSSQL_PID=Developer" \ # 使用免費開發者版本授權 -e "TZ=Asia/Taipei" \ # 設定容器內的時區為台北時間 -p 1433:1433 \ # 將主機的 1433 埠對應到容器的 1433 埠(SQL Server 預設埠) -v ~/docker/mssql/data:/var/opt/mssql \ # 掛載資料夾以持久化資料(主機 ↔ 容器) mcr.microsoft.com/mssql/server:2022-latest # 指定使用的映像檔(SQL Server 2022 最新版本) ``` > 📂 用途:保存 SQL Server 資料,即使刪容器資料也不會消失。 --- ## 2. 啟動 SQL Server 容器 ```bash docker run -d --name mssql --platform linux/amd64 -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<你的密碼>" -e "MSSQL_PID=Developer" -e "TZ=Asia/Taipei" -p 1433:1433 -v ~/docker/mssql/data:/var/opt/mssql mcr.microsoft.com/mssql/server:2022-latest ``` > 🔸 `--platform linux/amd64`:Apple M4 必加 > 🔸 `-v`:掛載資料夾以持久化資料 > 🔸 `-p 1433:1433`:讓主機透過 1433 埠連線至 SQL Server --- ## 3. 檢查容器狀態與日誌 ```bash docker ps docker logs -f mssql ``` 看到:`SQL Server is now ready for client connections.` 即表示 SQL Server 啟動成功 🎉 離開日誌模式 → **按下 `Ctrl + C`** --- ## 4. 建立測試資料庫與資料表 ### 進入 SQL Server 容器內 ```bash docker exec -it mssql bash -lc "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P '<你的密碼>' -C" ``` ``` docker exec -it mssql bash -lc "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P '<你的密碼>' -C -Q 'SELECT @@VERSION;'" ``` ### 建立資料庫 `Test` ```sql CREATE DATABASE Test; GO USE Test; GO ``` ### 建立資料表 `Employees` ```sql CREATE TABLE Employees ( EmployeeID INT IDENTITY(1,1) PRIMARY KEY, Name NVARCHAR(50), Department NVARCHAR(50), Salary INT, HireDate DATE ); GO ``` ### 插入測試資料 ```sql INSERT INTO Employees (Name, Department, Salary, HireDate) VALUES ('Alice', 'IT', 60000, '2023-05-01'), ('Bob', 'Finance', 55000, '2022-09-15'), ('Charlie', 'HR', 50000, '2021-12-20'); GO ``` ### 查詢確認 ```sql SELECT * FROM Employees; GO ``` 離開 `sqlcmd`: ```sql QUIT ``` --- ## 5. 刪除測試資料庫(清理環境) ### 重新進入容器 ```bash docker exec -it mssql bash -lc "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P '<你的密碼>' -C" ``` ### 刪除 `Test` 資料庫 ```sql ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO DROP DATABASE Test; GO QUIT ``` > ✅ 執行後,`Test` 資料庫會被完全移除。 --- ## 6. 從 macOS 主機連線 (使用 DataGrip) | 項目 | 值 | | ------------- | --------------------------------- | | Database Type | Microsoft SQL Server | | Host | `localhost` | | Port | `1433` | | User | `sa` | | Password | `<你的密碼>` | | Database | 可選填(例如 Test) | | SSL / TLS | 勾選 **Trust server certificate** | > 💡 在 DataGrip 連線設定中勾選「Trust server certificate」即可避免憑證錯誤。 ### CLI 方式(安裝新版 sqlcmd) ```bash brew install sqlcmd sqlcmd -S localhost -U sa -P '<你的密碼>' -C -Q "SELECT name FROM sys.databases;" ``` --- ## 7. 常用維運指令(含註解) ```bash # 查看目前正在運行的所有容器清單 docker ps # 追蹤指定容器 (mssql) 的即時日誌輸出 # 按下 Ctrl + C 可離開追蹤模式 docker logs -f mssql # 重新啟動容器 (先停止再啟動) docker restart mssql # 停止容器的執行(但不刪除) docker stop mssql # 啟動已經停止的容器 docker start mssql # 強制刪除容器(不會刪除掛載在主機的資料,例如 ~/docker/mssql/data) docker rm -f mssql ``` --- ## 8. 關閉 Docker 與服務 ```bash # 停止單一 SQL Server 容器 docker stop mssql # 停止所有容器 docker stop $(docker ps -q) # 刪除 container docker rm -f mssql # 關閉 Docker Desktop 應用程式 osascript -e 'quit app "Docker"' ``` 重新開啟 Docker Desktop: ```bash open -a Docker ``` --- ## 附註設定 | 項目 | 建議設定 | | --------------- | -------------------------------------------- | | SQL Server 版本 | `mcr.microsoft.com/mssql/server:2022-latest` | | 密碼規則 | ≥8 碼,含大小寫、數字、符號 | | 建議記憶體 | Docker Desktop → Resources → Memory ≧ 4 GB | | 預設資料夾 | `~/docker/mssql/data` | | 預設埠 | 1433(可改為 11433) | | 測試資料庫 | Test(可刪除) | | 測試資料表 | Employees(含三筆測試資料) |