[Docker] สร้าง LAMP Stack ด้วย Docker

By Arnon Puitrakul - 09 มิถุนายน 2016

 [Docker] สร้าง LAMP Stack ด้วย Docker

จากตอนที่แล้ว ที่เขียนเรื่องของ Docker ไปก็มีหลายคนสนใจมาก ๆ วันนี้เลยจะมาต่อยอดจากคราวที่แล้วกัน เราจะมาลองทำ LAMP Stack ไว้ใช้งานกัน

LAMP Stack คืออะไร ?

อันนี้อธิบายเพื่อใครไม่รู้จัก LAMP Stack คือชุดของ Software 4 ตัวที่มารวมกันเพื่อทำ Web Server ที่เราใช้ ๆ กันอยู่นี่แหละ โดยมันประกอบด้วย

  1. L แรกคือ Linux ที่เป็น OS ที่เราน่าจะรู้จักกันดี
  2. A คือ Apache หรือ Web Server
  3. M คือ MySQL ที่เป็น Database ให้เราใช้งาน
  4. P คือ PHP เป็น ภาษาที่เราใช้เรียกและดึงข้อมูลต่าง ๆ

มาลองสร้างกัน

ใน Workshop นี้จะไม่พูดพร่ำทำเพลงอะไรมา เอาเนื้อ ๆ (18 หลุมแน่นอน) เลยล่ะกัน จะได้ไม่ยาวมาก โดยขั้นตอนของเราสั้นมาก ๆ ลิงยังน่าจะทำได้เลย ง่ายจริง ๆ

  1. สร้าง Container สำหรับ MySQL
  2. สร้าง Container สำหรับ PHP และรัน Apache
  3. Link ทั้ง 2 Container เข้าด้วยกัน
  4. ติดตั้ง MySQL PDO Driver สำหรับ PHP
  5. เปิดการใ้ช้งาน RewriteEngine (ถ้าต้องการใช้)

1 สร้าง Container สำหรับ MySQL

เราสามารถเข้าไปดูใน Docker Hub ได้ว่าเราสามารถทำอะไรกับ Image ของ MySQL ได้บ้าง ในที่นี้ขอสร้าง Container ของ MySQL เวอร์ชั่นล่าสุด ชื่อว่า test-db ล่ะกัน เราสามารถใช้คำสั่งตามด้านล่างนี้ได้เลย

docker run --name test-db -e MYSQL_ROOT_PASSWORD=mypassword -d -p 3306:3306 mysql

จากคำสั่งด้านบน เราทำการสร้าง Container ที่เป็น MySQL เวอร์ชั่นล่าสุด ชื่อว่า test-db ขึ้นมา โดยให้มันโยนค่า MYSQL_ROOT_PASSWORD ที่เป็น Password ของ MySQL ว่า "mypassword" และให้มัน map port หรือสร้างวาร์ประหว่าง port 3306 ของเครื่อง VM กับ port 3306 ของเครื่องเรา

2 & 3 สร้าง Container สำหรับ PHP และ Apache และ Link ทั้ง 2 Container เข้าด้วยกัน

ชื่อขั้นตอนยาวชะมัด แต่ขั้นตอนนั้นง่ายแสนง่าย รันแค่คำสั่งเดียวก็เรียบร้อยแล้ว ให้เรารันคำสั่งด้านล่าง เพื่อสร้าง Container สำหรับ PHP และ Apache

docker run --name test-site --link test-db:mysql -p 3000:80 -d -v /Users/arnonpuitrakul/Documents/test_site:/var/www/html/ php:7-apache

จากคำสั่งด้านบน เราทำการสร้าง Container ที่เป็น PHP พร้อมกับรัน Apache ในตัวพร้อมกับสร้าง วาร์ปเป็น Port 3000 ของเครื่องเรากับ Port 80 ในเครื่อง VM และให้มันสร้างวาร์ประหว่างใน Folder test_site ซึ่งเป็นที่ที่ผมจะเก็บไฟล์ของเว็บทั้งหมดลงไป เข้ากับใน Folder html ที่เป็น Root Directory ของ Apache
และสุดท้าย ท้ายสุด เราให้มันสร้างวาร์ปอีกจุดที่ test-db ซึ่งเป็น Container ที่รัน MySQL ที่เราพึ่งสร้างไปเมื่อครู่ กับ test-site ที่เราพึ่งสร้างไป
จนถึงตอนนี้เราสามารถเรียกหน้าเว็บไซต์ของเราขึ้นมาได้แล้วที่ IP Address ของ VM และใช้ Port 3000 แต่ถึงเราเชื่อม Container กับ MySQL แล้ว แต่เราก็ยังไม่สามารถเชื่อมต่อผ่าน PHP ได้ ถ้าใครถึงขั้นตอนนี้และลองเขียนดูจะพบ Error ประมาณว่า "no driver found" อะไรประมาณนี้ จึงต้องทำขั้นตอนที่ 4 ต่อเพื่อให้เราสามารถเชื่อมต่อ MySQL ผ่าน PHP ได้

4 ติดตั้ง MySQL PDO Driver สำหรับ PHP

ในขั้นตอนนี้เราจะมาติดตั้ง PDO Driver สำหรับ MySQL บน PHP กัน โดยเราจะใช้คำสั่งตามด้านล่างเพื่อติดตั้ง

docker exec -it test-site docker-php-ext-install pdo pdo_mysql

จากคำสั่งด้านบนเป็นการ สั่งให้ Docker เข้าไปรันคำสั่งให้ติดตั้งส่วนเสริมที่ชื่อว่า pdo_mysql เพิ่มใน Container ชื่อ test-site และสุดท้าย เพื่อให้ Apache โหลดส่วนเสริมที่เราพึ่งติดตั้งเข้าไป เราจึงต้อง Restart Container ใหม่อีกครั้ง โดยใช้คำสั่งตามด้านล่างนี้ เท่านี้ก็เป็นอันติดตั้งเรียบร้อย

docker restart test-site

5 เปิดการใช้งาน RewriteEngine (ถ้าต้องการใช้)

RewriteEngine เป็น Software ตัวนึงที่รันอยู่บน Apache เพื่อจัดการกับ URL Request ที่เข้ามาเช่น เราอยากให้เข้าไปที่หน้านึง แล้วบน URL ขึ้นตามที่เรากำหนดเอง เช่น example.com/note แทนที่จะเป็น example.com/note.php อะไรแบบนี้ หรือสำหรับใครที่ติดตั้ง Framework ต่าง ๆ เช่น Laravel ที่ต้องมีการใช้ Software ตัวนี้ก็ต้องทำการเปิดใช้งานด้วยเช่นกัน วิธีการเปิดใช้งาน ก่อนอื่นให้เรา SSH เข้าไปที่ Container ที่รัน Apache ก่อน (ในที่นี้ชื่อ test-site) โดยใช้คำสั่ง

docker exec -it test-site bash

จากนั้นให้เราเปิดการใช้ RewriteEngine โดยใช้คำสั่ง

a2enmod rewrite

และเรียกคำสั่ง exit เพื่อออกก็เป็นอันเสร็จเรียบร้อยแล้ว

สรุป

ด้วย 5 ขั้นตอนนี้เราก็จะได้ LAMP Stack เพื่อใช้พัฒนาเว็บไซต์กันแล้ว โดยโครงสร้างที่ใช้จะเป็นตามรูปภาพนี้

LAMP Stack Architecture Mapping

นั่นคือ มีเครื่องเราที่อยู่ข้างนอกสุด และด้านในจะมีเครื่องที่เป็น Linux เพื่อไว้ใช้รัน Docker (เนื่องจากเครื่องที่ผมใช้เป็น OSX เลยต้องมี VM ที่เป็น Linux ครอบอีกรอบ) และใน VM เรารันอยู่ 2 Container นั่นคือ PHP+Apache และ MySQL โดยเราให้ทั้ง 2 Container นี้เชื่อมต่อกันเอง โดยที่ไม่ผ่านเครื่องเรา ที่ต้องทำแบบนี้เป็นเหตุผลเรื่องของความปลอดภัย จริง ๆ ซึ่งความสามารถนี้มันมาใน Docker เวอร์ชั่นใหม่ และเราทำการ Map Port ระหว่างเครื่องเรากับ VM ข้างในด้วยเช่นกัน นั่นคือข้างนอกเรียกเข้าไปเป็น 3000 แต่พอเข้ามาข้างใน ตัว Linux มันจะแปลงเป็น Port 80 เพื่อไปเรียก Web Server ให้เราโดยอัตโนมัติ
ถ้าเป็นเวอร์ชั่นเก่า เราจะเชื่อมต่อจาก MySQL Container ไปที่เครื่องของเราผ่าน Port และจากเครื่องเราไปที่ Apache อีกทอดนึง ซึ่งเมื่อมันต้องออกไปข้างนอก ความกังวลในเรื่องของความปลอดภัยจึงเกิดขึ้น วิธีแก้ไขก็คืออย่างที่เราได้อ่านกันมานั่นคือ การให้ 2 Container เชื่อมต่อคุยกันใน VM กันเอง ไม่ต้องออกมาข้างนอก
ทั้งหมดนี้ก็เป็นอีกตัวอย่างนึงที่หลาย ๆ คนน่าจะต้องลองเคยทำกันบ้างแล้ว ถ้าได้ลองหัดใช้ Docker ตอนนี้ผมก็เป็นคนนึงที่พึ่งจะหัดใช้ได้ไม่นาน (ปีนิด ๆ เอง) การสร้าง Container แบบนี้น่าจะเป็นตัวอย่างที่ดีของการหัดใช้ Docker กัน เพราะได้ทำการเชื่อมหลาย ๆ Container และได้หัด Setup หลาย ๆ แบบ สำหรับบทความนี้ก็หวังว่า คนที่พึ่งหัดใช้ น่าจะได้รู้อะไรเยอะมากขึ้นนะครับ สวัสดีครับ

