การสร้าง Docker container เพื่อ run MySQL ในการใช้ database
- สร้าง folder เก็บข้อมูลก่อน โดยคำสั่ง
mkdir -p /Users/Shared/Portable/docker-mysql - ไปที่ folder
cd /Users/Shared/Portable/docker-mysql - สร้างไฟล์
touch docker-compose.yml - ใส่เนื้อหา
services: db: container_name: docker-mysql environment: MYSQL_ROOT_PASSWORD: SAj44GMbSLM8 MYSQL_DATABASE: JRx7H7TvFjsL MYSQL_USER: VThBP3XrnXrH MYSQL_PASSWORD: ww4c369YkH6J image: mysql:8.0 ports: - "3306:3306" restart: always volumes: - ./mysql_data:/var/lib/mysql- container_name เช่น docker-mysql
- MYSQL_ROOT_PASSWORD เข่น SAj44GMbSLM8
- MYSQL_DATABASE: database ชื่ออะไร เช่น JRx7H7TvFjsL
- MYSQL_USER: username เช่น VThBP3XrnXrH
- MYSQL_PASSWORD: รหัสผ่านคือ เช่น ww4c369YkH6J
- ports เช่น 5432
- ติดตั้งและรัน
docker compose up -d
ทดสอบ
ใช้คำสั่งdocker exec -it {container_name} mysql -U {username} -p{password}
เข่นdocker exec -it docker-mysql mysql -u VThBP3XrnXrH -pww4c369YkH6J
หรือ
docker exec -it {container_name} mysql -U {username} -p
เช่น
docker exec -it docker-mysql mysql -u VThBP3XrnXrH -p
จะมีการถาม MYSQL_PASSWORD ซึ่งจะปลอดภัยกว่า
Common Commands
- Access MySQL Shell
docker exec -it {container_name}mysql-U {username} -p{password}
หรือdocker exec -it {container_name}mysql-U {username} -p - Check Logs
docker logs {container_name} - Stop Database
docker stop {container_name} - Start Database
docker start {container_name}
ข้อควรระวังที่สำคัญ (ที่อาจทำให้สับสน)
- สิทธิ์ในตารางระบบ: User นี้จะ ไม่มีสิทธิ์ ไปยุ่งกับฐานข้อมูลอื่น หรือไปอ่านตาราง
mysql.user(ตารางรวมชื่อผู้ใช้) นั่นคือสาเหตุที่คุณรันคำสั่งSELECTบนตารางระบบแล้วติด Error ครับ - การแก้ไขภายหลัง: ถ้าคุณเปลี่ยนชื่อ User หรือ Password ในไฟล์ YAML หลังจากที่รันไปแล้วครั้งหนึ่ง MySQL จะไม่เปลี่ยนตามให้ครับ เพราะมันจะเช็คแค่ว่าใน Folder
./dataมีข้อมูลอยู่หรือยัง ถ้ามีแล้วมันจะข้ามขั้นตอนการสร้าง User/Database ไปเลย - Host
%vslocalhost: ใน Docker ตัว User ที่สร้างผ่าน environment จะถูกตั้ง Host เป็น%เพื่อให้คุณสามารถเชื่อมต่อจาก App ภายนอก หรือเครื่อง Host เข้าไปได้โดยไม่ติดเรื่อง IP ครับ
ใช้ root สร้าง database, username เพิ่ม
หากคุณใช้ user: root และ MYSQL_ROOT_PASSWORD ในการทำงาน คุณสามารถทำทุกอย่างได้ ไม่จำกัดแค่ใน Database เดียว นี่คือขั้นตอนและคำสั่งมาตรฐานหากคุณต้องการสร้าง Database และ User ใหม่ด้วยตัวเอง (Manual) ผ่านทาง root:
- ล็อกอินด้วย root
- สร้าง Database ใหม่
CREATE DATABASE {์NEW_MYSQL_DATABASE} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - สร้าง User ใหม่
CREATE USER ‘{NEW_MYSQL_USER}‘@’%’ IDENTIFIED BY ‘{NEW_MYSQL_PASSWORD}‘;
หมายเหตุ: ใช้'%'เพื่อให้ User นี้ล็อกอินจากภายนอก Container ได้ - มอบสิทธิ์ (Grant Privileges)
GRANT ALL PRIVILEGES ON{์NEW_MYSQL_DATABASE}.* TO '{NEW_MYSQL_USER}'@'%';
Best Practices
- Specific Versions: Instead of
mysql:latest, use a specific tag likemysql:8.0ormysql:5.7to avoid breaking changes when the image updates. - Platform Issues (Apple Silicon): If you are on an M1 Mac and encounter issues, add
--platform linux/amd64to your run command or compose file. - Security: Never hardcode passwords in files you plan to push to GitHub. Use an
.envfile instead.
อ่านเพิ่มเติม
