首頁 >科技週邊 >IT業界 >Docker和Docker的功能深度構成

Docker和Docker的功能深度構成

Lisa Kudrow
Lisa Kudrow原創
2025-02-08 09:06:11678瀏覽

The Functional Depth of Docker and Docker Compose

使用Docker Compose和Vultr容器註冊表構建多容器Flask應用

Docker Compose允許用戶使用單個配置文件運行和定義多容器應用程序。它簡化了設置和管理多個容器的過程,從而更容易地開發、測試和部署應用程序。本文將指導您創建一個包含兩個容器的Flask應用程序,使用Vultr容器註冊表(VCR)管理應用程序的Docker鏡像,並利用Docker Compose的多容器功能來管理多個容器。

示例應用程序的創建

以下步驟將引導您創建一個示例應用程序:

  1. 通過Vultr客戶門戶使用Docker市場應用程序部署一個Vultr計算實例。

  2. 使用SSH以非root sudo用戶安全地訪問服務器。

  3. 更新服務器。

  4. 創建一個新的項目目錄並進入該目錄:

    <code class="language-bash">mkdir flask-redis-example
    cd flask-redis-example</code>
  5. 創建一個名為app.py的新文件:

    <code class="language-bash">nano app.py</code>
  6. 添加以下代碼:

    <code class="language-python">from flask import Flask, render_template
    import redis
    
    app = Flask(__name__)
    redis_client = redis.Redis(host='redis', port=6379)
    
    @app.route('/')
    def hello():
        count = redis_client.incr('hits')
        return render_template('index.html', count=count)
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000)</code>

    保存並退出文件。這段Flask代碼連接到Redis數據庫,並在每次訪問根URL時遞增計數器。

  7. 允許傳入連接到端口5000並重新加載防火牆:

    <code class="language-bash">sudo ufw allow 5000
    sudo ufw reload</code>
  8. 創建一個名為requirements.txt的新文件:

    <code class="language-bash">nano requirements.txt</code>
  9. 添加以下包:

    <code>flask
    redis</code>

    保存並關閉文件。

  10. flask-redis-example目錄內創建另一個目錄並進入該目錄:

    <code class="language-bash"> mkdir static
     cd static</code>
  11. 創建一個名為styles.css的新文件:

    <code class="language-bash"> nano styles.css</code>
  12. 添加以下代碼:

    <code class="language-css"> body {
         font-family: Arial, sans-serif;
         text-align: center;
         background-color: #f4f4f4;
         margin: 0;
         padding: 0;
     }
    
     h1 {
         color: #333;
         margin-top: 50px;
     }
    
     p {
         font-size: 18px;
         color: #666;
     }</code>

    保存並退出文件。

  13. flask-redis-example目錄內創建另一個目錄並進入該目錄:

    <code class="language-bash"> mkdir templates
     cd templates</code>
  14. 創建一個名為index.html的新文件:

    <code class="language-bash"> nano index.html</code>
  15. 添加以下代碼:

    <code class="language-html"> <!DOCTYPE html>
     
     
         <title>Flask App</title>
         <link rel="stylesheet" href="%7B%7B%20url_for('static',%20filename='styles.css')%20%7D%7D">
     
     
         <h1>Hello, World!</h1>
         <p>I have been seen {{ count }} times.</p>
     
     </code>

    保存並退出文件。

使用Vultr容器註冊表

在本節中,您將創建一個Vultr容器註冊表,將您的Docker鏡像上傳到註冊表,並設置一個Docker Compose文件來設置Flask和Redis數據庫的服務。

  1. 部署一個Vultr容器註冊表。

  2. flask-redis-example目錄中創建一個Docker清單:

    <code class="language-bash">nano Dockerfile.flask</code>
  3. 添加以下配置:

    <code class="language-dockerfile">FROM python:3.9-slim
    
    WORKDIR /app
    
    COPY requirements.txt .
    RUN pip install --no-cache-dir -r requirements.txt
    
    COPY app.py .
    COPY static/ ./static/
    COPY templates/ ./templates/
    
    EXPOSE 5000
    
    CMD ["python", "app.py"]</code>

    保存並退出文件。

  4. 構建Docker鏡像:

    <code class="language-bash">docker build -t flask-app .</code>
  5. 登錄到您的Vultr容器註冊表:

    <code class="language-bash">docker login <url> -u <user> -p <password></password></user></url></code>

    請務必替換<url></url><user></user><password></password>,這些詳細信息在您的Vultr容器註冊表的概述部分提供。

  6. 標記Docker鏡像:

    <code class="language-bash">mkdir flask-redis-example
    cd flask-redis-example</code>
  7. 將鏡像推送到Vultr容器註冊表:

    <code class="language-bash">nano app.py</code>

    推送Docker鏡像後,請在Vultr儀表板上的Vultr容器註冊表的“存儲庫”部分驗證鏡像是否存在。

  8. 創建一個名為docker-compose.yaml的新文件:

    <code class="language-python">from flask import Flask, render_template
    import redis
    
    app = Flask(__name__)
    redis_client = redis.Redis(host='redis', port=6379)
    
    @app.route('/')
    def hello():
        count = redis_client.incr('hits')
        return render_template('index.html', count=count)
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000)</code>

    保存並退出文件。上述YAML配置定義了兩個服務webredisweb服務從當前目錄(.)構建Flask應用程序,並將容器的端口5000映射到主機的端口5000。它還指定web服務依賴於redis服務。 redis服務使用來自Docker Hub的官方Redis Docker鏡像。

  9. 構建Docker Compose文件:

    <code class="language-bash">sudo ufw allow 5000
    sudo ufw reload</code>

    構建過程完成後,訪問http://:5000上的Flask應用程序。嘗試多次刷新網站,並觀察訪問頁面次數的計數是否遞增。

更多Vultr容器註冊表的使用

  • Vultr容器註冊表與Docker
  • Vultr容器註冊表與Kubernetes
  • 構建vLLM容器鏡像
  • 構建Llama.cpp容器鏡像
  • 構建PyTorch容器鏡像

最佳實踐

  • 保持docker-compose.yaml文件井然有序且有良好的文檔記錄。
  • 使用命名卷來持久化數據,而不是綁定主機目錄。
  • 使用環境變量來存儲敏感數據,例如密碼和API密鑰。
  • 使用Docker Compose的內置命令,例如docker-compose updocker-compose downdocker-compose ps來管理容器。

結論

在本文中,您創建了一個包含兩個容器的Flask應用程序,使用了Vultr容器註冊表來管理應用程序的Docker鏡像,並利用了Docker Compose的多容器功能來管理多個容器。

本文由Vultr贊助。 Vultr是全球最大的私營雲計算平台。 Vultr深受開發人員喜愛,已為185個國家的150多萬客戶提供靈活、可擴展的全球雲計算、雲GPU、裸機和雲存儲解決方案。了解更多關於Vultr的信息

以上是Docker和Docker的功能深度構成的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn