Docker 簡單部署

我使用的 windows,前端使用 React 框架,后端使用 Flask 框架。

安裝

官網(wǎng)下載網(wǎng)址,下載 Docker Desktop。

部署 Flask 項目

在 app.py 同級目錄下創(chuàng)建 Dockfile 文件。

FROM python:3.9 as build
WORKDIR /app
COPY . .
RUN pip3 install -r requirements.txt
EXPOSE 5000
CMD [ "python3","app.py" ]

第一行用 FROM 命令制定一個基礎(chǔ)鏡像,省去很多軟件安裝配置。

WORKDIR 指定之后所有 Docker 命令的工作路徑,如果路徑不存在,Docker 會自動幫你創(chuàng)建。

COPY 將所有的程序拷貝到 Docker 鏡像中。COPY <本地路徑> <目標(biāo)路徑>. 代表程序根目錄下的所有文件;第二個參數(shù)代表 Docker 鏡像中的路徑,這里的 . 代表當(dāng)前的工作路徑,也就是之前指定的 app 目錄。

RUN 允許我們在創(chuàng)建鏡像時運行任意的 shell 命令。

EXPOSE 設(shè)置容器對外暴露的端口號為 5000。

使用 CMD 指定當(dāng) Docker 容器運行起來以后要執(zhí)行的命令。

RUN 是創(chuàng)建鏡像的時候使用的,而 CMD 是運行容器的時候使用的。

接下來在項目終端,使用 docker build 創(chuàng)建一個鏡像。

docker build -t flask-backend .

-t:tag/標(biāo)簽 指定鏡像的名字
. 告訴 docker 應(yīng)該在當(dāng)前目錄下尋找這個 Dockerfile。

第一次調(diào)用 docker build 會比較慢,因為 Docker 會下載必要的鏡像文件,然后一行行運行指令,但是之后就會比較快,因為 Docker 會緩存之前的每個操作。

docker run -p 5000:5000 -d flask-backend

-p 會將容器上的某個端口映射到本地主機(jī)上,前面是主機(jī)端口,后面是容器端口號
-d 讓容器在后臺運行,這樣容器的輸出不會直接顯示在控制臺

容器命令行指令

刪除 Docker 容器,會連帶著將其中的數(shù)據(jù)也一并刪除。如果想保留數(shù)據(jù),可以使用 Docker 提供的 volume 數(shù)據(jù)卷。可以把它當(dāng)做一個在本地主機(jī)和不同容器中共享的文件夾。

// 創(chuàng)建數(shù)據(jù)卷
docker volume create 數(shù)據(jù)卷名
// 啟動 docker 并把數(shù)據(jù)掛在到指定路徑下
docker run -dp 5000:5000 -v 數(shù)據(jù)卷名:/etc/finance flask-backend

將數(shù)據(jù)卷名掛載到了 /etc/finance 路徑下,向這個路徑寫入的任何數(shù)據(jù)都會被永久地保存在這個數(shù)據(jù)卷中。

前端 Dockerfile 內(nèi)容

# 基于Node
FROM node:14 as build
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build

# 基于nginx
FROM nginx:latest
EXPOSE 80
COPY --from=build /app/build /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf

在項目總文件夾下創(chuàng)建 docker.yml 文件

version: "3.8"
services:
  frontend:
    image: frontend
    ports:
      - "80:80"
  backend:
    image: flask-backend
    ports:
      - "5000:5000"
    volumes:
      - ./flaskBackend/static:/static

在終端運行 docker compose up 就能把兩個服務(wù)都起來。

簡化版命令合集
就是這幾個文件都放好位置,在終端運行,先創(chuàng)建前后端的鏡像,然后直接使用 docker.yml 一并運行起來。

// 前端項目目錄下
docker build -t frontend .
// 后端項目目錄下
docker build -t flask-backend .
// 總目錄下
docker compose up

最終在網(wǎng)頁中輸入 http//localhost:80/ 就能看到前端頁面了。

如果修改了本地的文件,我目前使用的方法是重新在該項目下 build 一個新的項目,然后修改 docker.yml 中指定的鏡像名,直接在終端 docker compose up

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容