最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker Compose 搭建簡(jiǎn)單的Python網(wǎng)絡(luò)應(yīng)用程序(步驟詳解)

 更新時(shí)間:2022年07月26日 11:28:56   作者:哇嗚喵  
在這個(gè)頁(yè)面上,你可以建立一個(gè)簡(jiǎn)單的Python網(wǎng)絡(luò)應(yīng)用程序,運(yùn)行在Docker Compose上,這篇文章主要介紹了Docker Compose 搭建簡(jiǎn)單的Python網(wǎng)絡(luò)應(yīng)用程序,需要的朋友可以參考下

在這個(gè)頁(yè)面上,你可以建立一個(gè)簡(jiǎn)單的Python網(wǎng)絡(luò)應(yīng)用程序,運(yùn)行在Docker Compose上。該應(yīng)用使用Flask框架,并在Redis中維護(hù)一個(gè)點(diǎn)擊計(jì)數(shù)器。雖然樣本使用了Python,但即使你不熟悉它,這里展示的概念也應(yīng)該是可以理解的。(官網(wǎng)教程翻譯)

前提條件

請(qǐng)確保你已經(jīng)安裝了Docker Engine和Docker Compose。你不需要安裝Python或Redis,因?yàn)閮烧叨际怯蒁ocker鏡像提供的。

第1步:設(shè)置

定義應(yīng)用程序的依賴。

  • 為該項(xiàng)目創(chuàng)建一個(gè)目錄。
$ mkdir composetest
$ cd composetest
  • 在你的項(xiàng)目目錄下創(chuàng)建一個(gè)名為 app.py 的文件,并把以下內(nèi)容粘貼進(jìn)去:
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)
@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)

在這個(gè)例子中,redis 是應(yīng)用程序網(wǎng)絡(luò)中的redis容器的主機(jī)名。我們使用Redis的默認(rèn)端口,6379。

處理瞬時(shí)錯(cuò)誤 注意 get_hit_count 函數(shù)的編寫方式。這個(gè)基本的重試循環(huán)讓我們?cè)趓edis服務(wù)不可用時(shí)多次嘗試我們的請(qǐng)求。這在應(yīng)用程序上線的時(shí)候很有用,而且如果Redis服務(wù)需要在應(yīng)用程序的生命周期內(nèi)隨時(shí)重啟,這也使我們的應(yīng)用程序更具彈性。在一個(gè)集群中,這也有助于處理節(jié)點(diǎn)之間的瞬間連接中斷。

  • 在你的項(xiàng)目目錄下創(chuàng)建另一個(gè)名為 requirements.txt 的文件,并將以下內(nèi)容粘貼進(jìn)去:
flask
redis

第2步:創(chuàng)建一個(gè)Dockerfile

在這一步,你要寫一個(gè)Dockerfile來(lái)構(gòu)建一個(gè)Docker鏡像。這個(gè)鏡像包含了Python應(yīng)用程序所需的所有依賴項(xiàng),包括Python本身。

在你的項(xiàng)目目錄中,創(chuàng)建一個(gè)名為 Dockerfile 的文件并粘貼以下內(nèi)容:

# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

這告訴Docker:

  • 從Python 3.7鏡像開(kāi)始構(gòu)建一個(gè)鏡像。

  • 設(shè)置工作目錄為 /code。

  • 設(shè)置 flask 命令使用的環(huán)境變量。

  • 安裝gcc和其他依賴項(xiàng)

  • 復(fù)制 requirements.txt 并安裝Python依賴項(xiàng)。

  • 給鏡像添加元數(shù)據(jù),描述容器在5000端口上監(jiān)聽(tīng)

  • 將項(xiàng)目中的當(dāng)前目錄.復(fù)制到鏡像中的工作目錄.。

  • 將容器的默認(rèn)命令設(shè)置為 flask run。

第3步:在Compose文件中定義服務(wù)

在你的項(xiàng)目目錄下創(chuàng)建一個(gè)名為 docker-compose.yml 的文件,并粘貼以下內(nèi)容:

