【发布时间】:2020-04-23 10:01:01
【问题描述】:
我有一个由四个容器组成的本地 Docker 设置:一个烧瓶网络应用程序、MySQL、Redis 和一个 RQ 工作器。
设置与 Miguel Grinberg 的 Flask Mega-Tutorial 基本相同。这是他的tutorial 和code 的链接。
就我而言,唯一的不同是我已经将他在 rq-worker 上运行的导出博客文章功能替换为另一个计算密集型且运行时间长(30 分钟)的功能。
对我来说,将此应用程序部署到生产环境的最佳方式是什么?
我只希望一次只有一两个人访问它,并且他们每周只访问一次或两次。
我一直在研究 Kubernetes 示例,但在将它们转换为我的设置以及弄清楚如何部署到 GCP 时遇到了困难。我对其他部署选项持开放态度。
以下是教程中的 docker run 命令:
docker run --name redis -d -p 6379:6379 redis:3-alpine
docker run --name mysql -d -e MYSQL_RANDOM_ROOT_PASSWORD=yes \
-e MYSQL_DATABASE=flaskapp -e MYSQL_USER=flaskapp \
-e MYSQL_PASSWORD=mysqlpassword \
mysql/mysql-server:5.7
docker run --name rq-worker -d --rm -e SECRET_KEY=my-secret-key \
-e MAIL_SERVER=smtp.googlemail.com -e MAIL_PORT=587 -e MAIL_USE_TLS=true \
-e MAIL_USERNAME=example@gmail.com -e MAIL_PASSWORD=mysqlpassword \
--link mysql:dbserver --link redis:redis-server \
-e DATABASE_URL=mysql+pymysql://flaskapp:mypassword@dbserver/flaskapp \
-e REDIS_URL=redis://redis-server:6379/0 \
--entrypoint venv/bin/rq \
flaskapp:latest worker -u redis://redis-server:6379/0 dyson-tasks
docker run --name flaskapp -d -p 8000:5000 --rm -e SECRET_KEY=my_secret_key \
-e MAIL_SERVER=smtp.googlemail.com -e MAIL_PORT=587 -e MAIL_USE_TLS=true \
-e MAIL_USERNAME=example@gmail.com -e MAIL_PASSWORD=mypassword \
--link mysql:dbserver --link redis:redis-server \
-e DATABASE_URL=mysql+pymysql://flaskapp:mysqlpassword@dbserver/flaskapp \
-e REDIS_URL=redis://redis-server:6379/0 \
flaskapp:latest
【问题讨论】:
-
您需要将这些
docker run命令转换为 Kubernetes YAML 文件。不会完全转移的一件事是那些--link选项,但无论如何你可能不应该在现代 Docker 中使用该选项。翻译的某个特定部分是否有问题? -
我是 Kubernetes 和 Docker 的新手,所以总的来说我不确定我的下一步是什么。考虑到我的用例,我假设 Kubernetes 是一个不错的选择,但我对其他解决方案持开放态度。就 Kubernetes 的发展而言,下一步是将 docker run 命令转换为 YAML 文件是很有帮助的。我知道 --link 选项对于确保容器可以相互通信很重要。我不确定如何使用 Kubernetes 来实现这一目标。
标签: docker flask kubernetes google-cloud-platform production-environment