Docker Image และการ Dockerize
อะไรคือ Docker Image ในการที่เราจะ Deploy Application ลงบน Docker นั้น เราต้องสร้างสื่งที่เรียกว่า Image เพื่อที่จะเป็นแม่แบบในการสร้าง Docker Container (Application จริง ๆ ที่รันบน Docker Engine) หลัก ๆ ก็เหมือนแท่นพิมพ์ที่จะพิมพ์ Application หลาย ๆ ตัวออกมา ซึ่งอาจจะเป็น Application เดียวกันก็ได้
ซึ่งจะได้ Docker Images มาอย่างไรละ อันนี้ก็จะมาพูดถึงกระบวนการ Dockerize มันก็คือการสร้าง DockerFile เพื่อบอก Docker ว่า Image นี้จะใช้ Library หรือ Dependency อะไรบ้างในการรัน เมื่อสร้าง Container ขึ้น ซึ่งกระบวนการ Dockerize นี้ขึ้นอยู่กับว่าเขียน Application โดยใช้ ภาษาอะไร อันนี้ผมจะสาธิตจากฝั่ง .net Core นะครับผม
เนื่องจากผมพัฒนา .net core API ก็เปิด Visual Studio ขึ้นมาครับ สร้างโปรเจ็ค เป็น .net Core
หลังจากนั้นให้คลิกขวาที่โปรเจ็ค Add -> Docker Support
แล้วก็เลือกเป็น Linux นะขรั่บ
ก็จะได้หน้าตา Docker File ประมาณนี้ครับ
อธิบายกันอีกซักหน่อย
FROM คือ Base Image ที่เราจะนำมาใช้ ซึ่งมีทั้ง Lib ที่ Application ของเราต้องใช้ ซึ่งพิ้นฐานสุด ๆ ก็คือ Linux Lib แล้ว Microsoft ก็เอามาใส่ Lib ของตัวเองให้เราใช้งานได้
WORKDIR เซ็ตว่า คำสั่งกำลังทำงานอยู่ที่ Directory ไหน
EXPOSE คือการเปิด Port ว่า Application นี้ใช้ Port อะไร
RUN รันคำสั่ง Shell
COPY ….เอ่อ ก็ตรงตัวเนอะ
ซึ่งเราสามารถเขียนเองก็ได้ ขึ้นอยู่กับภาษาที่เขียน ก็จะใช้ BaseImage แตกต่างกันไป แต่ .netcore ดีหน่อนที่ Microsoft เค้าทำให้แล้ว สบายเบย
ข้อควรระวัง ถ้า Application เรามี Nuget Local อื่น ๆ ต้อง Copy ไปไว้ใน Container ก่อนรันคำสั่ง dotnet Restore ด้วย ไม่งั้นมันจะหา Nuget ไม่เจอนะจ้ะ ทำไฟล์ Nuget.config แล้วระบุเข้าไปในไฟล์ว่า Nuget Server อยู่ไหน แต่เด๋วไว้บอกละเอียดในบทอื่นละกันนะครับ
ลองรันกันกอ่นดีกว่า คลิกขวาที่โปรเจ็คก่อน เลือก Set as Startup แล้วรันเทสก่อนว่า Application เราทำงานปกติรึป่าว
ก็ดูทำงานถูกต้องเนอะ คราวนี้ คลิกขวาที่Docker-compose -> Set as Startup ซิ
จากนั้นเปลี่ยน Mode Debug เป็น Release
กดรัน รอให้เสร็จ แล้ว Stoppu
จากนั้น เปิด Powershell แล้วพิมพ์ docker images
ก็จะเห็นว่าเราได้ Image ของเราเพื่อเตรียมสร้าง Container เรียบร้อยแล้วครับ เราก็เอา Image นี้ไป Docker hub ในบทถัดไปได้เลย