欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python項(xiàng)目以docker形式打包部署詳細(xì)流程

 更新時(shí)間:2024年08月30日 08:34:29   作者:做夢(mèng)都在改BUG  
Docker是一個(gè)開(kāi)源項(xiàng)目,為開(kāi)發(fā)人員和系統(tǒng)管理員提供了一個(gè)開(kāi)放平臺(tái),可以將應(yīng)用程序構(gòu)建、打包為一個(gè)輕量級(jí)容器,并在任何地方運(yùn)行,這篇文章主要給大家介紹了關(guān)于python項(xiàng)目以docker形式打包部署的詳細(xì)流程,需要的朋友可以參考下

一、前言

在很久很久以前,我已經(jīng)聽(tīng)過(guò)Docker的大名,當(dāng)時(shí)服務(wù)著急上線(xiàn)雖然考慮過(guò)用Docker來(lái)部署我的服務(wù),但是因?yàn)橼s期的原因放棄了。

這兩天因?yàn)槿A為云服務(wù)器到期,而且阿里云服務(wù)器優(yōu)惠力度特別大的原因,我要把華為云服務(wù)器里的工程遷移到阿里云。

遷移的過(guò)程中,大量的時(shí)間精力浪費(fèi)在了重裝python,加載依賴(lài),遷移項(xiàng)目,配置端口等環(huán)境配置的工作上。

我在想,如果當(dāng)時(shí)用了Docker部署,我至于受這氣?

于是,一不做二不休,就花了點(diǎn)時(shí)間把部署以docker的形式部署了。

在部署前,我以為是一件多么苦難的事,結(jié)果,操作后才發(fā)現(xiàn),原來(lái)最難的一步是跨出第一步。

二、docker安裝

還好,在之前我半途而廢的過(guò)程中,我把經(jīng)驗(yàn)已經(jīng)積累下來(lái)了。

需要注意的是Docker桌面目前僅支持以下幾個(gè)操作系統(tǒng)

我的服務(wù)器是CentOS,所以這個(gè)桌面應(yīng)該是用不了了,但是影響應(yīng)該不大。因?yàn)镈ocker引擎目前支持絕大多數(shù)操作系統(tǒng)。

1. CentOS安裝Docker的先決條件

1.1 確認(rèn)自己的系統(tǒng)版本

如果需要安裝Docker引擎,需要的系統(tǒng)版本必須是7、8、9的版本。并且官方建議Linux內(nèi)核為3.10及以上。

lsb_release -a

版本為7.9,符合條件。

uname -r

內(nèi)核為3.10。符合條件。

1.2 啟用centos-extras存儲(chǔ)庫(kù)

官方說(shuō)明,該存儲(chǔ)庫(kù)默認(rèn)情況下處于啟用狀態(tài),但是如果你之前禁用過(guò)它,則需要重新啟用它。

yum repolist enabled

可以看到,extras存儲(chǔ)庫(kù)已啟用

如果你之前不巧,使用過(guò)以下命令或者其他命令禁用過(guò)extras存儲(chǔ)庫(kù):

sudo vi /etc/yum.repos.d/CentOS-Base.repo

enabled為1 表示正在啟用,為0表示已被禁用。

在進(jìn)行更改后,建議清除YUM緩存,以確保使用最新的倉(cāng)庫(kù)配置。

sudo yum clean all

溫馨提示,不要隨便禁用庫(kù)。

2. 卸載舊版本(如果之前安裝過(guò)的話(huà))

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

因?yàn)椋覜](méi)安裝過(guò)舊版Docker,所以這里顯示沒(méi)有刪除任何東西。

3. 選擇安裝方式

  • 官方推薦通過(guò)設(shè)置Docke存儲(chǔ)庫(kù)的方式安裝,便于安裝和升級(jí)。
  • 也可以在官方下載 RPM 包,手動(dòng)安裝,然后管理純靠手動(dòng)升級(jí)。適合安裝在無(wú)法訪(fǎng)問(wèn)外網(wǎng)的內(nèi)網(wǎng)系統(tǒng)上。
  • 在測(cè)試和開(kāi)發(fā)環(huán)境中,您可以使用自動(dòng)化的便捷腳本來(lái)安裝 Docker。

