MS SQL Server - Image Container Docker

MS SQL Server là hệ quản trị CSDL của Microsft, nó là hệ quản trị CSDL mạnh được dùng rộng rãi, hiện nay nó có các phiên bản trên Windows và Linux. Microsft cũng cung cấp phiên bản Image để tạo ra các container Docker: mcr.microsoft.com/mssql/server:2017-latest.

Khi sử dụng Image mcr.microsoft.com/mssql/server:2017-latest lưu ý một số điểm:

  • User quản trị mặc định MS SQLServer có tên là sa.
  • Password được thiết lập bằng biến môi trường SA_PASSWORD (Đặt password phải mệnh, từ 8 ký tự, gồm số, chữ).
  • Yêu cầu hệ thống cần tối thiểu 2GB RAM, như vậy cần đảm bảo Docker có đủ RAM khi chạy MSSQL
  • Khi chạy Docker trên macOS chưa hỗ trợ ánh xạ trực tiếp thư mục Host vào Container MSSQL (Windows, Linux bình thường) nhưng mount Volume thì hoạt động bình thường.
  • Ngoài ra cũng cần thiết lập biến môi trường ACCEPT_EULA=Y
  • Cổng kết nối mặc định là 1433

Cài đặt, chạy MS SQL Server

Để dữ liệu MSSQLServer không bị mất khi xóa Container cần tạo ra một ổ đĩa để ánh xạ vào container, ta tạo ổ đĩa đặt tên là vmssql.

docker volume create device=path_in_host vmssql

Trên máy macOS có thể không gán ngay thư mục host vào được thì chỉ dùng

docker volume create vmssql

Giờ sẽ tạo/chạy container với thông số sau:

  • Đặt password cho tài khoản saPassword789
  • Public xạ cổng 1433 vào container
  • Ánh xạ ổ đĩa vmssql vào thư mục /var/opt/mssql (nơi lưu DB)
  • Đặt tên container là c-mssql
docker run -e 'ACCEPT_EULA=Y' --name c-mssql -e 'SA_PASSWORD=Password789' -p 1433:1433 -v vmssql:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2017-latest

Như vậy đã có MS SQLServer đang chạy, kết nối đến nó qua cổng 1433.

Kết nối MS SQL Server

Nếu đang sử dụng Windows thì cài đặt và sử dụng công cụ SSMS (SQL Server Management Studio ) là công cụ tốt nhất để kết nối và quản lý SQL Server (Tải về SSMS).

Trong container c-mssql có sẵn công cụ sqlcmd (/opt/mssql-tools/bin/sqlcmd) để có thể kết nối, tương tác với SQL SERVER ngay tại container.

Vào container đang chạy:

docker exec -it c-mssql bash

Tại đây nếu muốn đổi password của sa gõ:

sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
   -S localhost -U SA -P 'oldpassword' \
   -Q 'ALTER LOGIN SA WITH PASSWORD="newpassword"'

Thực hiện kết nối SQL Server

/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Password789'

Nếu kết nối thành công, xuất hiện dấu nhắc 1> để nhập và chạy các query (T-SQL), gõ các query xong để thi hành cần gõ GO ở dòng mới.

Ví dụ một vài Query

-- liệt kê các database:
select name from master.dbo.sysdatabases

-- chuyển database:
use database_name


-- chuyển database:
use database_name

Azure Data Studio

Nếu muốn dùng một ứng dụng có giao diện trực quan để kết nối, quản lý, chạy các query tương tự như (SQL Server Management Studio) chạy được trên macOS, Linux, Windows thì công cụ Azure Data Studio của MS là lựa chọn rất tốt, đây là phần mềm nguồn mở, các chức năng có thể bổ sung bằng các extension.

Tải về và cài đặt tại: Azure Data Studio.

Kết nối với MS SQL Server

SQL

Tương tác với SQL Server trực quan

SQL

docker-compose dịch vụ MSSQL và restore với sqlcmd

Có thể sử dụng sqlcmd để phục hồi CSDL từ một file backup. Giả sử có file backup tên là xtlab.bak nó là bản backup CSDL. Để phục hồi nó, đầu tiên cần kiểm tra xem nó có những media nào lưu vào:

Kiểm tra file backup

/opt/mssql-tools/bin/sqlcmd \
   -S localhost -U SA -P 'Password123' \
   -Q "RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/xtlab.bak'"

Tùy cách backup mà có những thành phần khác nhau, ví dụ ở file trên

xtlab           C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\xtlab.mdf          D    PRIMARY  ...
xtlab_log       C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\xtlab_log.ldf      L    NULL     ...

Nghĩa là bên trong nó có hai file, phần dữ liệu chính xtlab và phần log là xtlab_log

phục hồi backup

Với 2 file dữ liệu lưu trong backup như trên, tiến hành restore xtlab.bak thành CSDL với xtlab như sau:

/opt/mssql-tools/bin/sqlcmd \
    -S localhost -U SA -P 'Password123' \
    -Q 'RESTORE DATABASE xtlab FROM DISK = "/var/opt/mssql/backup/xtlab.bak" WITH MOVE "xtlab" TO "/var/opt/mssql/data/xtlab.mdf", MOVE "xtlab_log" TO "/var/opt/mssql/data/xtlab_log.ldf"'

Một ví dụ docker-compose và CSDL MS SQLServer để thực hành

Ở đây có một file backup CSDL xtlab.bak, nó là bản backup của một CSDL SQL Server, CSDL này có các bảng và dữ liệu đúng theo các ví dụ phần Học SQL. Hãy tải nó về lưu vào thư mục (hãy tạo ra thư mục mssql) với đường dẫn mssql/bk/xtlab.bak

Tiếp theo tạo ra file mssql/docker-compose.yml với nội dung

version: "3"

services:
  xtlab-mssql:
    image: "mcr.microsoft.com/mssql/server:2017-latest"
    container_name: mssqlserver         # tên container
    restart: always
    hostname: mssql
    environment:
      SA_PASSWORD: Password123          #Thiết lập password
      ACCEPT_EULA: Y
      # Express:

    volumes:
      - mssqlvolume:/var/opt/mssql/data # thư mục lưu DB
      - ./bk:/var/opt/mssql/backup      # thư  mục chứa file backup
    ports:
      - "1433:1433"                     # cổng kết nối

volumes:
    mssqlvolume:

Giờ tại thư mục mssql gõ lệnh để chạy dịch vụ:

docker-compose up

Tiếp theo, vào terminal của container bằng lệnh:

docker exec -it mssqlserver bash

Tại đây gõ lệnh sau để phục hồi xtlab.bak thành CSDL với tên xtlab

/opt/mssql-tools/bin/sqlcmd \
   -S localhost -U SA -P 'Password123' \
   -Q 'RESTORE DATABASE xtlab FROM DISK = "/var/opt/mssql/backup/xtlab.bak" WITH MOVE "xtlab" TO "/var/opt/mssql/data/xtlab.mdf", MOVE "xtlab_log" TO "/var/opt/mssql/data/xtlab_log.ldf"'

Như vậy đã có một SQLServer địa chỉ localhost:1439 (127.0.0.1:1439) để thực hành

Đăng ký theo dõi ủng hộ kênh