ถ้าต้องการเจาะจงเอาแค่ตัว netflix-worker (คอนเทนเนอร์ตัวที่รันคิวแปลงหนัง ตัวล่างใน docker ps ของคุณที่ใช้ ID: ddc2690e30db) ขึ้นไปเก็บไว้บน Docker Hub เพื่อนำไปใช้ที่เครื่องอื่น
เนื่องจากโค้ดโปรเจกต์ Laravel ของคุณถูกเชื่อมอยู่ภายนอกผ่าน Volume (.:/var/www/html) เราจึงต้องทำการ “ฝังโค้ด” เข้าไปใน Image ก่อนจะ Push ครับ โดยทำตาม 3 ขั้นตอนนี้ได้เลย:
ขั้นตอนที่ 1: สร้างไฟล์ Dockerfile ในโฟลเดอร์โปรเจกต์
ให้สร้างไฟล์ใหม่ชื่อว่า Dockerfile.worker ไว้ในโฟลเดอร์หลักของโปรเจกต์คุณ (โฟลเดอร์เดียวกับที่มีไฟล์ compose.yaml) แล้วใส่โค้ดนี้ลงไปครับ:
Dockerfile
# ใช้ Image sail ที่มี PHP 8.5 ในเครื่องของคุณเป็นฐาน
FROM sail-8.5/app
# ย้ายโฟลเดอร์ทำงานไปที่ /var/www/html
WORKDIR /var/www/html
# คัดลอกซอร์สโค้ด Laravel ทั้งหมดในเครื่องของคุณ ฝังเข้าไปใน Image
COPY . /var/www/html
# สั่งให้ตัวคอนเทนเนอร์นี้ทำหน้าที่เฝ้าคิวแปลงหนังทันทีที่เปิดใช้งาน
CMD ["php", "artisan", "queue:work", "--timeout=14400", "--tries=3"]
ขั้นตอนที่ 2: สั่ง Build เป็น Image ของคุณเอง
เปิด Terminal ในโฟลเดอร์โปรเจกต์ แล้วรันคำสั่งด้านล่างนี้เพื่อประกอบร่างโค้ดเข้ากับตัวรันคิว (อย่าลืมเปลี่ยน your_username เป็นชื่อ Username ของคุณบน Docker Hub)
Bash
docker build -f Dockerfile.worker -t your_username/netflix-worker:latest .
(หมายเหตุ: อย่าลืมจุด . ตัวสุดท้ายของคำสั่ง)
ขั้นตอนที่ 3: ล็อกอินและ Push ขึ้น Docker Hub
เมื่อทำการ Build เสร็จเรียบร้อยแล้ว ให้รันคำสั่งล็อกอินและอัปโหลดได้เลยครับ:
Bash
# ล็อกอินเข้า賬บล็อคของตนเอง
docker login
# พุชตัว netflix-worker ขึ้นไปเก็บ
docker push your_username/netflix-worker:latest
💡 แนะนำเพิ่มเติม: วิธีเอาไปใช้งานต่อที่เครื่องอื่น (Server จริง)
เนื่องจากโฟลเดอร์ที่เก็บไฟล์หนังจริง ๆ มีขนาดใหญ่มาก เราจึงไม่ควรฝังไฟล์หนังลงไปใน Image (ในขั้นตอนที่ 1 จึงฝังไปแค่โค้ด Laravel)
เวลาคุณไปดึง Image นี้ลงมารันที่เครื่องอื่นหรือบน Server จริง คุณจะต้องสั่งรันโดยเชื่อมโฟลเดอร์หนังของเครื่องนั้น ๆ เข้าไปด้วย ด้วยคำสั่งนี้ครับ:
Bash
docker run -d \
--name netflix-worker \
-v /โฟลเดอร์หนังที่เครื่องใหม่:/var/www/html/storage/app/movies \
-v /โฟลเดอร์เก็บHLSที่เครื่องใหม่:/var/www/html/storage/app/public/movies/hls \
your_username/netflix-worker:latest
