เราจะมาลองสร้าง image ของ web บน ubuntu ด้วย python flask กัน
สิ่งที่เราจะทำ
- OS Ubuntu
- Update apt repo
- Install dependencies using apt
- Install python dependencies using pip
- Copy source code to /opt/ folder
- 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)
ทดลองสร้าง image แบบ manual กันดูก่อน
- run docker จาก image ubuntu และเปิด bash ใน container
docker run -it -p 5001:5000 ubuntu bash
- ติดตั้ง python และ virtual envieroment
apt-get update
apt-get install -y python3 python3-pip python3-venv
- สร้าง virtualenv
python3 -m venv /opt/venv
- Activate virtualenv สำคัญมาก → ทุกครั้งที่จะใช้ venv → ต้อง activate ก่อน:
source /opt/venv/bin/activate
- อัปเกรด pip ใน venv
pip install --upgrade pip
- ติดตั้ง Flask ใน venv
pip install flask
- ตรวจสอบว่า Flask ติดตั้งแล้วหรือยัง
flask --version
- Copy app.py เข้าไป เปิด terminal ใหม่
docker cp app.py <container_id>:/opt/source-code/app.py
- cd เข้า directory ที่มี app.py
cd /opt/source-code
- export FLASK_APP อย่าใช้ path ตรง ๆ เพราะ import จะ error → ใช้ชื่อ module เช่น ถ้าไฟล์คือ app.py → ต้อง export FLASK_APP=app
export FLASK_APP=app
- รัน flask
flask run --host=0.0.0.0 --port=5000
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"]
เสร็จแล้ว build image ด้วย command
docker build Dockerfile -t tossapol/my-custom-app
จะพบว่ามี image ที่เราสร้างขึ้น
ลองสร้าง container จาก image my-custom-app
เราจะสามารถใช้งาน app ที่เราทำไว้ได้ทันที
Top comments (0)