用Docker搭建web開發環境


需要解決的主要問題:如何在宿主機修改代碼,在容器中實時刷新代碼效果。

解決方案就是VOLUME,掛載。具體操作方式也有多種,本文通過編寫compose文件的方式來實現掛載。

本文假設讀者已經了解Docker的基礎知識:鏡像、容器的概念,Docker的基本操作。

筆者使用docker的思想是:鏡像作為材料,Compose作為藍圖,通過修改藍圖來生成分別適用於開發、測試、生產環境的容器。

鏡像是一個相對比較固定的部分。

具體實踐是:Dockerfile來生成鏡像,鏡像包含運行時的必要條件(庫依賴、源碼之類)。Compose來決定運行時的環境(容器連接、掛載、環境變量等)。

以flask項目為例。

新建一個目錄叫 flask-demo, 這個目錄將存放我們的項目源碼和Dockerfile文件。

$ mkdir flask-demo

$ cd flask-demo

新建一個flask項目

在flask-demo里創建一個目錄叫hello,並創建flask項目放於該目錄。

現在的目錄結構是這樣的

flask-demo
	- hello  # 這里就是flask項目
		- app.py
		- ..... 

app.py文件如下:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

通過Dockerfile創建新鏡像

創建一個鏡像,該鏡像包含web源碼和web的依賴。

在flask-demo目錄里,創建Dockerfile文件

Dockerfile

FROM python

RUN apt-get update

RUN pip install flask

WORKDIR /app

COPY ./hello /app/hello

ENTRYPOINT FLASK_APP=/app/hello/app.py flask run  -h 0.0.0.0  -p 80

EXPOSE 80

生成鏡像

# build一個名為flask-demo的鏡像
$ docker build -t flask-demo ./
# 運行flask-demo鏡像. 將宿主機的5000端口映射到容器的80端口
$ docker run -p 5000:80 flask-demo

現在,瀏覽器輸入 http://localhost:5000 就可以看到正常運行的網頁了。

那么,證明我們的鏡像是OK的了。

但是,現在宿主機修改代碼,容器是不會刷新的,因為容器里面的代碼只是一份拷貝。

現在,我們來編寫compose文件

還是在flask-demo目錄里,新建文件docker-compose.yml

docker-compose.yml

version: "3"

services:
  flask-demo:
    build: ./
    ports:
      - "5000:80"
    volumes:
      - ./hello:/app/hello   #將容器里面的/app/hello掛載到宿主機的./hello目錄
    environment:
      - FLASK_ENV=development  # 指定開發環境,修改代碼會實時刷新項目

(如果Dockerfile和docker-compose.yml有相同的字段配置,那么會優先采用docker-compose.yml的配置。)

現在來測試一下我們的compose文件。

【記得把剛才運行的容器停止了】

執行以下命令來運行容器

$ docker-compose up

現在,瀏覽器輸入 http://localhost:5000 就看到正常運行的網頁了。

然后修改flask項目的app.py並保存,刷新瀏覽器,你會發現內容實時刷新了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM