Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

จัดการ Python project ด้วย Docker กันหน่อย

$
0
0

docker-python

docker-python วันนี้มานั่งฟังการแบ่งปันเรื่อง Docker ที่ SPRINT3R ตั้งแต่เรื่องพื้นฐานไปยัน Docker Swarm กันเลย !! ดังนั้นจึงลองมาสร้างสิ่งที่ต้องการนิดหน่อย คือการเตรียม environment ไว้สำหรับ Python project ประเด็นหลัก ๆ คือการจัดการ library หรือ dependency ต่าง ๆ ปล. ปกติจะใช้งาน virtualenv ซึ่งทำงานได้แจ่มมาก ๆ ทำให้เราจัดการ dependency ต่าง ๆ ตาม version ของ python บนเครื่องเดียวกัน แต่ถ้าต้องการเตรียม environment ต่าง ๆ เพิ่มล่ะ เช่น
  • Database
  • Messaging server
  • Search server
จะต้องทำอย่างไร ให้เราทำงานได้ง่ายและสะดวกขึ้น ? หนึ่งในทางเลือกก็คือ Docker ดังนั้นมาเริ่มสร้างกันหน่อยสิ

เริ่มด้วยวิธีง่ายสุด ๆ คือ ใช้ Dockerfile อย่างเดียว

โดย library ต่าง ๆ ของระบบงานจะอยู่ในไฟล์ requirments.txt ประกอบไปด้วย
  • Flask
  • Jinja2
  • Werkzeug
  • distribute
  • wsgiref
มีขั้นตอนการสร้างดังนี้

ขั้นที่ 1 ทำการสร้าง machine ด้วย Docker machine

ตั้งชื่อว่า default [code]$docker-machine create --driver virtualbox default[/code] จากนั้นเข้าใจงาน machine default ซะ [code] $docker-machine env default $eval "$(docker-machine env default)" [/code]

ขั้นที่ 2 สร้าง Dockerfile สำหรับระบบงาน

โดยสิ่งที่ต้องการประกอบไปด้วย
  • ใช้ระบบปฏิบัติการ Alpine เพราะว่าขนาดมันเล็กและเพียงพอต่อการใช้งาน
  • ทำการติดตั้ง package ต่าง ๆ ที่ต้องการผ่าน apt-get เช่น python เป็นต้น
  • ทำการ deploy ระบบงาน หรือ ทำการ clone มาจาก repository ก็ได้
  • ทำการติดตั้ง library/dependency ต่าง ๆ ผ่าน pip
โดยรวมแล้วสามารถสร้างใน Dockerfile ได้ดังนี้ [gist id="7fcc8cc00f4d4ce0c0e70fe0ddd06ca2" file="Dockerfile"] เมื่อเรียบร้อยก็มาสร้าง Image ใช้งานกัน ด้วยคำสั่ง [code] $docker build -t my_python_image . [/code]

ขั้นที่ 3 สร้าง container ใช้งานกันเถอะ

โดยสร้าง container มาจาก Image ที่สร้างจากขั้นที่ 3 นั่นเอง ด้วยคำสั่ง [code] $docker run --name my_python_container -p 8000:8888 -i -t my_python_image [/code] คำอธิบาย
  • ตั้งชื่อ container ว่า my_python_container
  • ทำการ mapping port 8000 เข้ากับ port ของ container ซึ่งกำหนดไว้เป็น 8888 ทำให้สามารถใช้งานผ่าน port 8000 ได้เลย
  • สร้างมาจาก image ชื่อว่า my_python_image
ทดลองการใช้งานแสดงดังรูป docker01 ตัวอย่างของ Dockerfile และ python project อยู่ที่ Github::Up1:: Docker python

เพียงเท่านี้ก็สามารถสร้าง environment แบบง่าย ๆ

สำหรับการพัฒนาระบบงานด้วยภาษา Python ได้ล่ะ ต่อไปถ้ามี service การทำงานเพิ่มขึ้น เช่น Frontend, Backend, Middleware และ Caching สามารถนำ Docker compose มาช่วยจัดการเพิ่มได้ หรือจะใช้ Dockerfile อย่างเดียวก็ได้ เอาที่สบายใจกันนะครับ

ปิดท้ายมาดูขนาดของ image จากการใช้ Ubuntu และ Alpine

ขนาด image เมื่อใช้ Ubuntu docker-ubuntu ขนาด image เมื่อใช้ Alpine docker-alpine

Viewing all articles
Browse latest Browse all 1997

Trending Articles