使用Docker Compose和Vultr容器注册表构建多容器Flask应用
Docker Compose允许用户使用单个配置文件运行和定义多容器应用程序。它简化了设置和管理多个容器的过程,从而更容易地开发、测试和部署应用程序。本文将指导您创建一个包含两个容器的Flask应用程序,使用Vultr容器注册表(VCR)管理应用程序的Docker镜像,并利用Docker Compose的多容器功能来管理多个容器。
示例应用程序的创建
以下步骤将引导您创建一个示例应用程序:
通过Vultr客户门户使用Docker市场应用程序部署一个Vultr计算实例。
使用SSH以非root sudo用户安全地访问服务器。
更新服务器。
创建一个新的项目目录并进入该目录:
mkdir flask-redis-example cd flask-redis-example
创建一个名为app.py
的新文件:
nano app.py
添加以下代码:
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)
保存并退出文件。这段Flask代码连接到Redis数据库,并在每次访问根URL时递增计数器。
允许传入连接到端口5000并重新加载防火墙:
sudo ufw allow 5000 sudo ufw reload
创建一个名为requirements.txt
的新文件:
nano requirements.txt
添加以下包:
<code>flask redis</code>
保存并关闭文件。
在flask-redis-example
目录内创建另一个目录并进入该目录:
mkdir static cd static
创建一个名为styles.css
的新文件:
nano styles.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; }
保存并退出文件。
在flask-redis-example
目录内创建另一个目录并进入该目录:
mkdir templates cd templates
创建一个名为index.html
的新文件:
nano index.html
添加以下代码:
<!DOCTYPE html> <html> <head> <title>Flask App</title> <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}"> </head> <body> <h1>Hello, World!</h1> <p>I have been seen {{ count }} times.</p> </body> </html>
保存并退出文件。
使用Vultr容器注册表
在本节中,您将创建一个Vultr容器注册表,将您的Docker镜像上传到注册表,并设置一个Docker Compose文件来设置Flask和Redis数据库的服务。
部署一个Vultr容器注册表。
在flask-redis-example
目录中创建一个Docker清单:
nano Dockerfile.flask
添加以下配置:
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"]
保存并退出文件。
构建Docker镜像:
docker build -t flask-app .
登录到您的Vultr容器注册表:
docker login <url> -u <user> -p <password>
请务必替换<url>
、<user>
和<password>
,这些详细信息在您的Vultr容器注册表的概述部分提供。
标记Docker镜像:
mkdir flask-redis-example cd flask-redis-example
将镜像推送到Vultr容器注册表:
nano app.py
推送Docker镜像后,请在Vultr仪表板上的Vultr容器注册表的“存储库”部分验证镜像是否存在。
创建一个名为docker-compose.yaml
的新文件:
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)
保存并退出文件。上述YAML配置定义了两个服务web
和redis
。web
服务从当前目录(.)构建Flask应用程序,并将容器的端口5000映射到主机的端口5000。它还指定web
服务依赖于redis
服务。redis
服务使用来自Docker Hub的官方Redis Docker镜像。
构建Docker Compose文件:
sudo ufw allow 5000 sudo ufw reload
构建过程完成后,访问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中文网其他相关文章!