การแก้ปัญหาเปิด Web Application ช้าใน Docker Container ด้วย Docker Volumes
ที่มา/ปัญหา
การใช้งาน Docker Container ปัจจุบันเราจะใช้วิธีการ Bind Mounts เพื่อเชื่อมโยง Folder Code จากเครื่อง Windows เข้าไปใน Container โดยตรงทำให้เราสามารถแก้ไขเปลี่ยนแปลงไฟล์ระหว่าง Windows กับ Container ได้สะดวกแต่ปัญหาก็คือการใช้ Bind Mounts นั้นทำให้ web ที่เราพัฒนาอยู่เรียกใช้งานได้ช้ามากเนื่องจากการเชื่อมต่อไฟล์ระหว่าง Windows กับ Container จะต้องแปลงไฟล์ระบบของ Windows ให้เข้ากันกับไฟล์ระบบของ Container ก่อน ทำให้การอ่านไฟล์ช้ากว่าปกติ
การแก้ปัญหาก็คือ การนำ Docker Volumes มาใช้แทนการ Bind Mounts เพราะ Docker Volumes เป็นพื้นที่จัดเก็บข้อมูลที่ Docker Desktop โดยตรงไม่ต้องแปลงไฟล์ระบบ โดยวิธีการใช้งาน Docker Volumes มีดังต่อไปนี้
สิ่งที่จำเป็นและต้องเตรียม
๑. Docker Desktop
๒. Images Apache ใน Docker ที่ใช้อยู่ในปัจจุบัน
ขั้นตอนการใช้งาน
๑. สร้างไฟล์ project ให้เป็น .tar โดยการเปิด folder code project งานของเรา เลือกทั้งหมดแล้วบีบอัดให้เป็น .tar

๒. เปิด Docker Desktop ไปที่หัวข้อ Volumes แล้วกด Create

๓. ตั้งชื่อ Volumes เช่น gotouni-code

๔. คลิกที่ชื่อ Volumes ที่ตั้งไว้คลิกปุ่ม Import เลือกหัวข้อ Local file แล้วเลือก Browse ไฟล์ .tar ที่ทำไวในข้อ 4.2.1. เลือกเสร็จแล้วกด import รอสักครู่ให้โปรแกรมนำเข้าข้อมูล project เสร็จก่อน



๕. เมื่อนำเข้าเสร็จแล้วให้เปิด terminal ใน windows ที่ใดก็ได้แล้วพิมพ์คำสั่ง docker run –name <ชื่อ contrainer> –volume=<ชื่อ volume>:/var/www/html -p <port https>:443 -p <port sftp>:22 -t -d <ชื่อ images ที่ใช้> sh -c “(/usr/sbin/sshd || echo ‘SSH not found, continuing…’); apache2-foreground”
<ชื่อ contrainer> เช่น gotouni-web
<ชื่อ volume> เช่น gotouni-code
<port https> port สำหรับเปิดเว็บด้วย https ถ้าจะไม่ใส่ port ให้ใช้ 443:443 เช่น 2006:443
<port sftp> port สำหรับเชื่อมต่อ sftp ถ้าจะไม่ใส่ port ให้ใช้ 22:22 เช่น 2007:22
<ชื่อ images ที่ใช้> เลือก images ตาม version php ที่ตัวเองใช้ เช่น bucchub/php-apache-dev:8.1
เมื่อพิมพ์คำสั่งเสร็จกด enter คำสั่งจะไปสร้าง container ตามที่เราตั้งชื่อไว้ จากนั้นก็เข้าใช้งานเว็บได้ตามปกติ


กรณีที่ใช้ framework codeigniter ให้เปิด terminal ของตัว container แล้วพิมพ์คำสั่ง ดังนี้ เพื่อแก้ root path
sed -i ‘s|DocumentRoot ${APACHE_DOCUMENT_ROOT}|DocumentRoot /var/www/html|g’ /etc/apache2/sites-available/default-ssl.conf
sed -i ‘s|DocumentRoot ${APACHE_DOCUMENT_ROOT}|DocumentRoot /var/www/html|g’ /etc/apache2/sites-available/000-default.conf
sed -i ‘s|<Directory ${APACHE_DOCUMENT_ROOT}>|<Directory /var/www/html>|g’ /etc/apache2/apache2.conf
๖. การแก้ไข code project แนะนำ 2 วิธีคือ
๑. ใช้ sftp connect
๒. ใช้ extension ของ Cursor หรือ VS Code ชื่อ Dev Containers
หากต้องการใช้งาน extension Dev Containers ให้เข้าไปที่ extension ของ Cursor หรือ VS Code แล้วค้นหาคำว่า Dev Containers หรือ Docker แล้วเลือก Dev Containers กด install เมื่อติดตั้งเสร็จแล้วให้ไปที่มุมซ้ายล่างจะมีคำว่า Open a Romote Windows คลิกแล้วเลือก Attach to Running Container



เลือก container ที่ต้องการ connect เมื่อเลือกเสร็จแล้วโปรแกรมจะเปิดหน้าต่างใหม่ให้ ให้เราเลือก open foler ไปที่ var/www/html แล้วกด ok



การปิด Romote Container ให้คลิกที่มุมซ้ายล่าง แล้วเลือก Close Remote Connection


ผลลัพธ์ที่ได้
หน้าเว็บที่ใช้งานแสดงผลได้เร็วขึ้น โดยเปรียบเทียบด้วยการใช้ laravel-debugbar

Tag:pantakarn
