網(wǎng)站如何做移動適配百度一下百度主頁
使用Docker部署一個python的web服務(wù)🚀
????????由于是從事算法相關(guān)工作,之前在項目中,需要將寫完的代碼服務(wù),部署在docker上,以此是開始接觸了Docker這個工具,由于之前也沒系統(tǒng)學(xué)習(xí)過,之后應(yīng)該可能還會用上,所以打算通過一遍博客的方式記錄一下也學(xué)習(xí)一下,這篇博客主要記錄一個基礎(chǔ)過程,把整個流程簡化,重在理解思路,如果有問題或者寫的不對的地方,歡迎留言或私信交流。
Docker 是一個開源平臺,利用容器技術(shù)將應(yīng)用程序及其所有依賴打包到一個標準化的單元中,從而確保它們能夠在任何計算環(huán)境中一致地運行。容器是輕量級的、可移植的,并且在不同的操作系統(tǒng)和云環(huán)境中運行時具有一致性,使得應(yīng)用程序的開發(fā)、測試和部署過程更加高效和可靠。Docker 使開發(fā)人員和運維人員能夠更容易地協(xié)作,簡化了持續(xù)集成和持續(xù)部署(CI/CD)工作流程。
文章目錄
- 使用Docker部署一個python的web服務(wù)🚀
- 1.Docker 安裝
- 2.編寫一個簡單的web服務(wù)
- 2.1 本地python環(huán)境配置安裝
- 2.1 使用Flask編寫一個 hello_world 服務(wù)
- 3.編寫一個doceker file
- 3.1 使用FROM 命令導(dǎo)入一個基礎(chǔ)鏡像
- 3.2 創(chuàng)建一個工作目錄
- 3.3拷貝項目根目錄下的所有文件到工作目錄
- 3.4在鏡像中安裝Flask
- 3.5運行服務(wù)程序app.py
- 3.6完整的Dockerfile文件
- 4. 在命令控制臺搭建Docker鏡像
- 4.1 使用Docker build 搭建docker鏡像源
- 4.2 使用Docker RUN 運行容器
- 4.3 使用瀏覽器訪問Docker鏡像中運行的服務(wù)
- 結(jié)束
1.Docker 安裝
首先到官網(wǎng)點擊Download進行下載,由于我自己的電腦是windows所以這里下載了一個windows版本
https://www.docker.com/
下載完成之后,正常安裝就一直點就行,打開應(yīng)用,首先會出現(xiàn)啟動引擎的加載動畫,然后進入到如下界面。
然后打開電腦的powershell輸入docker --version
查看一下docker版本,檢查一下通過powershell能不能使用docker命令,這也是檢查docker安裝成功的關(guān)鍵一步,如果打印出版本信息了,表示安裝成功了。
docker --version
2.編寫一個簡單的web服務(wù)
安裝好了docker之后可以先簡單寫一個python的服務(wù)程序,在寫一個新的python項目之前先在anaconda中建一個虛擬環(huán)境。
2.1 本地python環(huán)境配置安裝
新建環(huán)境命令,我這里起的名字是doceker_web(這個命令最后安裝的python的具體版本為3.10.14)
conda create --name docker_web python=3.10
運行上述命令之后,輸入y開始下載虛擬環(huán)境的各種文件。
輸入激活虛擬環(huán)境的命令進入虛擬環(huán)境
conda activate docker_web
然后安裝一個Flask框架,這里我由于我配置了全局清華鏡像源,所以是從鏡像源里下載的。
pip install Flask
之后新建一個項目然后選一下解釋器,0基礎(chǔ)的同學(xué),可以找一下周圍會做的讓你幫著改一下,或者自己搜一下。
2.1 使用Flask編寫一個 hello_world 服務(wù)
之后這里直接寫一個最簡單的服務(wù)代碼,如果零基礎(chǔ)的同學(xué)可移步在下之前的文章。
Flask框架初探-如何在本機發(fā)布一個web服務(wù)并通過requests訪問自己發(fā)布的服務(wù)-簡易入門版
from flask import Flaskapp = Flask(__name__)@app.route("/")
def hello_world():return "Hello, World!"if __name__ == "__main__":app.run(host="0.0.0.0", debug=False)
運行之后使用電腦瀏覽器訪問這個IP地址,可以看到瀏覽器上顯示了一個Hello World。
3.編寫一個doceker file
首先右鍵新建一個file文件,然后命名為Dockerfile
然后就會得到一個空白的Dockerfile文件并自動打開,其實在新建的時候,也有Dockerfile文件的選項,但是新建出來的不是空的,自帶的幾行代碼也沒啥必要,索性直接建一個空的了。
3.1 使用FROM 命令導(dǎo)入一個基礎(chǔ)鏡像
我們需要首先導(dǎo)入一個python的基礎(chǔ)鏡像,首先需要取看一下有哪些基礎(chǔ)鏡像,首先需要點右上角的九個小正方形組成的圖標,然后點擊DockerHub。
進入到以下網(wǎng)站,然后在搜索框中輸入python
搜索之后點擊python
點擊之后下滑可以看到python包含的docker鏡像的版本。
每個鏡像文件由不同的python版本和一些使用操作系統(tǒng)的信息的后綴,這里我們以3.10.14版本為例(由于我們新建的anaconda的虛擬環(huán)境中的python版本是3.10.14)
不同的鏡像使用了不同的操作系統(tǒng),這里通常情況下我們選擇3.10.14-slim
鏡像標簽 | 基礎(chǔ)操作系統(tǒng) | 描述 |
---|---|---|
3.10.14-bookworm | Debian 12 (Bookworm) | 基于Debian 12 (Bookworm) |
3.10.14-slim-bookworm | Debian 12 (Bookworm) | 基于Debian 12 (Bookworm),精簡版 |
3.10.14-bullseye | Debian 11 (Bullseye) | 基于Debian 11 (Bullseye) |
3.10.14-slim-bullseye | Debian 11 (Bullseye) | 基于Debian 11 (Bullseye),精簡版 |
3.10.14-alpine3.20 | Alpine Linux 3.20 | 基于Alpine Linux 3.20 |
3.10.14-alpine3.19 | Alpine Linux 3.19 | 基于Alpine Linux 3.19 |
3.10.14-slim | 多種操作系統(tǒng)的精簡版 | 精簡版,減少了不必要的文件和組件 |
FROM python:3.10.14-slim
3.2 創(chuàng)建一個工作目錄
????????創(chuàng)作工作目錄的作用是,方便歸攏文件,嗯,我是這嗎理解的,相當于在docker的模擬鏡像系統(tǒng)下,新建了一個文件夾,然后之后會把項目文件通過后續(xù)的COPY命令給移動過去,之后還可以在生成文件夾的目錄下執(zhí)行命令,類似于windows有時候需要cd到指定路徑的文件夾下,然后再執(zhí)行命令,這樣避免每一條命令都要帶著絕對路徑。
WORKDIR /app
3.3拷貝項目根目錄下的所有文件到工作目錄
????????該命令,可以將項目文件夾下是所有文件移動到,之前使用WORKDIR目錄中新建的/app目錄下,第一個點表示當前項目的根目錄下的文件,第二個點表示目標路徑,也就是Docker鏡像中的/app目錄,再解釋一句就是執(zhí)行了WORKDIR /app之后,第二個點就被指定為/app目錄(理解成文件夾也行)了
COPY . .
3.4在鏡像中安裝Flask
????????移動完文件,然后就可以給鏡像安裝需要的庫了由于我們只用到了flask,,這里我們?yōu)榱司唭?nèi)容,所以就先只安裝Flask。
# 安裝Flask
RUN pip install Flask
3.5運行服務(wù)程序app.py
最后再加一句運行命令就可以了,這是個固定的格式,等效于我們在控制臺中直接執(zhí)行 python3 app.py 命令。
CMD ["python3", "app.py"]
3.6完整的Dockerfile文件
# 使用基礎(chǔ)鏡像
FROM python:3.10.14-slim# 設(shè)置工作目錄
WORKDIR /app# 拷貝當前項目文件到工作目錄文件夾 COPY<本地路徑><目標路徑>
COPY . .# 安裝Flask
RUN pip install Flask# 運行應(yīng)用
CMD ["python3", "app.py"]
4. 在命令控制臺搭建Docker鏡像
4.1 使用Docker build 搭建docker鏡像源
????????點擊pycharm右下側(cè)的小圖標進入到終端(也可以在外部cmd終端cd進入到項目文件夾下)。
之后在控制臺輸入下面的命令,創(chuàng)建一個名為docker_web的的鏡像(最后的點很重要不能省略)。
docker build -t docker_web .
- docker build:構(gòu)建 Docker 鏡像的命令。
- -t docker_web:為構(gòu)建的鏡像指定一個標簽(docker_web)。
- .:指定構(gòu)建上下文,即當前目錄。Docker 會使用該目錄中的 Dockerfile 和所有相關(guān)文件來構(gòu)建鏡像(從當前目錄下搜索Dockerfile)。
運行之后結(jié)果如下,該命令完成了加載python鏡像源,拷貝項目文件,和安裝Flask的任務(wù)。
4.2 使用Docker RUN 運行容器
docker run -p 80:5000 -d docker_web
- docker run:運行一個新的容器。
- -p 80:5000:將主機的80端口映射到容器的5000端口。這意味著你可以通過訪問主機的80端口來訪問容器中運行的服務(wù)(假設(shè)服務(wù)在容器的5000端口上運行)。
- -d:以守護進程模式(后臺)運行容器。
- docker_web:要運行的鏡像名稱。
這里的5000端口是Flask默認的端口,如果需要修改需要在app.py中設(shè)置指定的端口號
if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
4.3 使用瀏覽器訪問Docker鏡像中運行的服務(wù)
????????之后再瀏覽器中訪問http://127.0.0.1:80
或http://localhost:80
,由于localhost的默認端口是80,所以可以省略端口號的輸入,直接訪問http://127.0.0.1
或http://localhost
,就可以訪問docker容器中運行的web服務(wù)了。
如果想查看docker鏡像中運行服務(wù)的輸出,可以在docker desktop 中的 Containers中點擊容器名字。
????????就可以查看到鏡像容器控制臺的輸出,這里雖然服務(wù)的的端口號是5000但這是docker內(nèi)部鏡像中的端口號,我們在服務(wù)端需要通過80號端口訪問,因為我們已經(jīng)將5000號端口映射到了80號端口。
結(jié)束
????????這篇算是一個基礎(chǔ)筆記性質(zhì)的博客吧,后續(xù)如有用到了一些更多的操作會回來更新,這個暫時就先這樣,留一份以后自己要是用到了就回來看看。