一、简介

  在微服务架构应用中,众多组件在集群中动态地创建、伸缩、更新。在如此动态和大规模的分布式系统上,管理和分发密码、证书等敏感信息将会是非常具有挑战性的工作。对于容器应用,传统的秘密分发方式,如将秘钥存放在容器镜像中,或是利用环境变量,volume动态挂载方式动态传入都存在着潜在的安全风险。

  为了应对这个问题,在Docker 1.13及更高版本中,Docker推出了Secrets管理,可以在Swarm mode集群中安全地管理密码、密钥证书等敏感信息,并允许在多个Docker容器实例之间共享访问指定的秘密信息。

二、基本功能和应用

  注: docker secret 只能从Docker Swarm模式的manager节点调用,如果你在本机进行试验,请先执行 docker swarm init 命令

  Docker命令行工具提供了docker secret命令来管理敏感信息  

# docker secret --help

Usage:	docker secret COMMAND

Manage Docker secrets

Options:

Commands:
create Create a secret from a file or STDIN as content
inspect Display detailed information on one or more secrets
ls List secrets
rm Remove one or more secrets

  其中 docker secret create 支持从标准输入读取信息,并且存入指定的secret

  (1)创建两个secrets

# echo "Password4DB" | docker secret create db_password -
anyyxxynb6r9ra9698f38c86x # echo "Password4Root" | docker secret create root_password -
8ipun85hi89ibsg5ftp3l3uda

  

# docker secret ls
ID NAME DRIVER CREATED UPDATED
anyyxxynb6r9ra9698f38c86x db_password 3 minutes ago 3 minutes ago
8ipun85hi89ibsg5ftp3l3uda root_password 3 minutes ago 3 minutes ago

  (2)创建一个db服务,并引用secret作为数据库和root密码   

# docker service create \
--name my-db \
--publish 3306:3306 \
--secret db_password \
--secret root_password \
-e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/root_password \
-e MYSQL_USER=dbtest \
-e MYSQL_DATABASE=dbtest \
-e MYSQL_PASSWORD_FILE=/run/secrets/db_password \
mysql  

  (3)检查服务状态   

# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
b9rvq5wwln5p my-db replicated 1/1 mysql:latest *:3306->3306/tcp # docker service ps my-db
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
7hezr6rtkp0k my-db.1 mysql:latest node-03 Running Running 4 minutes ago

  (4)查看挂在到容器中的密码文件

# docker exec -it 56d5845c6741 ls /run/secrets/
db_password root_password # docker exec -it 56d5845c6741 cat /run/secrets/db_password
Password4DB # docker exec -it 56d5845c6741 cat /run/secrets/root_password
Password4Root

  (5)登入验证 

# mysql -h host_ip -uroot  -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.21 MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| dbtest |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)

三、容器编排中使用 docker secret

  从 Docker Compose V3.1开始,支持在容器编排文件中使用 secret,这可以方便地在不同容器中分享所需的敏感信息。下面将使用 Compose 模板来构建一个Wordpress应用,通过 secret 实现 “wordpress”服务容器和“db”服务容器中共享数据库密码。

  (1)secret_stack.yml 

version: "3.3"
services:
wordpress:
image: wordpress:latest
secrets:
- wp_db_password
ports:
- "8080:80"
environment:
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_NAME=wordpress
- WORDPRESS_DB_PASSWORD_FILE=/run/secrets/wp_db_password
- WORDPRESS_DB_HOST=mysql
deploy:
replicas: 3
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure mysql:
image: mysql:latest
secrets:
- wp_db_password
- root_db_password
environment:
- MYSQL_USER=wordpress
- MYSQL_DATABASE=wordpress
- MYSQL_PASSWORD_FILE=/run/secrets/wp_db_password
- MYSQL_ROOT_PASSWORD_FILE=/run/secrets/root_db_password
deploy:
replicas: 1
restart_policy:
condition: on-failure
secrets:
wp_db_password:
external: true
root_db_password:
external: true

  (2)生成密码

[root@manager stack_compose]# echo "Password4DB" | docker secret create wp_db_password -
xtkut0zoe7u774aymwremncpj
[root@manager stack_compose]# echo "Password4Root" | docker secret create root_db_password -
nx22on48v96qdph2k3s7hs6mv

  (3)部署服务

# docker stack deploy -c secret_stack.yml wordpress

  (4)查看部署情况  

