Docker
from https://docs.microsoft.com/zh-tw/sql/linux/quickstart-install-connect-docker?view=sql-server-2017&pivots=cs1-bash
from https://www.opencli.com/linux/docker-container-backup-restore
快速入門:以 Docker 執行 SQL Server 容器映像
適用於: SQL Server (僅限 Linux)Azure SQL DatabaseAzure SQL 資料倉儲平行資料倉儲
在本快速入門中,您將使用 Docker 來提取與執行 SQL Server 2017 容器映像,mssql-server-linux。 然後與 sqlcmd連線來建立您的第一個資料庫並執行查詢。
提示
如果您想要試用 SQL Server 2019 預覽影像,請參閱這篇文章的 SQL Server 2019 預覽版。
此映像包含以 Ubuntu 16.04 為基礎,在 Linux 上執行的 SQL Server。 您可於適用於 Mac/Windows 的 Docker 上將其與 Docker 引擎 1.8 以上版本搭配使用。 本快速入門中特別著重在使用上的 SQL Server linux映像。 Windows 映像則不涵蓋在內,但您可於mssql-server-windows-developer Docker Hub 頁面進一步加以了解。
必要條件
- 在任何支援的 Linux 發行版本或適用於 Mac/Windows 上的 Docker 安裝 Docker 引擎 1.8 以上版本。 如需詳細資訊,請參閱安裝 Docker。
- Docker overlay2存放裝置驅動程式。 這是大部分使用者的預設值。 如果您發現您不使用此儲存體提供者,並且需要變更,請參閱指示和中的警告docker 文件,以設定 overlay2。
- 至少 2 GB 的磁碟空間。
- 至少 2 GB 的 RAM。
- Linux 上的 SQL Server 系統需求。
提取及執行容器映像
- 從 Microsoft Container Registry 提取 SQL Server 2017 Linux 容器映像。bash
sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
提示如果您想要試用 SQL Server 2019 預覽影像,請參閱這篇文章的 SQL Server 2019 預覽版。上述命令會提取最新的 SQL Server 2017 容器映像。 若要提取特定映像,您需要新增欄位與標籤名稱 (例如,mcr.microsoft.com/mssql/server:2017-GA-ubuntu
)。 若要查看所有可用映像,請參閱mssql server Docker hub 頁面。在本文中的 bash 命令sudo
用。 在 MacOS 上,sudo
可能不需要。 在 Linux 上,如果您不想要使用sudo
若要執行 Docker,您可以設定docker群組,並將使用者新增至該群組。 如需詳細資訊,請參閱 <後續安裝步驟適用於 Linux。 - 若要以 Docker 執行容器映像,您可以從 Bash 殼層 (Linux/macOS) 或提高權限的 PowerShell 命令提示字元使用下列命令。bash
sudo docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=<YourStrong!Passw0rd>' \ -p 1433:1433 --name sql1 \ -d mcr.microsoft.com/mssql/server:2017-latest
注意密碼應遵循 SQL Server 預設密碼原則,否則容器將無法設定 SQL Server 並停止運作。 根據預設,密碼必須至少為 8 個字元,且包含下列四組的三種字元:大寫字母、 小寫字母、 10 進位數字和符號。 執行 docker logs 命令即可查看錯誤記錄。注意下表提供了前述docker run
範例的參數描述:參數 描述 -e 'ACCEPT_EULA=Y' 將 ACCEPT_EULA 變數設為任意值可確認您接受終端使用者授權合約。 此為 SQL Server 映像的必要設定。 -e 'SA_PASSWORD=<YourStrong!Passw0rd>' 指定您自己的強式密碼,該密碼長度至少需為 8 個字元且符合 SQL Server 密碼需求。 此為 SQL Server 映像的必要設定。 -p 1433:1433 將主機環境上的 TCP 通訊埠 (第一個值) 對應至容器中的 TCP 連接埠 (第二個值)。 在此範例中,SQL Server 正在容器中的 TCP 1433 上接聽,這公開給連接埠 1433,在主機上。 --name sql1 指定容器名稱,而不隨機產生名稱。 執行多個容器時無法重複使用此相同名稱。 mcr.microsoft.com/mssql/server:2017-latest SQL Server 2017 Linux 容器映像。 - 若要檢視 Docker 容器,請使用
docker ps
命令。bashsudo docker ps -a
您應該會看到類似下列螢幕擷取畫面的結果: - 如果狀態資料行會顯示狀態為向上、 然後 SQL Server 正在執行中容器和接聽的通訊埠中指定連接埠資料行。 如果狀態資料行的 SQL Server 容器節目Exited,請參閱疑難排解 > 一節的設定指南。
-h
(主機名稱) 參數也相當實用,但為求簡明因此未在本教學課程中使用。 此參數可將容器的內部名稱變更為自訂值。 這是您在下列 Transact-SQL 查詢中會看到的傳回名稱:
SQL
SELECT @@SERVERNAME,
SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
SERVERPROPERTY('MachineName'),
SERVERPROPERTY('ServerName')
建議您將
-h
與 --name
設為相同的值,這會讓識別目標容器更輕鬆。變更 SA 密碼
SA 帳戶是在安裝期間建立的 SQL Server 執行個體系統管理員。 建立您的 SQL Server 容器之後,在容器中執行
echo $MSSQL_SA_PASSWORD
,即可探索您指定的 MSSQL_SA_PASSWORD
環境變數。 基於安全性考量,請變更您的 SA 密碼。- 選擇要為 SA 使用者使用的強式密碼。
- 使用
docker exec
來執行 sqlcmd,以使用 Transact-SQL 變更密碼。 將<YourStrong!Passw0rd>
和<YourNewStrong!Passw0rd>
取代為您自己的密碼值。bashsudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \ -S localhost -U SA -P '<YourStrong!Passw0rd>' \ -Q 'ALTER LOGIN SA WITH PASSWORD="<YourNewStrong!Passw0rd>"'
連接至 SQL Server
下列步驟會在容器中使用 SQL Server 命令列工具 sqlcmd 以連線至 SQL Server。
- 使用
docker exec -it
命令在您執行的容器中啟動互動式 Bash 殼層。 下列範例中的sql1
是您在建立容器時由--name
參數指定的名稱。bashsudo docker exec -it sql1 "bash"
- 進入容器後,以 sqlcmd 進行本機連線。 預設路徑並不包含 sqlcmd,因此您必須指定完整路徑。bash
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YourNewStrong!Passw0rd>'
提示您可以在命令列中省略密碼,不要在提示時輸入密碼。 - 如果成功,您應該會收到 sqlcmd 命令提示字元:
1>
。
建立及查詢資料
下列各節將逐步引導您使用 sqlcmd 和 Transact-SQL,來建立新的資料庫、新增資料及執行簡單的查詢。
建立新的資料庫
下列步驟會建立名為
TestDB
的新資料庫。- 從 sqlcmd 命令提示字元,貼上下列 Transact-SQL 命令以建立測試資料庫:SQL
CREATE DATABASE TestDB
- 在下一行,撰寫查詢以傳回您伺服器上所有資料庫的名稱:SQL
SELECT Name from sys.Databases
- 上述兩個命令不會立即執行。 您必須在新的一行鍵入
GO
,以執行上述命令:SQLGO
插入資料
接下來,建立新的資料表
Inventory
,然後插入兩個新的資料列。- 從 sqlcmd 命令提示字元,將內容切換至
TestDB
資料庫:SQLUSE TestDB
- 建立名為
Inventory
的新資料表:SQLCREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT)
- 將資料插入新的資料表:SQL
INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
- 鍵入
GO
以執行上述命令:SQLGO
選取資料
現在,執行查詢以從
Inventory
資料表傳回資料。- 從 sqlcmd 命令提示字元,輸入查詢以從
Inventory
資料表傳回 quantity (數量) 大於 152 的資料列:SQLSELECT * FROM Inventory WHERE quantity > 152;
- 執行命令:SQL
GO
結束 sqlcmd 命令提示字元
- 若要結束您的 sqlcmd 工作階段,請鍵入
QUIT
:SQLQUIT
- 若要結束容器中的互動式命令提示字元,請鍵入
exit
。 結束互動式 Bash 殼層後,容器會繼續執行。
從容器外部連線
您也可以從支援 SQL 連線的任何外部 Linux、Windows 或 macOS 工具連線到 Docker 機器上的 SQL Server 執行個體。
下列步驟在您容器的外部使用了 sqlcmd 以連線至容器中執行的 SQL Server。 這些步驟會假設您已經在容器外部安裝 SQL Server 命令列工具。 使用其他工具時,適用相同的原則,但各工具連接的程序。
- 找出裝載您容器之電腦的 IP 位址。 在 Linux 上,使用ifconfig 或 ip addr。在 Windows 上,使用 ipconfig。
- 執行 sqlcmd 來指定 IP 位址和容器中 1433 通訊埠所對應的連接埠。 在此範例中,這是相同的連接埠 1433,主機電腦上。如果您在主機電腦上指定不同的對應連接埠,您會在此使用。bash
sqlcmd -S 10.3.2.4,1433 -U SA -P '<YourNewStrong!Passw0rd>'
- 執行 Transact-SQL 命令。 完成後,鍵入
QUIT
。
其他常用的 SQL Server 連線工具包括:
移除容器
若要移除本教學課程中用到的 SQL Server 容器,請執行下列命令:
bash
sudo docker stop sql1
sudo docker rm sql1
警告
停止及移除容器會永久刪除容器中的所有 SQL Server 資料。 如果您要保留您的資料,請建立備份檔案並複製至容器之外,或使用容器資料持續性技術。
Dock 示範
在您嘗試使用適用於 Docker 的 SQL Server 容器映像後,或許會想要了解如何使用 Docker 來改善開發與測試。 下方影片會示範如何在持續整合與部署案例中使用 Docker。
後續步驟
如需如何將資料庫備份檔案還原至容器中的教學課程,請參閱在 Linux Docker 容器中還原 SQL Server 資料庫。 若要探索其他案例,例如執行多個容器,資料持續性和疑難排解,請參閱Docker 上的設定 SQL Server 容器映像。
from https://www.opencli.com/linux/docker-container-backup-restore
Docker 容器備份及還原
Docker 分別有映像檔 (Image) 容器 (Container) 的概念, Docker Image 是一個預先包裝好的唯讀模版, 用作建立 Docker Container, 以下是備份及還原 Docker container 的步驟。
1. Docker Container 備份
先用 "docker ps" 指令查看正在執行的 Container, 取得 Container 的名稱及 ID, 例如要備份的 Container 是 "container01", ID 是 "1234567890", 用 "commit" 指令建立備份:
上面指令會暫時儲止 Container01 的運作, 然後將備份的 snapshot 備存為 container01 映像檔。
然後將備份出來的 container01 映像檔放到私有 Docker Repository:
或者可以將 container01 以 tar 壓縮, 直接儲存到系統:
2. Docker Container 還原
上面備份的 container01 映像檔在私有 Docker Repository 上面, 要還原直接用 "docker run" 指令即可。
如果備份時將映像檔以 tar 壓縮儲存, 可以用 "docker load":
然後再用 "docker run" 指令。
留言
張貼留言