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

$docker-machine create --driver virtualbox default

จากนั้นเข้าใจงาน machine default ซะ

$docker-machine env default
$eval "$(docker-machine env default)"

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

โดยสิ่งที่ต้องการประกอบไปด้วย

  • ใช้ระบบปฏิบัติการ Alpine เพราะว่าขนาดมันเล็กและเพียงพอต่อการใช้งาน
  • ทำการติดตั้ง package ต่าง ๆ ที่ต้องการผ่าน apt-get เช่น python เป็นต้น
  • ทำการ deploy ระบบงาน หรือ ทำการ clone มาจาก repository ก็ได้
  • ทำการติดตั้ง library/dependency ต่าง ๆ ผ่าน pip

โดยรวมแล้วสามารถสร้างใน Dockerfile ได้ดังนี้

เมื่อเรียบร้อยก็มาสร้าง Image ใช้งานกัน ด้วยคำสั่ง

$docker build -t my_python_image .

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

โดยสร้าง container มาจาก Image ที่สร้างจากขั้นที่ 3 นั่นเอง
ด้วยคำสั่ง

$docker run --name my_python_container -p 8000:8888 -i -t my_python_image

คำอธิบาย

  • ตั้งชื่อ 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