這邊使用官方推薦的存儲(chǔ)庫(kù)安裝。

4. 安裝流程

4.1 設(shè)置倉(cāng)庫(kù)

首先需要安裝一個(gè)工具包yum-util,它提供了yum-config-manager功能:

sudo yum install -y yum-utils

這個(gè)是官網(wǎng)的中央倉(cāng)庫(kù),國(guó)內(nèi)速度會(huì)有一些慢。

sudo yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo

國(guó)內(nèi)的朋友推薦再加一個(gè)阿里云的鏡像倉(cāng)庫(kù),體驗(yàn)會(huì)好很多。

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4.2 選擇版本安裝

官網(wǎng)給出了直接安裝最新版本和安裝指定版本的指令。

  • 直接安裝最新版本

需要一起安裝 Docker Engine、containerd 和 Docker Compose

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • 選擇指定版本安裝

首先列出所有版本

yum list docker-ce --showduplicates | sort -r

框住的就是版本號(hào),選擇指定版本,然后使用下面的命令進(jìn)行安裝。

sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-buildx-plugin docker-compose-plugin

<VERSION_STRING>部分換為指定版本號(hào)即可。

5. 啟動(dòng)運(yùn)行docker

1. 啟動(dòng) Docker。

sudo systemctl start docker

2. 通過(guò)運(yùn)行映像來(lái)驗(yàn)證 Docker 引擎安裝是否成功。hello-world

sudo docker run hello-world

6. 卸載 Docker 引擎

1. 卸載 Docker Engine、CLI、containerd 和 Docker Compose 包:

sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

2. 主機(jī)上的image、containerd或自定義配置文件不會(huì)自動(dòng)刪除,需要手動(dòng)執(zhí)行。

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

三、python項(xiàng)目Dockerfile編寫(xiě)。

提前聲明,Dockerfile雖然看起來(lái)有點(diǎn)復(fù)雜,但是其實(shí)還是挺容易理清的。可以先參考下我這個(gè)工程的Dockerfile,其實(shí)并不復(fù)雜。

FROM python:3.6

# 設(shè)置工作目錄
WORKDIR /app

# 復(fù)制項(xiàng)目文件到容器中
COPY . /app

# 如果你的鏡像中沒(méi)有 tzdata,則需要安裝它
# 注意:python:3.6 官方鏡像可能已包含 tzdata
# RUN apt-get update && apt-get install -y tzdata && rm -rf /var/lib/apt/lists/*

# 設(shè)置時(shí)區(qū)為東八區(qū)(中國(guó)標(biāo)準(zhǔn)時(shí)間)
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone

# 安裝依賴(lài)
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

# 暴露端口
EXPOSE 7010

# 設(shè)置容器啟動(dòng)時(shí)運(yùn)行的命令
CMD ["python3", "api.py"]

1. 選擇基礎(chǔ)鏡像

FROM python:3.6
  • 作用:指定基礎(chǔ)鏡像為 python:3.6。
  • 注意事項(xiàng):我這里是python項(xiàng)目,選擇的是python的鏡像,如果是nginx或者java項(xiàng)目,需要設(shè)置對(duì)應(yīng)的景象。

2. 設(shè)置工作目錄

WORKDIR /app
  • 作用:設(shè)置工作目錄為 /app。
  • 注意事項(xiàng):這個(gè)目錄的設(shè)置就見(jiàn)仁見(jiàn)智,有的喜歡用project,有的喜歡什么都不設(shè),看公司規(guī)范和個(gè)人習(xí)慣。我們只需要確保后續(xù)的文件操作都是基于這個(gè)工作目錄的。

3. 復(fù)制項(xiàng)目文件到容器中

COPY . /app
  • 作用:將當(dāng)前上下文中的所有文件和目錄復(fù)制到鏡像的 /app 目錄下。這里直接用當(dāng)前目錄就行。
  • 注意事項(xiàng):可以使用 .dockerignore 文件排除不需要的文件和目錄,以減少鏡像大小。規(guī)則和gitignore一個(gè)路數(shù)。需要確保的是敏感文件(如密鑰、密碼等)不會(huì)被復(fù)制到鏡像中。

