โปรเจค DE ง่ายๆ ผ่าน Docker, Apache Airflow

Jaroensak Yodkantha
3 min readSep 29, 2021

--

เมื่อเราพูดถึงการโปรเจค DE ส่วนมากก็คงหนีไม่พ้น Docker

โปรเจคนี้เป็นแค่ส่วนหนึ่งที่ผมได้ ร่ำเรียนวิชาจากคอร์ส R2DE ของ Data TH.com — Data Science ชิลชิล เหมือนเดิม ใครสนใจ ตามมาเลยครับบ แน่นแน่นอน

Docker และ Kubernetes คืออะไร ลองอ่านได้ ที่นี้

การติดตั้ง และการใช้งานเบื้องต้น ของ Docker

แผนของโปรเจคก็คือ

โปรเจคนี้ ผมจะนำโค้ดจากโปรเจค DE ที่เราทำลง Google Cloud ครั้งที่แล้ว
มาปรับแก้นิดหน่อยแล้วก็ใช้การรัน Airflow ใน Docker

โค้ดที่ปรับแต่ง ดูได้ ที่นี่

ขั้นแรกนำไฟล์ทีเราปรับแล้ว มาไว้ใน โฟเดอร์ dags แล้วให้สร้างโฟเดอร์ data อีกอันหนึ่งเพื่อเป็นโฟเดอร์ที่เราไว้เรียก หรือ save ไฟล์ในกระบวนการ

ต่อไปก็เริ่มกระบวนการรัน ตามนี้เลยครับ https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html

อย่างแรกเราก็ต้องโหลก Docker-compose.yml ที่ทาง docker เขาเขียนมาให้ แต่ผมได้ปรับแต่งเล็กน้อยแล้ว มาสารถดูได้ ที่นี้

curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.1.4/docker-compose.yaml'

ต่อไปเราต้องต้อง สร้าง 3 โฟร์เดอร์

mkdir -p ./dags ./logs ./plugins

ยังจำการที่เราเชื่อมต่อกับ Data Base ได้กันไหมครับ ถ้าใครจำไม่ได้ลองอ่าน ที่นี้ เรามี ip username password ต่างๆที่เป็นความลับ ไม่สามารถเปิดเผยได้ เราจึงต้องเก็บไว้ในไฟล์ .env เพื่อความปลอดภัย ดังนั้นจึงใช้คำสั่งเพื่อโหลด

echo -e "AIRFLOW_UID=$(id -u)\nAIRFLOW_GID=0" > .env

ก็จะมี ไฟล์ .env ปรากฏ ในตัวไฟล์(ตรงสีแดง) เราจะได้ airflow id ออกมา จากนั้น เราต้องนำ ข้อมูลของ MySql ของเรามาเก็บไว้ที่นี้ เพื่อความปลอดภัยของข้อมูล

ลองกลับไปดูในไฟล์ python ที่แก้ไขเราจะใช้คำสั้ง os.getenv ดึงออกมา

ตรง port ต้องใส่ int ข้างหน้าด้วย เพราะว่าตอนดึง env ออกมามันจะเป็น str

เมื่อเรามี โฟเดอร์ครบแล้ว ต่อไป ก็รัน airflow-init เพื่อจัดการ database ทุกอย่างให้เรียบร้อย

docker-compose up airflow-init
ก็จะมีการสร้าง container ขึ้นมาใหม่

โดยจะมีการสร้าง username password ขึ้นมาใหม่คือ

เราสามารถเปลี่ยนได้ตรง docker-compose.yml

ปัญหาหนึ่งใน airflow ตรงนี้คือ ไม่มีการ install reqirements ต่างๆ ดังนั้นเราต้องสร้างไฟล์ requirements.txt ไว้ด้วย

และเราก็ใช้เครื่องมือในการ import โดยการรัน pip ในตัว Dockerfile

ทำการ run คำสั่งต่างๆ โดยใช้

docker build -t apache/airflow:2.1.0 .
ทำการติดตั้ง packet ต่างๆ

จากนั้นเราก็ใช้คำสั่ง docker-compose up เพื่อรันได้เลย

docker-compose up

localhost ของเราจะอยู่ที่พอต 8080

แล้วเราก็กด บังคับ run dag เหมือนเดิม

3 ผ่านไปเลยยยย!!

ข้อมูลของเรา ตารางก่อนแก้ และหลังแก้ เป็นเหมือนกับ GCP ที่เราทดลองทำในครั้งที่แล้ว ยอดไปเล้ยยยย

กราบขอบคุณทุกท่านนะครับที่อ่านมาจนจบ ผิดพลาดตรงไหน ก็ขออภัยด้วยนะครับ

ติดชมกันได้นะครับ :)

!!!! ข้อควรระวัง เวลาเชื่อ git อัพเข้า github อย่า อัพไฟล์ .env เข้าไปนะครับ!!!!

GitHub :: https://github.com/jaroensakyod/kubairdoc

--

--

Jaroensak Yodkantha

🔭 I’m open for Blockchain Dev. 🌱My personality is that of a leader, I enjoy conversing with others, am gregarious, and enjoy teaching and sharing