version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"

這個(gè) Compose 文件定義了兩個(gè)服務(wù):webredis。

Web服務(wù)

web 服務(wù)使用一個(gè)從當(dāng)前目錄下的 Dockerfile 文件構(gòu)建的鏡像。然后它將容器和主機(jī)綁定到暴露的端口8000上。本例服務(wù)使用Flask網(wǎng)絡(luò)服務(wù)器的默認(rèn)端口,即5000。

Redis服務(wù)

redis 服務(wù)使用了一個(gè)從Docker Hub倉(cāng)庫(kù)中拉取的公共Redis鏡像。

第4步:用Compose構(gòu)建和運(yùn)行你的應(yīng)用

  • 在你的項(xiàng)目目錄中,通過(guò)運(yùn)行 docker-compose up 來(lái)啟動(dòng)你的應(yīng)用程序。
$ docker-compose up

Creating network "composetest_default" with the default driver
Creating composetest_web_1 ...
Creating composetest_redis_1 ...
Creating composetest_web_1
Creating composetest_redis_1 ... done
Attaching to composetest_web_1, composetest_redis_1
web_1    |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
redis_1  | 1:C 17 Aug 22:11:10.480 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1  | 1:C 17 Aug 22:11:10.480 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1  | 1:C 17 Aug 22:11:10.480 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
web_1    |  * Restarting with stat
redis_1  | 1:M 17 Aug 22:11:10.483 * Running mode=standalone, port=6379.
redis_1  | 1:M 17 Aug 22:11:10.483 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
web_1    |  * Debugger is active!
redis_1  | 1:M 17 Aug 22:11:10.483 # Server initialized
redis_1  | 1:M 17 Aug 22:11:10.483 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
web_1    |  * Debugger PIN: 330-787-903
redis_1  | 1:M 17 Aug 22:11:10.483 * Ready to accept connections

Compose會(huì)拉取一個(gè)Redis鏡像,為你的代碼構(gòu)建一個(gè)鏡像,并啟動(dòng)你定義的服務(wù)。在這種情況下,代碼在構(gòu)建時(shí)被靜態(tài)地復(fù)制到鏡像中。

如果你在本地Linux上使用Docker、Docker Desktop for Mac或Docker Desktop for Windows,那么網(wǎng)絡(luò)應(yīng)用現(xiàn)在應(yīng)該在你的Docker守護(hù)主機(jī)上監(jiān)聽(tīng)8000端口。將你的網(wǎng)絡(luò)瀏覽器指向http://localhost:8000,找到`Hello World` 消息。如果這還沒(méi)有解決,你也可以試試http://127.0.0.1:8000。

你應(yīng)該在你的瀏覽器中看到一條消息說(shuō):

Hello World! I have been seen 1 times.

3. 刷新頁(yè)面。

這個(gè)數(shù)字應(yīng)該是遞增的。

Hello World! I have been seen 2 times.

  • 切換到另一個(gè)終端窗口,并輸入 docker image ls 來(lái)列出本地圖像。

在這一點(diǎn)上,列出圖像應(yīng)該返回 redisweb。

$ docker image ls
REPOSITORY        TAG           IMAGE ID      CREATED        SIZE
composetest_web   latest        e2c21aa48cc1  4 minutes ago  93.8MB
python            3.4-alpine    84e6077c7ab6  7 days ago     82.5MB
redis             alpine        9d8fa9aa0e5b  3 weeks ago    27.5MB

你可以用 docker inspect <tag or id> 檢查鏡像。

  • 停止應(yīng)用程序,可以在第二個(gè)終端中的項(xiàng)目目錄中運(yùn)行 docker-compose down,或者在啟動(dòng)應(yīng)用程序的原始終端中點(diǎn)擊CTRL+C。

第5步:編輯Compose文件以添加綁定掛載

在你的項(xiàng)目目錄中編輯 docker-compose.yml,為 web 服務(wù)添加一個(gè)綁定掛載。

version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:5000"
    volumes:
      - .:/code
    environment:
      FLASK_ENV: development
  redis:
    image: "redis:alpine"

