使用Docker Compose和Vultr容器註冊表構建多容器Flask應用
Docker Compose允許用戶使用單個配置文件運行和定義多容器應用程序。它簡化了設置和管理多個容器的過程,從而更容易地開發、測試和部署應用程序。本文將指導您創建一個包含兩個容器的Flask應用程序,使用Vultr容器註冊表(VCR)管理應用程序的Docker鏡像,並利用Docker Compose的多容器功能來管理多個容器。
示例應用程序的創建
以下步驟將引導您創建一個示例應用程序:
通過Vultr客戶門戶使用Docker市場應用程序部署一個Vultr計算實例。
使用SSH以非root sudo用戶安全地訪問服務器。
更新服務器。
創建一個新的項目目錄並進入該目錄:
<code class="language-bash">mkdir flask-redis-example cd flask-redis-example</code>
創建一個名為app.py
的新文件:
<code class="language-bash">nano app.py</code>
添加以下代碼:
<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時遞增計數器。
允許傳入連接到端口5000並重新加載防火牆:
<code class="language-bash">sudo ufw allow 5000 sudo ufw reload</code>
創建一個名為requirements.txt
的新文件:
<code class="language-bash">nano requirements.txt</code>
添加以下包:
<code>flask redis</code>
保存並關閉文件。
在flask-redis-example
目錄內創建另一個目錄並進入該目錄:
<code class="language-bash"> mkdir static cd static</code>
創建一個名為styles.css
的新文件:
<code class="language-bash"> nano styles.css</code>
添加以下代碼:
<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>
保存並退出文件。
在flask-redis-example
目錄內創建另一個目錄並進入該目錄:
<code class="language-bash"> mkdir templates cd templates</code>
創建一個名為index.html
的新文件:
<code class="language-bash"> nano index.html</code>
添加以下代碼:
<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數據庫的服務。
部署一個Vultr容器註冊表。
在flask-redis-example
目錄中創建一個Docker清單:
<code class="language-bash">nano Dockerfile.flask</code>
添加以下配置:
<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>
保存並退出文件。
構建Docker鏡像:
<code class="language-bash">docker build -t flask-app .</code>
登錄到您的Vultr容器註冊表:
<code class="language-bash">docker login <url> -u <user> -p <password></password></user></url></code>
請務必替換<url></url>
、<user></user>
和<password></password>
,這些詳細信息在您的Vultr容器註冊表的概述部分提供。
標記Docker鏡像:
<code class="language-bash">mkdir flask-redis-example cd flask-redis-example</code>
將鏡像推送到Vultr容器註冊表:
<code class="language-bash">nano app.py</code>
推送Docker鏡像後,請在Vultr儀表板上的Vultr容器註冊表的“存儲庫”部分驗證鏡像是否存在。
創建一個名為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配置定義了兩個服務web
和redis
。 web
服務從當前目錄(.)構建Flask應用程序,並將容器的端口5000映射到主機的端口5000。它還指定web
服務依賴於redis
服務。 redis
服務使用來自Docker Hub的官方Redis Docker鏡像。
構建Docker Compose文件:
<code class="language-bash">sudo ufw allow 5000 sudo ufw reload</code>
構建過程完成後,訪問http://
更多Vultr容器註冊表的使用
最佳實踐
docker-compose.yaml
文件井然有序且有良好的文檔記錄。 docker-compose up
、docker-compose down
和docker-compose ps
來管理容器。 結論
在本文中,您創建了一個包含兩個容器的Flask應用程序,使用了Vultr容器註冊表來管理應用程序的Docker鏡像,並利用了Docker Compose的多容器功能來管理多個容器。
本文由Vultr贊助。 Vultr是全球最大的私營雲計算平台。 Vultr深受開發人員喜愛,已為185個國家的150多萬客戶提供靈活、可擴展的全球雲計算、雲GPU、裸機和雲存儲解決方案。了解更多關於Vultr的信息
以上是Docker和Docker的功能深度構成的詳細內容。更多資訊請關注PHP中文網其他相關文章!