# 在 Docker 運行 SQL Server 容器 (Windows) ### 先在[官方網站](https://docs.docker.com/desktop/install/windows-install/)下載 Docker Desktop ![image](https://hackmd.io/_uploads/BJhJrTwUR.png) ### 開啟cmd, <font color="#f00">以下步驟都在cmd中進行</font>🔥🔥🔥 #### 1. 拉取映像檔,從 Microsoft Container Registry 下載 SQL Server 2019 的最新映像 ``` docker pull mcr.microsoft.com/mssql/server:2019-latest ``` #### 2. 使用映像檔來建立MSSQL容器 - 容器名稱: mssql - 帳密: SA/Test@123 ``` docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Test@123" -p 1433:1433 --name 容器名稱 -d mcr.microsoft.com/mssql/server:2019-latest ``` #### 3. 接著, 到 docker desktop 確認 mssql container 有 run 起來 ![](https://hackmd.io/_uploads/Syg7v6PIC.png) ![](https://hackmd.io/_uploads/HkVEPaPL0.png) #### 4. 進入容器 ``` docker exec -it mssql bash ``` #### 5. 使用 sqlcmd 連線到 local 的 sql server 伺服器 , 預設是用 SA 的帳密登入到 SQL SERVER ``` /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 你的密碼 [步驟6建立完畢之後就可用這組帳密登入sql server] /opt/mssql-tools/bin/sqlcmd -S localhost -U DEMO -P Demo@123 ``` #### 6. 建立一組新的帳號密碼,用來連線到 sql server,並且給予這組帳號 DBA 的權限 > 🫐**在 sqlcmd 中,輸入一條 SQL 命令後, 需以<font color="#FB607F"> GO </font>關鍵字結束該命令的輸入, 告訴 sqlcmd 執行該命令** > **🫐<font color="#FB607F">帳號</font>不分大小寫 SA=sa, DEMO=demo** > **🫐<font color="#FB607F">密碼至少8碼, 包括大小寫字母, 特殊符號, 數字</font>** ``` CREATE LOGIN DEMO WITH PASSWORD = 'Demo@123'; GO ALTER SERVER ROLE sysadmin ADD MEMBER DEMO; GO ``` #### 7. 建立資料庫 ``` CREATE DATABASE DemoDB; GO ``` #### 8. 登出 SQL Server ``` quit ``` #### 9. 離開容器 ``` exit ``` #### 10. 使用資料庫管理工具e.g., Data Grip, 來測試(DEMO/Demo@123)可否成功連線至資料庫伺服器 <img src="https://hackmd.io/_uploads/H1RFlJOU0.png" width="600"/></br> <img src="https://hackmd.io/_uploads/Hy1aly_L0.png" width="600"/> > 🫐**schema 頁籤要勾選 <font color="#FB607F">DemoDB > dbo</font>, table 預設是放在dbo schema ( MSSQL 預設的 schema )** > 🫐**master 是 MS SQL 預設的 DB, 可先取消勾選** <img src="https://hackmd.io/_uploads/BJtdSJd8R.png" width="600"/></br> <img src="https://hackmd.io/_uploads/Sykx81O8A.png" width="200"/></br> ### ⬇︎⬇︎上述步驟的截圖 ``` [ 用來確認 DEMO使用者帳號真的存在, 有建立成功] SELECT name FROM sys.sql_logins WHERE name = 'DEMO'; GO [ 確認 DEMO使用者是 sysadmin 角色 ] SELECT name FROM sys.server_principals WHERE name = 'DEMO' AND IS_SRVROLEMEMBER('sysadmin', name) = 1; GO [ 確認DB有成功建立 ] SELECT name FROM sys.databases WHERE name = 'DemoDB'; GO ``` <img src="https://hackmd.io/_uploads/rkUbT0wLR.png" width="600"/></br> ![2](https://hackmd.io/_uploads/rJNVgyuIR.png) </br> > 參考 > 1. https://medium.com/@heather_programming/docker-安裝sql-server-e6a1e185fc3e > 2. https://learn.microsoft.com/zh-tw/sql/linux/quickstart-install-connect-docker?view=sql-server-ver15&pivots=cs1-bash&tabs=cli