4. 安裝 tzdata(可選)

# RUN apt-get update && apt-get install -y tzdata && rm -rf /var/lib/apt/lists/*
  • 作用:安裝 tzdata 以確保時(shí)區(qū)設(shè)置能夠正確工作。(可選)
  • 注意事項(xiàng):如果基礎(chǔ)鏡像已經(jīng)包含 tzdata,則可以省略此步驟。

5. 設(shè)置容器時(shí)區(qū)

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
  • 作用:設(shè)置容器的時(shí)區(qū)為東八區(qū)(中國(guó)標(biāo)準(zhǔn)時(shí)間)。這個(gè)是docker老生常談的問(wèn)題,他的時(shí)區(qū)需要自己更正。
  • 注意事項(xiàng):確保應(yīng)用或服務(wù)需要這個(gè)特定的時(shí)區(qū)設(shè)置。國(guó)內(nèi)的一般應(yīng)該都需要,不然打個(gè)日志都不確定是啥時(shí)候的了。

6. 安裝 Python 依賴(lài)

RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
  • 作用:下載需要的第三方庫(kù)。
  • 注意事項(xiàng):這個(gè)requirements.txt,直接用pipreqs生成就行。需要注意的是要掛個(gè)國(guó)內(nèi)的 PyPI 鏡像來(lái)安裝 Python 依賴(lài),不然依賴(lài)下載太慢了。我這里是使用清華大學(xué)的鏡像。

7. 暴露端口

EXPOSE 7010
  • 作用:聲明容器在運(yùn)行時(shí)應(yīng)該監(jiān)聽(tīng) 7010 端口。
  • 注意事項(xiàng):沒(méi)啥需要注意的,自己設(shè)置需要的端口就行。

8. 設(shè)置容器啟動(dòng)時(shí)運(yùn)行的命令

CMD ["python3", "api.py"]
  • 作用:設(shè)置容器啟動(dòng)時(shí)默認(rèn)執(zhí)行的命令。
  • 注意事項(xiàng):根據(jù)個(gè)人需要設(shè)置就行。如果你的應(yīng)用需要特定的環(huán)境變量或配置,可以在 CMD 之前使用 ENV 指令來(lái)設(shè)置它們。

四、docker鏡像打包

編寫(xiě)完dockerfile,我們一般喜歡放在需要打包的地方的根路徑,然后直接運(yùn)行

docker build -t opendrop . 
  • pythondemo改成自己想要的鏡像的名字。

運(yùn)行之后,docker會(huì)自動(dòng)完成dockerfile里面的每一個(gè)步驟。打包完成后,我們就可以看到images。

大家直接docker images 即可看到。

如果要重新打包,需要先刪除原來(lái)的鏡像,執(zhí)行以下命令即可。

docker rmi a9765c2d0703(鏡像id)

操作如下:

五、根據(jù)鏡像啟動(dòng)容器

根據(jù)鏡像創(chuàng)建容器執(zhí)行以下命令

`docker run -d -p 要映射的本機(jī)端口:docker中項(xiàng)目運(yùn)行的端口 鏡像名稱(chēng)`

我這里端口都是7010,你們根據(jù)需要自行配置。

docker run  -d -p 7010:7010 opendrop

然后用docker ps就能看到執(zhí)行的容器了。

如果想看項(xiàng)目日志,可以執(zhí)行以下命令進(jìn)入docker查看。

docker exec -it 3843cbd6fb40(容器id) /bin/bash

  • 退出時(shí)使用 ctrl + D 退出

docker 容器相關(guān)常用命令

1. 停止容器

docker stop 【容器id】
  • 停止一個(gè)或多個(gè)正在運(yùn)行的容器。

2. 重啟容器

docker restart 【容器id】
  • 重啟一個(gè)或多個(gè)容器。

3. 刪除容器

docker rm 【容器id】
  • 刪除一個(gè)或多個(gè)容器。參數(shù)-f:強(qiáng)制刪除容器,即使容器正在運(yùn)行。

4. 導(dǎo)出/導(dǎo)入容器

