# 在 Docker 運行 SQL Server 容器 (Windows)
### 先在[官方網站](https://docs.docker.com/desktop/install/windows-install/)下載 Docker Desktop

### 開啟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 起來


#### 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>

</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