FluffyFern
Sirisoft
Published in
5 min readDec 26, 2017

--

SQL Server ใช้งานบน Docker ได้แล้วน่ะ :)

วิธีติดตั้ง SQL Server 2017 บน Docker

  1. การติดตั้ง SQL Server ลงบน Docker คือ ต้องทำการดึง image ของ SQL Server มาโดยใช้คำสั่งต่อไปนี้
$ sudo docker pull microsoft/mssql-server-linux:2017-lates

2. ในขั้นตอนการรัน container จำเป็นต้อง login โดยใช้ docker id

ในส่วนของ docker id เราสามารถลงทะเบียนและสร้าง docker id ขึ้นมาเองโดยเข้า website นี้ https://hub.docker.com/login/ และทำการ login docker โดยใช้คำสั่ง

$ sudo docker login
Login เข้า Docker

3. ทำการ run SQL Server 2017 images เพื่อให้ได้ container โดยใช้คำสั่งต่อไปนี้ และต้องทำการดาวน์โหลด License ของ SQL Server 2017 container มาไว้ในเครื่อง server ด้วย สามารถดาวน์โหลดได้ตามลิงค์นี้ https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker

$ sudo docker run -e “ACCEPT_EULA=Y” -e ‘MSSQL_SA_PASSWORD=<pssword>’ -p 1401:1433 –-name sql1 -d microsoft/mssql-server-linux:2017-latest

ข้อกำหนดของการตั้งค่า password คือต้องประกอบไปด้วยตัวอักษรหรือตัวเลขอย่างน้อย 8 ตัว

ตรวจสอบสถานะของ container ด้วยคำสั่ง

$ sudo docker ps -a
สถานะการใช้งานของ Container

จากรูปภาพ สถานะการใช้งานของ Container ปรากฎว่า ‘Exited’ หมายถึง Container ยังไม่พร้อมใช้งาน

4. เริ่มต้นการใช้งาน container ด้วยคำสั่ง

$ sudo docker start <container id or container name>
Container พร้อมใช้งาน

สถานะของ container คือ ‘Up’ แสดงว่าสามารถเข้าใช้งาน container ได้แล้ว

5. เข้าใช้งาน container ด้วยคำสั่ง

$ sudo docker exec -it <container name> “bash”
ภายใน Container

6. ออกจาก container ด้วยคำสั่ง

$ exit

วิธีติดตั้ง sqlcmd tool

ขั้นตอนนี้ทำเพื่อเชื่อมต่อการใช้งาน Database บน Docker Container โดยมีขั้นตอนต่อไปนี้

  1. เข้าใช้งานแบบ superuser
$ sudo su

2. ดาวน์โหลด Microsoft Red Hat repository configuration file ตามคำสั่งต่อไปนี้

$ curl http://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/msprod.repo

3. ออกจากการใช้งานแบบ superuser ด้วยคำสั่ง

$ exit

4. ทำการติดตั้ง ODBC Driver บน RedHat Linux 7 ด้วยคำสั่งต่อไปนี้

$ sudo yum update$ sudo yum remove unixODBC$ sudo ACCEPT_EULA=Y yum install msodbcsql-13.1.1.0–1

5. ทำการติดตั้ง mssql-tools กับ unixODBC developer package ด้วยคำสั่งต่อไปนี้

$ sudo yum install mssql-tools unixODBC-devel

6. ทำการเพิ่ม /opt/mssql-tools/bin/ ไปที่ ตัวแปร PATH environment เพื่อให้ sqlcmd/bcp สามารถเข้าใช้งานได้จาก login seesion ดังนั้นจึงทำการเปลี่ยน PATH ใน /.bash_profile ไฟล์ด้วยคำสั่งต่อไปนี้

$ echo ‘export PATH=”$PATH:/opt/mssql-tools/bin”’ >> ~/.bash_profile

เพื่อให้ sqlcmd/bcp สามารถเข้าใช้งานได้จาก bash shell โดย ไม่ต้อง login session โดยการเปลี่ยน PATH ใน ~/.bashrc ไฟล์ด้วยคำสั่งต่อไปนี้

$ echo ‘export PATH=”$PATH:/opt/mssql-tools/bin”’ >> ~/.bashrc$ source ~/.bashrc

7. ทำการเชื่อมต่อ sqlcmd กับ SQL Server ที่ทำงานอยู่ใน Docker container โดยใช้คำสั่งต่อไปนี้

$ sqlcmd -S localhost -U SA -P ‘<Password of SQL Server Container>’

การเข้าใช้งาน SQL Server ใน container

1. สามารถ check image ใน docker โดยใช้คำสั่ง

$ docker images

2. ตรวจสอบสถานภาพการใช้งานของ container ใน images โดยใช้คำสั่ง

$ docker ps -a

3. ถ้าสถานะการใช้งานของ container เป็น Exit สามารถเปิดการใช้งาน container โดยใช้คำสั่ง

$ docker start < container name>

เมื่อสถานะของ container เปลี่ยนจาก Exit เป็น Up แสดงว่า container นั้นพร้อมใช้งานแล้ว

4. เปิดการเชื่อมต่อการใช้งานภายใน container โดยสามารถพิมพ์คำสั่ง

$ sudo docker exec -it <container name> “bash”

หลังจากเชื่อมต่อกับ container ได้ docker จะแสดง Container ID หลัง @ ต่อท้าย user ดังรูปภาพ

หมายเลขของ Container

5. หลังจากการเชื่อมต่อการใช้งานภายใน container ต้องเชื่อมต่อการใช้งาน Sqlcmd tool ที่อยู่ใน container เพื่อที่จะใช้ SQL command บน container นั้นได้ Sqlcmd ไม่ได้ถูกระบุอยู่ใน path ที่เป็นค่าเริ่มต้น เพราะฉะนั้นต้องระบุ path เต็มให้โดยพิมพ์คำสั่ง

$ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘password login of container’
การใช้งาน Sqlcmd ภายใน Container

ถ้าการเชื่อมต่อสำเร็จ หน้า terminal จะปรากฏ 1> เหมือนรูปภาพ

ขั้นตอนการทดสอบการใช้งานระบบฐานข้อมูลบน Docker

หลังจากเชื่อมต่อกับ Sqlcmd ใน container ได้เรียบร้อยแล้ว

1. สร้างฐานข้อมูลชื่อ TestDB โดยใช้คำสั่ง

1> CREATE DATABASE <Database name>;
2> GO
การสร้าง Database ชื่อ TestDB

2. แสดงผลรายชื่อของระบบฐานข้อมูลทั้งหมด โดยใช้คำสั่ง

1>  SELECT Name from sys.Databases;
2> GO
TestDB Database ถูกสร้างสำเร็จ

3. เพิ่มข้อมูลลงในฐานข้อมูล เริ่มจากการเปลี่ยนการใช้งานฐานข้อมูลมาเป็นฐานข้อมูลที่เคยสร้างไว้ด้วยคำสั่ง

1> Use <Database name>;
2> GO
เปลี่ยนมาใช้ TestDB Database

4. สร้าง table ชื่อ inventory และเพิ่มข้อมูลเข้าไปใน table ด้วยคำสั่งต่อไปนี้

1> CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT);
2> INSERT INTO Inventory VALUES (1, ‘banana’, 150), (2, ‘orange’, 159);
3> GO

5. แสดงข้อมูลจาก table ที่ได้สร้างไป โดยคำสั่ง

1> SELECT * FROM Inventory WHERE quantity > 152;
ผลลัพธ์หลังจากการเรียกแสดงผลข้อมูล

6. ออกจากการใช้งาน sqlcmd ใน docker ด้วยคำสั่ง

1> Quit

ขั้นตอนการ Restore Database ลงบน docker container

ในขั้นตอนนี้เราจำเป็นต้องใช้ไฟล์ Backup นามสกุลไฟล์ .bak ของ Database ที่เราอยาก backup ลงไปใน MSSQL container บน Docker ตัวอย่างต่อไปนี้จะใช้ ไฟล์ Backup Database ชื่อ AdvantureWorks.bak

1. สร้าง directory folder ใน container โดยใช้คำสั่งต่อไปนี้

$ sudo docker exec -it <container name> mkdir /var/opt/mssql/backup

2. ย้าย backup file เข้า container โดยใช้คำสั่งต่อไปนี้

$ sudo docker cp <backup file name> <container name>:/var/opt/mssql/backup

3. ทำการแสดงรายชื่อไฟล์และที่อยู่ของ backup file โดยใช้คำสั่งต่อไปนี้

$ sudo docker exec -it <container name> /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘password of MSSQL’ -Q ‘RESTORE FILELISTONLY FROM DISK = “/var/opt/mssql/backup/AdventureWorks.bak”’ | tr -s ‘ ’ | cut -d ‘ ’ -f 1–2

4. Restore Database โดยการใช้คำสั่งต่อไปนี้

$sudo docker exec -it <container name> /opt/mssql-tools/bin/sqlcmd  -S localhost -U SA -P'password of MSSQL' -Q 'RESTORE DATABASE AdventureWorks FROM DISK ="/var/opt/mssql/backup/AdventureWorks.bak" WITH MOVE "AdventureWorks2012_Data" TO  "/var/opt/mssql/data/AdventureWorks_Data.mdf",MOVE "AdventureWorks2012_log" TO "/var/opt/mssql/data/AdventureWorks_log.ldf"'
การ Restore Database

restore database สำเร็จ terminal จะแสดงข้อความเหมือนรูปภาพด้านล่าง

สถานะการ Restore Database

5. ตรวจสอบ restore Database ว่า Database ที่ถูก restore เข้าไปนั้นปรากฏขึ้นใน container หรือไม่เหมือนรูปภาพด้านล่าง

ตรวจสอบรายชื่อ Database

ขั้นตอนการเชื่อมต่อ SQL Server จากภายนอก Container

  1. ติดตั้ง SQL Server Management Studio (SSMS)version 17.4 เพื่อสนับสนุนการเชื่อมต่อข้าม platform สามารถทำการดาวน์โหลดได้ตาม website นี้ https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms
  2. เปิด SSMS บน Window ในหน้า Connect to Server ให้ใส่ข้อกำหนดตามรูปภาพต่อไปนี้และกด connect

Server Type: เลือก Database Engine
Server name: ให้ระบุ IP Address ของเครื่องที่มี SQL Server Container อยู่และใส่เครื่องหมายลูกน้ำตามด้วย Port ของ Container ของ SQL Server
Authentication: เลือก SQL Server Authentication
Login: sa (user ชื่อ sa)
Password: รหัสเข้าใช้งาน เหมือนรหัสที่ระบุตอนสร้าง SQL Server container ในขั้นตอนก่อนหน้านี้

3. ถ้าเชื่อมต่อสำเร็จ ท่หน้า Object Explorer จะปรากฎ IP Address ของเครื่อง server และ Port ของ Container เหมือนรูปภาพด้านล่าง

จากรูป จะสังเกตุเห็น Database ชื่อ AdventureWorks ที่เราได้ทำการ Restoreไว้ในขั้นตอนก่อนหน้านี้

4. ทดสอบการใช้งานผ่าน SSMS โดย query ตามรูปภาพด้านล่าง

--

--