docker export 【容器id】 > file.tar
docker import file.tar 【鏡像名字】
  • 將容器導(dǎo)出為tar文件;從tar文件導(dǎo)入容器為鏡像

總結(jié) 

到此這篇關(guān)于python項(xiàng)目以docker形式打包部署的文章就介紹到這了,更多相關(guān)python以docker打包部署內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python flashtext文本搜索和替換操作庫(kù)功能使用探索

    Python flashtext文本搜索和替換操作庫(kù)功能使用探索

    本文將深入介紹Python flashtext庫(kù),包括其基本用法、功能特性、示例代碼以及實(shí)際應(yīng)用場(chǎng)景,以幫助大家更好地利用這個(gè)有用的工具
    2024-01-01
  • Numpy掩碼式數(shù)組詳解

    Numpy掩碼式數(shù)組詳解

    下面小編就為大家分享一篇Numpy掩碼式數(shù)組詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Python實(shí)現(xiàn)程序判斷季節(jié)的代碼示例

    Python實(shí)現(xiàn)程序判斷季節(jié)的代碼示例

    今天小編就為大家分享一篇關(guān)于Python實(shí)現(xiàn)程序判斷季節(jié)的代碼示例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • PyQt5實(shí)現(xiàn)用戶(hù)登錄GUI界面及登錄后跳轉(zhuǎn)

    PyQt5實(shí)現(xiàn)用戶(hù)登錄GUI界面及登錄后跳轉(zhuǎn)

    PyQt5是強(qiáng)大的GUI工具之一,通過(guò)其可以實(shí)現(xiàn)優(yōu)秀的桌面應(yīng)用程序。本文主要介紹了PyQt5實(shí)現(xiàn)用戶(hù)登錄GUI界面及登錄后跳轉(zhuǎn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-11-11
  • Python中所有子圖標(biāo)簽Legend顯示問(wèn)題記錄

    Python中所有子圖標(biāo)簽Legend顯示問(wèn)題記錄

    在Python中,利用matplotlib創(chuàng)建的子圖可以很容易地添加圖例,無(wú)論是為每個(gè)子圖單獨(dú)添加,還是統(tǒng)一在一起,本文詳細(xì)介紹了如何在多個(gè)子圖中顯示圖例,包括全局圖例的顯示、圖例樣式的調(diào)整和圖例位置的調(diào)整等,需要的朋友可以參考下
    2024-12-12
  • 詳解Python如何實(shí)現(xiàn)查看WiFi密碼

    詳解Python如何實(shí)現(xiàn)查看WiFi密碼

    這篇文章主要為大家詳細(xì)介紹了如何使用python來(lái)試試看看能不能讀取到已連接過(guò)WIFI的密碼,文中的示例代碼講解詳細(xì),?感興趣的小伙伴可以了解下
    2023-11-11
  • python flask服務(wù)端響應(yīng)與重定向處理各種用法小結(jié)

    python flask服務(wù)端響應(yīng)與重定向處理各種用法小結(jié)

    這篇文章主要介紹了python flask服務(wù)端響應(yīng)與重定向處理各種用法小結(jié),本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-03-03
  • 在Django中動(dòng)態(tài)地過(guò)濾查詢(xún)集的實(shí)現(xiàn)

    在Django中動(dòng)態(tài)地過(guò)濾查詢(xún)集的實(shí)現(xiàn)

    本文主要介紹了Django中動(dòng)態(tài)地過(guò)濾查詢(xún)集的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 淺談scrapy 的基本命令介紹

    淺談scrapy 的基本命令介紹

    下面小編就為大家?guī)?lái)一篇淺談scrapy 的基本命令介紹。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Python中執(zhí)行CMD命令的方法總結(jié)

    Python中執(zhí)行CMD命令的方法總結(jié)

    在實(shí)際開(kāi)發(fā)中,有時(shí)候我們需要在Python中執(zhí)行一些系統(tǒng)命令(CMD命令),本文將詳細(xì)介紹在Python中執(zhí)行CMD命令的方法,并通過(guò)豐富的示例代碼幫助大家更全面地理解這一過(guò)程,希望對(duì)大家有所幫助
    2023-12-12

最新評(píng)論