Bài viết này dùng để ghi lại các bước cơ bản để dễ dàng deploy một thử thách web Flask cho team nghiên cứu.
Chuẩn bị folder với cấu trúc sau:
web-flask
├── templates/
│ └── vuln.html
├── docker-compose.yml
├── Dockerfile
├── app.py
└── requirements.txt
1. vuln.html
<html>
<body>
<h1>This site is vulnerable</h1>
</body>
</html>
2. app.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def vuln():
return render_template('vuln.html')
if __name__ == '__main__':
app.run()
3. requirements.txt
Flask
4. Dockerfile
FROM python:3.7-alpine
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./app.py" ]
Giải thích thì:
ý nghĩa | |
---|---|
FROM python:3.7-alpine | Lấy image từ docker hub làm môi trường chạy web. |
WORKDIR | Trỏ vào thư mục làm việc. |
COPY | Copy file từ source vào destination (source là thư mục hiện tại, destination là thư mục bên trong docker) |
RUN | Chạy lệnh khi build image. |
CMD | Chỉ cho Docker biết lệnh nào sẽ được chạy khi container bắt đầu được chạy. |
3. docker-compose.yml
version: "3.9"
services:
web-flask:
build: .
ports:
- "19062:5000"
volumes:
- .:/usr/src/app
Giải thích thì:
ý nghĩa | |
---|---|
version: “3.9” | Version của file docker-compose (cái này giữ nguyên). |
services | Chứa các container. Với mỗi service là tên của một container (tên container chọn tùy ý). |
build | Chỉ ra vị trí đường dẫn đặt Dockerfile (như trên là trỏ về thư mục hiện tại). |
ports | Kết nối port của máy host đến port của container (như trên thì 19062 là port của máy chủ, 5000 là port mặc định của dịch vụ flask). |
volumes | Gắn đường dẫn trên host machine được sử dụng trên container. |
4. Run docker-composer
sudo docker-composer up
Test lại bằng cách truy cập localhost:19062
.