Docker (8) dockerfile 範例
本文示範一個簡單的 dockerfile 並說明常用的指令。
1. Dockerfile:
Dockerfile 是一個構築 Doker image 的腳本,執行 docker build 的時候會依照指定流程建構 image。
2. 建立專案:
考慮一個 Flask 專案,結構長得像下面這樣:
. ├── app.py # flask application └── dockerfile # image 腳本
Flask 是一個 Python 的 web 框架,可以快速建立 web service。
Flask 預設使用 127.0.0.1:5000,下面在 IP:5000/hello 新增一個服務。
from flask import Flask app = Flask(__name__) @app.route('/hello') def hello_world(): return 'Hello, World!' if __name__ == "__main__": app.run(host="0.0.0.0")
開啟終端機,啟動 Flask:
$ pip3 install flask # 安裝 flask $ python3 app.py
然後可以開啟瀏覽器,驗證 127.0.0.1:5000/hello。
3. 打包服務:
編輯 dockerfile:
# FROM 設定基礎 image FROM python:3.7-stretch # RUN 執行指令,安裝套件或是建立資料夾 RUN apt-get update -y && \ apt-get install -y vim && \ apt-get install -y less && \ apt-get install -y net-tools && \ pip install -U pip && \ pip3 install flask && \ mkdir /home/flask_demo # COPY 將檔案如 app.py 拷貝到 image 的指定資料夾 COPY . /home/flask_demo # WORKDIR 指定 image 運行時的資料夾 WORKDIR /home/flask_demo # EXPOSE 說明服務需要的 port EXPOSE 5000 # CMD 執行指令 CMD ["python3", "app.py"]
需要注意的是 Dockerfile 每個指令都會建立一個鏡像層 (像洋蔥一樣),所以即便有多個命令也會寫在同一個 RUN 裡面。
打包 image 並啟動服務。 EXPOSE 不會自己設定 port,所以要自己指定。
$ docker build -t flask_hello . # . 設定 COPY 時的 source 目錄 $ docker run -it --rm -p5000:5000 flask_hello透過 docker ps -a 指令可以觀察到 0.0.0.0:5000->5000/tcp,代表主機 5000 有連接到容器。
留言
張貼留言