幸運的是,docker實現了咱們的願望。 docker甚至在部分狀況下,搭建環境就和安裝app同樣簡單,只須要一條命令行就可讓服務跑起來。html
例如要搭建一個nginx文件服務:python
docker run -v build:/etc/nginx/html -p 80:80 nginx
複製代碼
不只過程極其簡單,屢次重複嘗試,運行的結果也能保持一致。nginx
docker官方提供了一個新手示例git
項目目錄結構
|-- templates // 頁面模版
|-- index.html
|-- Dockerfile // docker鏡像配置文件
|-- app.py // python服務入口文件
|-- requirements.txt // python依賴文件
複製代碼
自定義一個應用,是經過配置Dockerfile來實現的:github
# 依賴的鏡像
FROM alpine:3.5
# 安裝 python 和 pip
RUN apk add --update py2-pip
# 更新 pip
RUN pip install --upgrade pip
# 安裝應用須要的python依賴包
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r /usr/src/app/requirements.txt
# 複製應用運行須要用到的文件
COPY app.py /usr/src/app/
COPY templates/index.html /usr/src/app/templates/
# 容器須要暴露給外部的接口
EXPOSE 5000
# 運行應用
CMD ["python", "/usr/src/app/app.py"]
複製代碼
在項目根路徑執行構建鏡像命令:docker
docker build -t app:1.0 .
複製代碼
成功後,就可使用生成的鏡像運行應用了:flask
docker run -p 80:5000 app:1.0
複製代碼
當咱們開始完整嘗試用docker部署項目時,會遇到各類須要google的問題:bash
Dockerfile
的volume
爲何沒法實現run
命令 -v
的效果?CMD
和 ENTRYPOINT
有什麼區別?