[root@manager ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
xa450wyt625o wordpress_mysql replicated 1/1 mysql:latest
otpkb5li30vx wordpress_wordpress replicated 3/3 wordpress:latest *:8080->80/tcp  

  (5)配置WordPress

  访问host_ip:8080

  

  

  

Docker Secrets的更多相关文章

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

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

  2. Docker 1.13 管理命令

    1.12 CLI 的问题 Docker1.12 命令行接口(CLI)有40多个顶级命令,这些命令存在以下问题: 没有归类组织,这让docker 新手很难学习: 有些命令没有提供足够的上下文环境,以至于 ...

  3. 从一到万的运维之路,说一说VM/Docker/Kubernetes/ServiceMesh

    摘要:本文从单机真机运营的历史讲起,逐步介绍虚拟化.容器化.Docker.Kubernetes.ServiceMesh的发展历程.并重点介绍了容器化阶段之后,各项重点技术的安装.使用.运维知识.可以说 ...

  4. Docker的基本操作与示例

    一.RunC RunC是一个由OCI(Open Container Initiative)制定的标准化轻量容器运行工具.OCI是专门致力于制定容器格式和运行时开放的工业化标准的组织.那容器标准化后Do ...

  5. Docker: docker container常用命令实战

    容器管理,容器常用选项 选项 描述 -i, –interactive 交互式 -t, –tty 分配一个伪终端 -d, –detach 运行容器到后台 -e, –env 设置环境变量 -p, –pub ...

  6. Docker: docker image常用命令实战

    #docker列出镜像[root@192 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 881bd08c0b08 ...

  7. 这20个Docker Command,有几个是你会的?

    在这之前呢,也写过两篇关于Docker基础入门类的文章 Docker容器技术入门(一) Docker容器技术入门(二) 很多人都感觉这文章这么简单.这么基础,可是别忘记了"万丈高楼平地起&q ...

  8. Docker记录-Docker部署记录

    1.Docker介绍 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...

  9. docker 系列 - 基础镜像环境和Docker常用命令整理

    =======================docker 基础镜像环境 alpine=======================可以使用 docker search 命令搜索指定的 image, ...

随机推荐

  1. 利用Cocoapods创建基于SVN的私有库podspec

    由于项目年后要进行组件化,考虑到公司内部实现的一些私有组件,不对外公开,而又想在不同项目中使用,该怎么办呢?由于cocoapods有了强大的功能,可以自己创建podspec,更可以设置私有的库.那么利 ...

  2. PSP Daily软件beta版本——基于NABCD评论,及改进建议

    1.根据(不限于)NABCD评论作品的选题: 此软件的用户人群较为明确,即:用户(软件工程课上学生)记录例行报告.写每周PSP表格和统计的需求.潜在用户还有未来该课堂的学生和需要用PSP方法记录任务完 ...

  3. Scrum Meeting 11.09

    成员 今日任务 明日计划 用时 徐越 解决bug:可以重复点赞:answer被选为best answer后点赞数归零:首页不能正确显示问题的回复数.修改搜索功能的代码  继续测试相关app功能,如果达 ...

  4. 团队冲刺——Three

    第三天计划: 季方:学习爬虫的操作,以便后续功能实现: 司宇航:对当天实现的功能进行总的测试: 王金萱:数据库内数据的增删改查以及查看团队博客界面的实现: 马佳慧:学习css初步,进行页面绘制: 第二 ...

  5. cron延时

    2)Cron表达式范例: 每隔5秒执行一次:*/5 * * * * ? 每隔1分钟执行一次:0 */1 * * * ? 每天23点执行一次:0 0 23 * * ? 每天凌晨1点执行一次:0 0 1 ...

  6. ASP.NET MVC5 学习系列之初探MVC

    一.由问题看本质 (一)什么是MVC? MVC是Model-View-Controller的简称.它是在1970年引入的软件设计模式.MVC 模式强迫关注分离 — 域模型和控制器逻辑与UI是松耦合关系 ...

  7. HDU 4568 Hunter 最短路+TSP

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4568 Hunter Time Limit: 2000/1000 MS (Java/Others)Me ...

  8. 转 webpack 插件 svg-sprite-loader

    最近开始看 Vue 了,首先用官方的模版把项目快速搭建起来: Vue.js 提供一个官方命令行工具,可用于快速搭建大型单页应用.该工具提供开箱即用的构建工具配置,带来现代化的前端开发流程.只需几分钟即 ...

  9. 个人作业-week2(代码复审)

    一.代码复审check list 概要部分 代码符合需求和规格说明吗? 符合要求和规格说明,-s指令和-c指令都能实现需求.并且能够处理非法输入. 代码设计是否有周全的考虑? 程序的main函数中对各 ...

  10. 10条SQL优化语句,让你的MySQL数据库跑得更快!

    慢SQL消耗了70%~90%的数据库CPU资源: SQL语句独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低: SQL语句可以有不同的写法: 1 不使用子 ...