Read Next...

รีวิว Dell Ultrasharp U3223QE หน้าจอเทพ สีตรง ครบจบใน USB-C เส้นเดียว

รีวิว Dell Ultrasharp U3223QE หน้าจอเทพ สีตรง ครบจบใน USB-C เส้นเดียว

ถ้าใครที่ติดตามเรามา น่าจะเคยเห็นโต๊ะทำงานเรามาก่อนว่า เราใช้จอขนาด 27 นิ้ว 2 จอ ซึ่งเราประสบปัญหาพื้นที่การทำงานมันไม่พอ เลยจัดจอมาใหม่เป็นตัวที่อยากได้นั่นคือ Dell Ultrasharp รุ่น U2332QE จอขนาด 32 นิ้ว ที่ต้องบอกเลยว่า มันเป็นจอเทพสำหรับการทำงานอย่างแท้จริง จะเทพยังไงอ่านได้ในรีวิวนี้เลย...

ทำไมเว็บ arnondora.in.th ถึงย้ายจาก Gatsby.js มาเป็น Ghost

ทำไมเว็บ arnondora.in.th ถึงย้ายจาก Gatsby.js มาเป็น Ghost

คำถามจากหัวเรื่องนี้ มีทั้งเพื่อนและหลาย ๆ คนถามเข้ามากันเยอะมากว่า เห็นเมื่อก่อนเราใช้ Gatsby.js ทำเป็น Static Site แล้วทำไมตอนนี้เราย้ายมาใช้ Ghost กับไหน ๆ เราใช้ CMS แล้ว ทำไมเราถึงไม่ใช้ CMS ยอดนิยมอย่าง Wordpress วันนี้เราจะมาเล่าเรื่องนี้กัน...

arnondora 5.0 ปรับหน้าใหม่ในรอบชาติเศษ

arnondora 5.0 ปรับหน้าใหม่ในรอบชาติเศษ

หลังจากเว็บ arnondora.in.th ของเราได้รับการปรับปรุงแบบ Major Change ครั้งล่าสุดน่าจะกลางปี 2020 ตอนนั้นได้เปลี่ยนมาใช้ Ghost CMS เป็นครั้งแรก ตอนนี้ปี 2024 แล้ว และปีนี้ครบรอบ 10 ปีของเว็บเรา เลยคิดว่าเป็นโอกาสที่ดีที่จะมีการเปลี่ยนแปลงอีกครั้ง...

ใช้ HDD ขนาดใหญ่ หรือ HDD ขนาดเล็กจำนวนมากใน NAS ดี?

ใช้ HDD ขนาดใหญ่ หรือ HDD ขนาดเล็กจำนวนมากใน NAS ดี?

จากเมื่อเดือนก่อน ๆ เราเล่าเรื่องที่เราเปลี่ยน HDD ไปในความจุที่ใหญ่ขึ้น ทำให้เราคิดย้อนตอนที่เรา Design NAS ที่จะใช้ในบ้านครั้งแรกว่า เราควรจะใช้ HDD ขนาดเท่าไหร่ดี จะใช้ HDD ขนาดความจุเล็ก ๆ จำนวนมาก หรือเอาความจุสูง ๆ ไม่กี่ลูกดีกว่า วันนี้เราเอาประสบการณ์มาเล่ากัน...