新的 volumes 鍵將主機(jī)上的項(xiàng)目目錄(當(dāng)前目錄)掛載到容器內(nèi)的 /code,允許你即時(shí)修改代碼,而不需要重建鏡像。environment 鍵設(shè)置 FLASK_ENV 環(huán)境變量,它告訴 flask run 在開(kāi)發(fā)模式下運(yùn)行,并在代碼變化時(shí)重新加載。這種模式只應(yīng)在開(kāi)發(fā)中使用。

第6步:用Compose重新構(gòu)建并運(yùn)行應(yīng)用程序

在你的項(xiàng)目目錄下,輸入 docker-compose up,用更新的Compose文件構(gòu)建應(yīng)用程序,并運(yùn)行它。

$ docker-compose up
Creating network "composetest_default" with the default driver
Creating composetest_web_1 ...
Creating composetest_redis_1 ...
Creating composetest_web_1
Creating composetest_redis_1 ... done
Attaching to composetest_web_1, composetest_redis_1
web_1    |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
...

再次在網(wǎng)絡(luò)瀏覽器中檢查 Hello World 消息,并刷新以看到計(jì)數(shù)的增加。

共享文件夾、卷和綁定掛載

  • 如果你的項(xiàng)目在 Users 目錄之外(cd ~),那么你需要共享你正在使用的Dockerfile文件和volume的驅(qū)動(dòng)器或位置。如果你得到運(yùn)行時(shí)的錯(cuò)誤,表明找不到應(yīng)用文件,卷掛載被拒絕,或服務(wù)無(wú)法啟動(dòng),請(qǐng)嘗試啟用文件或驅(qū)動(dòng)器共享。卷掛載需要在 C:\Users(Windows)或 /Users(Mac)之外的項(xiàng)目共享驅(qū)動(dòng)器,而且對(duì)于Docker Desktop for Windows上任何使用Linux容器的項(xiàng)目都是必需的。

  • 如果你在舊的Windows操作系統(tǒng)上使用Oracle VirtualBox,你可能會(huì)遇到這個(gè)VB故障單中描述的共享文件夾的問(wèn)題。較新的Windows系統(tǒng)符合Docker Desktop for Windows的要求并且不需要VirtualBox。

第7步:更新應(yīng)用程序

因?yàn)閼?yīng)用程序代碼現(xiàn)在是用volume裝入容器的,所以你可以對(duì)其代碼進(jìn)行修改,并立即看到變化,而不需要重建鏡像。

改變 app.py 中的問(wèn)候語(yǔ),并保存它。例如,將 Hello World!的信息改為 Hello from Docker!。

return 'Hello from Docker! I have been seen {} times.\n'.format(count)

在你的瀏覽器中刷新該應(yīng)用程序。問(wèn)候語(yǔ)應(yīng)該被更新,而計(jì)數(shù)器應(yīng)該仍然在遞增。

第8步:試驗(yàn)一些其他命令

如果你想在后臺(tái)運(yùn)行你的服務(wù),你可以向 docker-compose up 傳遞 -d 標(biāo)志(用于 "分離 "模式),并使用docker-compose ps 來(lái)查看當(dāng)前正在運(yùn)行的內(nèi)容:

$ docker-compose up -d
Starting composetest_redis_1...
Starting composetest_web_1...
$ docker-compose ps
       Name                      Command               State           Ports         
-------------------------------------------------------------------------------------
composetest_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp              
composetest_web_1     flask run                        Up      0.0.0.0:8000->5000/tcp

docker-compose 的運(yùn)行命令允許你為你的服務(wù)運(yùn)行一次性的命令。例如,看看 web 服務(wù)有哪些環(huán)境變量可用:

$ docker-compose run web env

參見(jiàn) docker-compose --help 以查看其他可用的命令。

如果你用 docker-compose up -d 啟動(dòng)了Compose,一旦你完成了你的服務(wù),就停止它們:

$ docker-compose stop

