Docker และ Image

บทนำ

ในปฏิบัติการนี้เราจะทำการติดตั้ง MySQL Server ด้วย Docker ซึ่งนักศึกษาจะทำตามลำดับขั้นตอนที่กำหนดให้และไม่จำเป็นเข้าใจคำสั่งต่าง ๆ ทั้งหมดที่กำหนดให้ ของ Docker ซึ่งไม่ใช่วัตถุประสงค์หลักของวิชานี้ ดังนั้นเราจะใช้ค่า config ของ Docker ต่าง ๆ ที่จำเป็นต้องใช้เท่านั้น

วัตถุประสงค์หลักในปฏิบัติการนี้คือนักศึกษาทุกคนจะต้องติดตั้ง MySQL Server โดยใช้คำสั่ง Docker ที่กำหนดให้ได้ ซึ่งเราจำเป็นที่จะต้องใช้ MySQL Server สำหรับเครื่องมืออื่น ๆ ในบทเรียนต่อไป

Pre-Lab

ให้นักศึกษาเปิดโปรแกรม Docker โดยโปรแกรมจะแสดงหน้าจอดังแสดงต่อไปนี้

การติดตั้ง MySQL Server

การติดตั้ง MySQL Server ด้วย Docker จะเป็นการใช้คำสั่งแบบ command line หลังจากรันโปรแรกม Docker Desktop แล้วให้รันคำสั่งดังแสดงต่อไปนี้

docker run --name itsci-mysql -v C:\mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 -d --rm -p 3306:3306 mysql

จากคำสั่งในส่วนของ “C:\mysql-data” นักศึกษาสามารถกำหนดที่อยู่ directory เองได้ในเครื่องคอมพิวเตอร์ของตัวเอง

จากคำสั่งข้างต้นสามารถอธิบายพารามิเตอร์ต่าง ๆ ได้ดังนี้

จะเห็นได้ว่าเมื่อ MySQL Server เริ่มต้นทำงานแล้วข้อมูลของ MySQL ต่าง ๆ จะถูกสร้างขึ้นใน directory ปลายทางที่เรากำหนดไว้ดังแสดงในรูป

จากข้อมูลที่ปรากฎเป็นเพียงแค่ข้อมูลระบบฐานข้อมูลเท่านั้น ซึ่งจะเก็บข้อมูลต่าง ๆ เช่น ฐานข้อมูล ตาราง และข้อมูล ที่มีอยู่ใน MySQL Server

หลังจากโปรแกรม Docker Desktop เริ่มต้นทำงานจะปรากฏรายการ container ในหน้าจอของ Docker Desktop ซึ่งเราสามารถ stop/start ตัว container หรือลบ container ได้

และเมื่อเรา double-click ไปที่ในรายการ itsci-mysql container จะปรากฎอีกหน้าจอ ดังแสดงต่อไปนี้

จากรูปจะเห็นได้ว่าในหน้าจอประกอบไปด้วยแถบเครื่องมือ Logs, Inspect, Terminal, Files, และ Status ในขั้นตอนนี้ให้นักศึกษาเลือก Terminal เพื่อพิมพ์คำสั่งติดต่อกับ MySQL Server ที่อยู่ใน container

ใน Terminal ให้นักศึกษาพิมพ์คำสั่งดังต่อไปนี้

mysql -u root -p

ผลจากคำสั่ง MySQL Server แสดงข้อความพร้อมให้พิมพ์รหัสผ่านเพื่อเข้าสู่ระบบของ MySQL ให้นักศึกษาพิมพ์ “1234” ตามที่เราได้ตั้งไว้ในขั้นตอนแรกที่สร้าง container ในขั้นตอนแรก ผลลัพธ์จากการทำงานดังแสดงต่อไปนี้

sh-4.4# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.33 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

จะเห็นได้ว่าเรารัน mysql container จาก wsarachai/mysql-itsci:latest (เป็น image ที่แก้ไขจาก mysql เดิม)

ภาพรวมของการทำงานสามารถแสดงได้ดังรูปต่อไปนี้

การใช้คำสั่ง MySQL ในการสร้างฐานข้อมูล

