用一個hello world的小例子來入門docker
在 Docker 容器中部署 Python + Flask 的簡單 Hello World 項目,需要遵循以下流程:
- 編寫應用程序
首先,在本地計算機上編寫一個簡單的 Python+Flask 應用程序,例如:
# hello.pyfrom flask import Flask
app = Flask(__name__)@app.route('/')
def hello():return "Hello, World!"if __name__ == '__main__':app.run(debug=True, host='0.0.0.0')
該應用程序創建了一個簡單的 Flask 應用程序,監聽本地的 5000 端口,當訪問根路徑(/)時,返回 “Hello, World!” 信息。
- 創建 Dockerfile
接下來,創建一個 Dockerfile ,指定如何在 Docker 鏡像中構建和運行 Python + Flask 應用程序。Dockerfile主要作用就是來生成鏡像images。例如:
# Dockerfile# 這里選一個在docker公共庫中有的python版本即可
FROM python:3.10.12-slim-bookworm# requirements.txt里面一般存有python項目中需要的包
COPY requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r /app/requirements.txt# 工作目錄/app。在鏡像創建一個容器后,會在其linux系統下多一個目錄,/app。里面存著我們的項目
COPY . /appWORKDIR /app# 指定端口
EXPOSE 5000# 在啟動docker鏡像之后,它會自動運行python hello.py這條命令
CMD ["python", "hello.py"]
該 Dockerfile 的實現過程是這樣的:
- 基于 Python 3.10 版本的 slim 基礎鏡像來構建鏡像。
- 拷貝 requirements.txt 文件到容器中,使用 pip 命令來安裝依賴到鏡像中。
- 將當前文件夾中的所有文件代碼放到容器中名為
/app
的目錄中。 - 使用
WORKDIR
指令設置工作目錄為/app
。 - 定義暴露的端口為 5000。
- 使用
CMD
指令來運行 Python 應用程序。
- 構建鏡像
使用以下命令在本地計算機上構建 Docker 鏡像:
$ docker build -t myflaskapp .
該命令將基于 Dockerfile 構建鏡像,并將其標記為名稱為 myflaskapp
的鏡像。
構建好的鏡像存在本地docker倉庫中,可以用命令 docker images來查看。
- 運行容器
最后,在 Docker 容器中運行 Python+Flask 應用程序,可以使用以下命令:
$ docker run -p 5000:5000 myflaskapp
該命令將基于 myflaskapp
鏡像啟動 Docker 容器,并將 5000 端口映射到本地計算機的 5000 端口上。
在本地計算機上打開瀏覽器,并訪問 http://localhost:5000 ,應該可以看到 “Hello, World!” 信息。
【總結】:
Docker因為其隔絕環境的特性,可以非常方便部署項目。
舉個例子,編寫好的項目proj要編寫dockerfile來定義如何打包鏡像,最后運行docker build命令來完成打包,生成proj對應的鏡像image。然后可以通過docker run 來運行打包好的鏡像image,使其獨立成一個容器container。
因此,只要使用一樣的鏡像image,最后任何人都可以成功在docker上部署項目來復現代碼效果,不用因為環境依賴沖突而煩惱。
【容器共享linux內核】
另外,在docker容器中運行
uname -a
可以查到其版本為
Linux d848bd04657b 5.15.49-linuxkit-pr #1 SMP Thu May 25 07:17:40 UTC 2023 x86_64 GNU/Linux。
這是一個Linux內核版本,不同于Ubuntu、Debian 等發行版。
Ubuntu、Debian 等發行版上面是基于內核安裝了許多其他的工具和應用程序,以便用戶能夠方便地使用它們。
這也可以看出,多個docker容器是共享一個linux內核的。這種方式可以大大減少容器所需的硬件資源,同時也使得容器更加輕量級、高效和便攜。