netflix-worker เก็บไว้บน Docker Hub

ถ้าต้องการเจาะจงเอาแค่ตัว 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