DEV Community

Tossapol Ritcharoenwattu
Tossapol Ritcharoenwattu

Posted on

Docker Lesson 2 : มาลองสร้าง image กัน

เราจะมาลองสร้าง image ของ web บน ubuntu ด้วย python flask กัน
สิ่งที่เราจะทำ

  1. OS Ubuntu
  2. Update apt repo
  3. Install dependencies using apt
  4. Install python dependencies using pip
  5. Copy source code to /opt/ folder
  6. Run the web server using flask command

สร้าง app.py ก่อน

import os
from flask import Flask
app = Flask(__name__)

@app.route("/")
def main():
    return "Welcome!"

@app.route('/how are you')
def hello():
    return 'I am good, how about you?'

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8080)
Enter fullscreen mode Exit fullscreen mode

ทดลองสร้าง image แบบ manual กันดูก่อน

  1. run docker จาก image ubuntu และเปิด bash ใน container
docker run -it -p 5001:5000 ubuntu bash
Enter fullscreen mode Exit fullscreen mode
  1. ติดตั้ง python และ virtual envieroment
apt-get update
apt-get install -y python3 python3-pip python3-venv
Enter fullscreen mode Exit fullscreen mode

  1. สร้าง virtualenv
python3 -m venv /opt/venv
Enter fullscreen mode Exit fullscreen mode
  1. Activate virtualenv สำคัญมาก → ทุกครั้งที่จะใช้ venv → ต้อง activate ก่อน:
source /opt/venv/bin/activate
Enter fullscreen mode Exit fullscreen mode

  1. อัปเกรด pip ใน venv
pip install --upgrade pip
Enter fullscreen mode Exit fullscreen mode

  1. ติดตั้ง Flask ใน venv
pip install flask
Enter fullscreen mode Exit fullscreen mode

  1. ตรวจสอบว่า Flask ติดตั้งแล้วหรือยัง
flask --version
Enter fullscreen mode Exit fullscreen mode

  1. Copy app.py เข้าไป เปิด terminal ใหม่
docker cp app.py <container_id>:/opt/source-code/app.py
Enter fullscreen mode Exit fullscreen mode

  1. cd เข้า directory ที่มี app.py
cd /opt/source-code
Enter fullscreen mode Exit fullscreen mode
  1. export FLASK_APP อย่าใช้ path ตรง ๆ เพราะ import จะ error → ใช้ชื่อ module เช่น ถ้าไฟล์คือ app.py → ต้อง export FLASK_APP=app
export FLASK_APP=app
Enter fullscreen mode Exit fullscreen mode
  1. รัน flask
flask run --host=0.0.0.0 --port=5000
Enter fullscreen mode Exit fullscreen mode

12 : ลองเข้า web url : http://localhost:5001

เข้าได้ปกติ ทีนี้เราจะมาสร้าง dockerfile ตาม step ที่ทำมากัน

สร้าง Dockerfile

FROM ubuntu:latest

# ติดตั้ง python + pip + venv
RUN apt-get update && \
    apt-get install -y python3 python3-pip python3-venv

# สร้าง virtualenv
RUN python3 -m venv /opt/venv

# ติดตั้ง flask ใน venv
RUN /opt/venv/bin/pip install --upgrade pip && \
    /opt/venv/bin/pip install flask

# Copy app.py เข้า container
COPY app.py /opt/source-code/app.py

# set PATH → ใช้ venv
ENV PATH="/opt/venv/bin:$PATH"
ENV FLASK_APP=/opt/source-code/app.py
EXPOSE 5000
CMD ["flask", "run", "--host=0.0.0.0", "--port=5000"]
Enter fullscreen mode Exit fullscreen mode

เสร็จแล้ว build image ด้วย command

docker build Dockerfile -t tossapol/my-custom-app
Enter fullscreen mode Exit fullscreen mode

จะพบว่ามี image ที่เราสร้างขึ้น

ลองสร้าง container จาก image my-custom-app

เราจะสามารถใช้งาน app ที่เราทำไว้ได้ทันที

Top comments (0)