หลังจากเข้าสู่ระบบของ MySQL Server เราจะทดลองสร้างฐานข้อมูลชื่อ “itsci_db” พร้อมตาราง “person” ดังแสดงต่อไปนี้

โดยให้พิมพ์คำสั่งดังนี้

DROP SCHEMA IF EXISTS `itsci_db`;
CREATE SCHEMA `itsci_db` DEFAULT CHARACTER SET utf8mb4;

ผลลัพธ์การทำงานดังแสดง

mysql> DROP SCHEMA IF EXISTS `itsci_db`;
Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> CREATE SCHEMA `itsci_db` DEFAULT CHARACTER SET utf8mb4;
Query OK, 1 row affected (0.02 sec)

คำสั่งนี้จะลบฐานข้อมูลก่อนหากฐานข้อมูล “itsci_db” นี้มีอยู่แล้วจากนั้นทำการสร้างใหม่ เราสามารถตรวจสอบว่าฐานข้อมูลของเราถูกสร้างแล้วด้วยคำสั่ง

show databases;

ผลลัพธ์การทำงานดังแสดง

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| itsci_db           | <<-- ฐานข้อมูลของเรา
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.09 sec)

mysql>

คำสั่งถัดไปเป็นการสร้างตารางฐานข้อมูลชื่อ “person” โดยจะประกอบไปด้วย id, first_name, last_name, และ email

use `itsci_db`;
DROP TABLE IF EXISTS `itsci_db`.`person`;
CREATE TABLE `person` (
    id INT PRIMARY KEY AUTO_INCREMENT,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    email VARCHAR(100)
);

ผลลัพธ์การทำงานดังแสดง

mysql> use `itsci_db`;
Database changed
mysql> CREATE TABLE `person` (
    ->     id INT PRIMARY KEY AUTO_INCREMENT,
    ->     first_name VARCHAR(50) NOT NULL,
    ->     last_name VARCHAR(50) NOT NULL,
    ->     email VARCHAR(100)
    -> );
Query OK, 0 rows affected (0.11 sec)

และการแสดงตารางที่เพิ่งสร้างด้วยคำสั่งดังนี้

mysql> show tables;
+--------------------+
| Tables_in_itsci_db |
+--------------------+
| person             | <<-- ตารางข้อมูลของเรา
+--------------------+
1 row in set (0.02 sec)

mysql>

คำสั่งต่อไปเป็นการเพิ่มข้อมูล person พิมพ์คำสั่งต่อไปนี้

INSERT INTO `itsci_db`.`person` (`first_name`, `last_name`, `email`) VALUES ('Student1', 'Lastname1', 'email01@test.com');
INSERT INTO `itsci_db`.`person` (`first_name`, `last_name`, `email`) VALUES ('Student2', 'Lastname2', 'email02@test.com');

หลังจากแทรกข้อมูลแล้วการแสดงข้อมูลในตารางเราจะใช้คำสั่ง Query ผลลัพธ์การเพิ่มและ Query ดังแสดงต่อไปนี้

mysql> INSERT INTO `itsci_db`.`person` (`first_name`, `last_name`, `email`) VALUES ('Student1', 'Lastname1', 'email01@test.com');
Query OK, 1 row affected (0.02 sec)

mysql> INSERT INTO `itsci_db`.`person` (`first_name`, `last_name`, `email`) VALUES ('Student2', 'Lastname2', 'email02@test.com');
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM person;
+----+------------+-----------+------------------+
| id | first_name | last_name | email            |
+----+------------+-----------+------------------+
|  1 | Student1   | Lastname1 | email01@test.com |
|  2 | Student2   | Lastname2 | email02@test.com |
+----+------------+-----------+------------------+
2 rows in set (0.01 sec)

mysql>

การทำงานกับ MySQL Workbench

