一、简介

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

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

二、基本功能和应用

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

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

  1. # docker secret --help
  2.  
  3. Usage: docker secret COMMAND
  4.  
  5. Manage Docker secrets
  6.  
  7. Options:
  8.  
  9. Commands:
  10. create Create a secret from a file or STDIN as content
  11. inspect Display detailed information on one or more secrets
  12. ls List secrets
  13. rm Remove one or more secrets

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

  (1)创建两个secrets

  1. # echo "Password4DB" | docker secret create db_password -
  2. anyyxxynb6r9ra9698f38c86x
  3.  
  4. # echo "Password4Root" | docker secret create root_password -
  5. 8ipun85hi89ibsg5ftp3l3uda

  

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

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

  1. # docker service create \
  2. --name my-db \
  3. --publish 3306:3306 \
  4. --secret db_password \
  5. --secret root_password \
  6. -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/root_password \
  7. -e MYSQL_USER=dbtest \
  8. -e MYSQL_DATABASE=dbtest \
  9. -e MYSQL_PASSWORD_FILE=/run/secrets/db_password \
  10. mysql  

  (3)检查服务状态   

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

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

  1. # docker exec -it 56d5845c6741 ls /run/secrets/
  2. db_password root_password
  3.  
  4. # docker exec -it 56d5845c6741 cat /run/secrets/db_password
  5. Password4DB
  6.  
  7. # docker exec -it 56d5845c6741 cat /run/secrets/root_password
  8. Password4Root

  (5)登入验证 

  1. # mysql -h host_ip -uroot -p
  2. Enter password:
  3. Welcome to the MariaDB monitor. Commands end with ; or \g.
  4. Your MySQL connection id is 2
  5. Server version: 5.7.21 MySQL Community Server (GPL)
  6.  
  7. Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
  8.  
  9. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  10.  
  11. MySQL [(none)]> show databases;
  12. +--------------------+
  13. | Database |
  14. +--------------------+
  15. | information_schema |
  16. | dbtest |
  17. | mysql |
  18. | performance_schema |
  19. | sys |
  20. +--------------------+
  21. 5 rows in set (0.00 sec)

三、容器编排中使用 docker secret

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

  (1)secret_stack.yml 

  1. version: "3.3"
  2. services:
  3. wordpress:
  4. image: wordpress:latest
  5. secrets:
  6. - wp_db_password
  7. ports:
  8. - "8080:80"
  9. environment:
  10. - WORDPRESS_DB_USER=wordpress
  11. - WORDPRESS_DB_NAME=wordpress
  12. - WORDPRESS_DB_PASSWORD_FILE=/run/secrets/wp_db_password
  13. - WORDPRESS_DB_HOST=mysql
  14. deploy:
  15. replicas: 3
  16. update_config:
  17. parallelism: 2
  18. delay: 10s
  19. restart_policy:
  20. condition: on-failure
  21.  
  22. mysql:
  23. image: mysql:latest
  24. secrets:
  25. - wp_db_password
  26. - root_db_password
  27. environment:
  28. - MYSQL_USER=wordpress
  29. - MYSQL_DATABASE=wordpress
  30. - MYSQL_PASSWORD_FILE=/run/secrets/wp_db_password
  31. - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/root_db_password
  32. deploy:
  33. replicas: 1
  34. restart_policy:
  35. condition: on-failure
  36. secrets:
  37. wp_db_password:
  38. external: true
  39. root_db_password:
  40. external: true

  (2)生成密码

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

  (3)部署服务

  1. # docker stack deploy -c secret_stack.yml wordpress

  (4)查看部署情况  

  1. [root@manager ~]# docker service ls
  2. ID NAME MODE REPLICAS IMAGE PORTS
  3. xa450wyt625o wordpress_mysql replicated 1/1 mysql:latest
  4. 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. IntelliJ 10.0.1设置系统的JDK

    IntelliJ 10.0.1设置JDK: File-->Project Structure: project SDK--New a jsdk.

  2. 网页调起App之应用实践

    声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场.举报 新春佳节即将到来,北京的上地&西二旗.望京&国贸.五道口&中关村地区等程序员 ...

  3. TFS任务预览

    不太熟悉TFS任务项的建立. 初步建立及按老师要求分配到个人的任务设置与时间安排如下: (长时间任务可由多人合作完成,具体根据情况迅速调整任务分配) 加上每人需要进行阅读前一小组的代码需要时间2*8= ...

  4. pairwork(黄敬博12061156和黄伟龙12061172)

    结对编程: 结对编程的优缺点: 优点: 1.相互督促,共同为了完成目标而努力: 2.节省时间,通过将疑难问题分开解决,共同讨论,实现了更高效的时间利用率: 3.能力互补,提高代码的质量,同时也提高了测 ...

  5. Daily Scrum2 11.4

    昨天的任务大家都已经完成,daily scrum记录的是当日已经完成的任务. 今日任务列表: 杨伊:完成团队作业之软件测评的功能部分 徐钧鸿:CodingCook的model和helper部分 张艺: ...

  6. 第二阶段Sprint1

    昨天:进行第二阶段第一次站立会议,讨论冲刺阶段,目标,任务认领 今天:实现视频录制,共享平台的视频下载和上传 遇到的问题:调手机摄像头没问题,共享平台怎么办

  7. dsdsd

    #include<iostream> using namespace std; #include<string.h> #define max 205 char map[max] ...

  8. Hibernate 延迟加载 分析

    出处:http://www.ibm.com/developerworks/cn/java/j-lo-hibernatelazy/#icomments Hibernate 的延迟加载(lazy load ...

  9. Maya学习笔记

    软件: Maya 2016 : 参考教材: Maya 2016 中文版标准教程 ; 改变视图颜色 [窗口]|[设置/首项选择]|[颜色设置]|[3D视图]: 观察视图 旋转视图 Alt + 鼠标左键 ...

  10. C++ 游戏之点点水果

    大二时利用C++编写的点水果小游戏 程序代码总共3个文件,main.cpp Fruit.h Fruit.cpp  代码将在图片下面给出 至于讲解,由于过了一年多的时间,有点忘记了,但我会努力回忆并即时 ...