这是我们使用阿里云容器服务基于 docker 容器部署 asp.net core 应用遇到的另一个问题 —— 如果将包含敏感信息的应用配置文件 appsettings.Production.json 传递给运行在容器中的 asp.net core 应用。

Docker 针对这样的应用场景已经提供了解决方案 —— Docker Secrets,对应的 docker 命令是 docker secret 。我们就用 docker secrets 解决了这个问题,在这篇随笔中分享一下。

首先在阿里云容器服务中将 appsettings.Production.json 添加到 docker scrects :

进入集群管理的控制台 -> “密钥管理”,点击“创建”按钮添加一个 secret ,将 appsettings.Production.json 中的保存在这里(见下图)。

如果不通过阿里云容器服务控制台,可以直接使用 docker secret 命令添加(前提用 docker 客户端连接到阿里云容器服务中对应的集群):

cat appsettings.Production.json | docker secret create cache-service-appsettings.Production.json -

接着修改编排(compose)文件,启用这个 secret :

secrets:- cache-service-appsettings.Production.json

有了这个编排,容器启动后,就可以在 /run/secrets 目录中看到这个文件,并且可以查看文件中的配置内容:

root@511090335bb5:/# ls /run/secrets
cache-service-appsettings.Production.json    root@511090335bb5:/# cat /run/secrets/cache-service-appsettings.Production.json

为了让容器中的 asp.net core 应用能够读取到这个文件,我们采用的方法是在容器启动时,将其复制到应用程序的根目录中并重命名为 appsettings.Production.json :

command: bash -c "cp /run/secrets/cache-service-appsettings.Production.json /app/appsettings.Production.json && cd /app && dotnet Cnblogs.Cache.WebApi.dll"

添加了 secret ,修改好 compose ,重新部署应用,运行在容器中的 asp.net core 应用就能成功读取到保存在 docker secrets 中的  appsettings.Production.json 的配置。

搞定!

2017年6月22日更新

后来在实际时使用发现,当容器运行时,无法通过 docker secret rm 命令删除 secret :

Error response from daemon: rpc error: code = 3 desc = secret 'cache-appsettings.Production.json' is in use by the following service: xxx

由于 docker secrets 无法直接更新,只能删除后添加,但删除需要停止容器,这对于生产环境是不能接受的。如果不采用先删除后添加的方式,那只能每次更新时换一个secret名称,但这样编排文件也要跟着进行修改,很麻烦。

后来改用阿里云容器服务的NAS数据卷解决了这个问题,参考阿里云帮助文档:

  • 创建 NAS 数据卷
  • 使用第三方数据卷

阿里云容器服务与ASP.NET Core部署:用 docker secrets 保存 appsettings.Production.json相关推荐

  1. Istio 在阿里云容器服务的部署及流量治理实践

    目标 在阿里云容器服务 Kubernetes 集群上部署 Istio 服务网格 实践灰度发布.故障注入.熔断等 Istio 流量管理特性 准备工作 安装和设置 kubectl 客户端,请参考不同的操作 ...

  2. 阿里云容器服务新增支持Kubernetes编排系统,性能重大提升 1

    摘要: 作为容器编排系统的两大流派, Kubernetes和Swarm的重要性不言而喻.融合了两大高性能集成的阿里云容器服务,不仅可以降低50%的基础架构成本,提高交付速度将产品迭代加快13倍,还可以 ...

  3. Docker监控:基于阿里云容器服务构建自己的Docker监控框架

    微服务架构通过将一个复杂系统分解成一系列独立开发.部署和运维的服务,提升了整个系统的敏捷性,可以灵活的响应业务和规模的变化.而Docker技术则将服务的部署和环境完全解耦,利用Docker的可移植性和 ...

  4. 阿里云容器服务体验: 部署 ShellPays 条码支付整合服务平台 -- (四)结案陈词

    上回提要 阿里云容器服务体验: 部署 ShellPays 条码支付整合服务平台 -- (一)系统概要与环境准备 阿里云容器服务体验: 部署 ShellPays 条码支付整合服务平台 -- (二)实操 ...

  5. 一步一步使用阿里云容器服务部署基于.NET的JEXUS网站 (转)

    作者 李泽辉_cef1 关注 2017.04.22 16:18* 字数 2734  一.概念 jexus:一款国产的运行在linux下的基于mono的高性能web服务器.国内有诸多中大型网站使用jex ...

  6. 基于阿里云容器服务的微服务实践 - Part 1. 微服务与Docker

    基于阿里云容器服务的微服务实践 基于阿里云容器服务的微服务实践 - Part 1. 微服务与Docker 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blo ...

  7. 通过阿里云容器服务K8S Ingress Controller实现应用服务的灰度发布

    简介 日常工作中我们经常需要对服务进行版本更新升级,为此我们经常使用到的发布方式有滚动升级.分批暂停发布.蓝绿发布以及灰度发布,今天主要跟大家分享下在阿里云容器服务Kubernetes集群中如何通过I ...

  8. 阿里云容器服务新增支持Kubernetes编排系统,性能重大提升

    摘要: 作为容器编排系统的两大流派, Kubernetes和Swarm的重要性不言而喻.融合了两大高性能集成的阿里云容器服务,不仅可以降低50%的基础架构成本,提高交付速度将产品迭代加快13倍,还可以 ...

  9. 如何使用阿里云容器服务保障容器的内存资源质量

    作者:韩柔刚(申信) 背景 云原生场景中,应用程序通常以容器的形式部署和分配物理资源.以 Kubernetes 集群为例,应用工作负载以 Pod 声明了资源的 Request/Limit,Kubern ...

最新文章

  1. 内容推荐 | 生信技术与前沿内容知识库
  2. 服务器定期巡检项目,服务器定期巡检制度..docx
  3. 框架:AspectJ
  4. 计算所有1-100之间数字之和(偶数之和)代码
  5. 如何读入一个多行的txt文件,给每行的数据加双引号并保存为一行输出
  6. 修改matlab的工作路径(图解版)
  7. 一个Web报表项目的性能分析和优化实践(七):性能监测工具JavaMelody
  8. 解决微信小程序开发中wxss中不能用本地图片
  9. 数据标准在数据治理中的意义
  10. UBUNTU配置samba
  11. UVA 1213 Sum of Different Primes
  12. win7下载原型软件Axure
  13. 杰奇2.3内核淡绿唯美小说网站源码 PC+手机版
  14. Datax-web版安装(含安装包)
  15. mumu安卓模拟器使用教程
  16. Are Graph Augmentations Necessary? Simple Graph Contrastive Learning for Recommendation
  17. 高颜值可视化设计UNIAPP源码生成器
  18. Spring Boot 开发环境热部署(HotSwap)详解
  19. ln lg,log在c语言中的表示-----转载自yam_killer的专栏
  20. WebMatrix的安装

热门文章

  1. Web前端入门学习(5)——浮动原理及清除浮动
  2. PowerDesigner将PDM导出生成WORD文档(转)
  3. 陈皓谈程序员的升级:职业规划就像软件工程
  4. linux 两个驱动 竞态,第7章 Linux设备驱动中的并发控制之一(并发与竞态)
  5. jsch设置代理_尽管在JSch中设置了STRICT_HOST_CHECKING,但仍获取UnknownHostKey异常
  6. Redis操作List类型
  7. Apollo产品对比
  8. MySQL 高级 循环获取游标
  9. SpringAMQP--入门案例的消息接收
  10. 初识MQ--mq常见技术介绍