过去一周左右我一直在尝试学习 docker 以及它可以做的所有事情,但是我正在努力解决的一件事是如何管理机密的最佳实践,尤其是在数据库连接字符串和这些应该如何存储。
我有一个计划,我想要一个 docker 映像,其中将包含一个 ASP.NET Core 网站、MySQL 数据库和一个 PHPMyAdmin 前端,并将其部署到我在 DigitalOcean 拥有的一个 droplet 上。
我一直在玩,我有一个 docker-compose.yml 文件,其中 MySQL DB 和 PhpMyAdmin 正确链接在一起
version: "3"
services:
db:
image: mysql:latest
container_name: mysqlDatabase
environment:
- MYSQL_ROOT_PASSWORD=0001
- MYSQL_DATABASE=atestdb
restart: always
volumes:
- /var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: db-mgr
ports:
- "3001:80"
environment:
- PMA_HOST=db
restart: always
depends_on:
- db
这为我正确地创建了一个 MySQL 数据库,我可以使用 root / 0001 作为用户名/密码组合通过正在运行的 PHPMyAdmin 前端连接到它。
我知道我现在需要将我的 AspNetCore Web 应用程序添加到此,但我仍然对获得数据库密码的最佳方式感到困惑。
我看过 docker swarm/secrets,但我仍然不完全理解它是如何工作的,特别是如果我想将我的 docker-compose 文件检查到 GIT/SCM 中。我读过的其他内容建议使用环境变量,但我似乎仍然不明白这与仅在我的 appsettings.json 文件中检查连接字符串有何不同,或者就此而言,这将如何工作完整的 CI/CD 构建管道。
这个问题帮助我了解了这一点,但他们的 docker-compose 文件中仍然有他们的数据库密码。
可能是我想多想了
任何帮助、指导或建议将不胜感激。