MySQL Workbench เป็นเครื่องมือที่ใช้ในการจัดการฐานข้อมูล MySQL ที่พัฒนาโดยบริษัท Oracle Corporation โปรแกรมนี้มีความสามารถหลายอย่างเช่น ออกแบบและจัดการฐานข้อมูล MySQL การสร้างตาราง และประมวลผลคำสั่ง SQL จัดการข้อมูล มีการดูแลและจัดการข้อมูลผู้ใช้งาน เช่นการจัดการการสิทธิ์และการเข้าถึงฐานข้อมูล รวมถึงเครื่องมือต่างๆ เช่น ดูและตรวจสอบบันทึกการเกิดข้อผิดพลาด (log) และฟังก์ชันการทำสำรองข้อมูล (backup) ซึ่ง MySQL Workbench ยังเป็นโปรแกรมที่ใช้ง่ายและมีประสิทธิภาพสูงในการทำงานกับฐานข้อมูล MySQL

MySQLWorkbench เป็นเครื่องมือเพื่อเชื่อมต่อกับตัว MySQL Server ในการจัดการกับข้อมูลต่าง ๆ แทนที่การจัดการทุกอย่างด้วยคำสั่ง commmand line อย่างที่นักศึกษาได้ทำไปแล้วในแบบฝึกหัดก่อนหน้านี้ ในกรณีนี้จากรูป MySQLWorkbench ก็คือ MySQL GUI Tools ซึ่งในปัจจุบันมีหลายโปรแกรม เช่น MySQLWorkbench, PhpMyAdmin เป็นต้น

ให้นักศึกษา download และติดตั้งโปรแกรม MySQLWorkbench โดยเริ่มจาก download ตัวติดตั้งโปรแกรมได้จากลิงค์นี้ MySQLWorkbench Download จากนั้นทำการติดตั้งโปรแกรมให้เรียบร้อย

โปรแกรม MySQLWorkbench จะทำการเชื่อมต่อไปยัง MySQL Server ผ่านหมายเลข port 3306 ในปฎิบัติการนี้เราจะใช้ MySQLWorkbench เชื่อมต่อกับ MySQL Server ที่ทำงานใน Docker container ผ่านช่องทางนี้

ในขั้นตอนนี้เราจะทำให้ MySQL Server ใน Docker container สามารถเชื่อมต่อได้ด้วยโปรแกรม MySQLWorkbench ซึ่งสามารถทำได้ โดยจากคำสั่งที่เราเริ่มการทำงานของ MySQL Server ใน Docker

docker run --name itsci-mysql -v C:\mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 -d --rm -p 3306:3306 mysql

option “-p 3306:3306” ที่ปรากฎอยู่ในคำสั่งเป็นการสร้างสะพานเชื่อมต่อระหว่าง MySQL Server ใน Docker กับเครื่องคอมพิวเตอร์ของเรา ดังนั้นเราจึงสามารถเชื่อมต่อกับ MySQL Server ใน Docker ด้วยโปรแกรม MySQLWorkbench ได้

การสร้างการเชื่อมต่อระหว่าง MySQLWorkbench และ MySQL Server container

เปิดโปรแรกม MySQLWorkbench จะปรากฎหน้าจอดังแสดง

เริ่มจากคลิกที่เครื่องหมาย + เพื่อเพิ่ม connection ไปยัง MySQL Server จะปรากฎไดอะลอกให้กรอกข้อมูลที่จำเป็นในการเชื่อมต่อ

หากกรอกข้อมูลผู้ใช้ “root” รหัสผ่าน “1234” ถูกต้องเมื่อกดปุ่ม “Test Connection” จะปรากฎข้อความ

หากทุกอย่างถูกต้องแล้วให้กดปุ่ม “OK” ผลล้พธ์จากการติดตั้งดังแสดงในรูป

ทำการเชื่อมต่อกับ MySQL Server container และทดสอบโปรแกรม

แบบฝึกหัดเพิ่มเติม

ให้นักศึกษาสร้าง MariaDB container (MariaDB เป็น Database Server แบบเดียวกับ MySQL Server) โดยทำขั้นตอนต่าง ๆ คล้าย ๆ กับ MySQL Server

อ.ดร.วัชรินทร์ สาระไชย
อ.ดร.วัชรินทร์ สาระไชย

Hello! I’m Watcharin Sarachai, an enthusiastic and dedicated educator with a passion for advancing the field of computer science. I hold a Ph.D. in Computer Science from Chiang Mai University, where I focused on cutting-edge research in Machine Learning, Computer Programming, and Embedded Systems.

Articles: 19