你可以用 down 命令來(lái)關(guān)閉一切,完全刪除容器。通過(guò) --volumes,也可以刪除Redis容器所使用的數(shù)據(jù)卷:

$ docker-compose down --volumes

在這一點(diǎn)上,你已經(jīng)明白了 Compose 是如何工作的。

到此這篇關(guān)于Docker Compose 搭建簡(jiǎn)單的Python網(wǎng)絡(luò)應(yīng)用程序的詳細(xì)步驟的文章就介紹到這了,更多相關(guān)Docker Compose 搭建Python網(wǎng)絡(luò)應(yīng)用程序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • liunx內(nèi)存滿了,docker中overlay2爆表解決方案

    liunx內(nèi)存滿了,docker中overlay2爆表解決方案

    這篇文章主要介紹了liunx內(nèi)存滿了,docker中overlay2爆表解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • docker 查看容器的掛載目錄操作

    docker 查看容器的掛載目錄操作

    這篇文章主要介紹了docker 查看容器的掛載目錄操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • 使用OpenSSL生成Kubernetes證書的介紹

    使用OpenSSL生成Kubernetes證書的介紹

    今天小編就為大家分享一篇關(guān)于使用OpenSSL生成Kubernetes證書的介紹,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • docker安裝MinIO全過(guò)程

    docker安裝MinIO全過(guò)程

    這篇文章主要介紹了docker安裝MinIO全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Docker一行命令完成FTP服務(wù)搭建的實(shí)現(xiàn)

    Docker一行命令完成FTP服務(wù)搭建的實(shí)現(xiàn)

    這篇文章主要介紹了Docker一行命令完成FTP服務(wù)搭建的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • docker 安裝TDengine 時(shí)序數(shù)據(jù)庫(kù)的技術(shù)指南

    docker 安裝TDengine 時(shí)序數(shù)據(jù)庫(kù)的技術(shù)指南

    TDengine是一個(gè)高性能、分布式a的時(shí)序數(shù)據(jù)庫(kù),專為物聯(lián)網(wǎng)(loT)和大數(shù)據(jù)分析日設(shè)計(jì),下面給大家分享docker 安裝TDengine 時(shí)序數(shù)據(jù)庫(kù)的技術(shù)指南,感興趣的朋友一起看看吧
    2025-04-04
  • AntDesign?Docker部署詳細(xì)流程

    AntDesign?Docker部署詳細(xì)流程

    這篇文章主要為大家介紹了AntDesign?Docker部署流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Centos下安裝docker教程

    Centos下安裝docker教程

    本文給大家介紹的是在centos下安裝docker的詳細(xì)教程,分為yum安裝和腳本安裝2種方式,有需要的小伙伴可以參考下。
    2016-02-02
  • Docker Compose 常用命令詳解(最新推薦)

    Docker Compose 常用命令詳解(最新推薦)

    Docker Compose 是一個(gè)用于定義和運(yùn)行多容器 Docker 應(yīng)用的工具,本文將詳細(xì)介紹 Docker Compose 的常用命令,幫助你高效地管理容器應(yīng)用,感興趣的朋友一起看看吧
    2025-04-04
  • Docker服務(wù)的重啟服務(wù)命令詳解(systemctl restart docker)

    Docker服務(wù)的重啟服務(wù)命令詳解(systemctl restart docker)

    這篇文章主要介紹了Docker服務(wù)的重啟服務(wù)命令(systemctl restart docker),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評(píng)論

东宁县| 湘潭县| 榆社县| 沂源县| 兴海县| 廉江市| 河源市| 广昌县| 沿河| 宜川县| 泸州市| 甘孜县| 陕西省| 平罗县| 浦江县| 雷波县| 海口市| 宁明县| 融水| 福鼎市| 丽江市| 疏附县| 江口县| 锦屏县| 宁强县| 龙口市| 齐齐哈尔市| 白沙| 綦江县| 清镇市| 响水县| 台中县| 肃北| 晋江市| 清苑县| 乐亭县| 南郑县| 德惠市| 澄江县| 临沂市| 万年县|