Docker Secrets
一、简介
在微服务架构应用中,众多组件在集群中动态地创建、伸缩、更新。在如此动态和大规模的分布式系统上,管理和分发密码、证书等敏感信息将会是非常具有挑战性的工作。对于容器应用,传统的秘密分发方式,如将秘钥存放在容器镜像中,或是利用环境变量,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的更多相关文章
- 阿里云容器服务与ASP.NET Core部署:用 docker secrets 保存 appsettings.Production.json
这是我们使用阿里云容器服务基于 docker 容器部署 asp.net core 应用遇到的另一个问题 —— 如果将包含敏感信息的应用配置文件 appsettings.Production.json ...
- Docker 1.13 管理命令
1.12 CLI 的问题 Docker1.12 命令行接口(CLI)有40多个顶级命令,这些命令存在以下问题: 没有归类组织,这让docker 新手很难学习: 有些命令没有提供足够的上下文环境,以至于 ...
- 从一到万的运维之路,说一说VM/Docker/Kubernetes/ServiceMesh
摘要:本文从单机真机运营的历史讲起,逐步介绍虚拟化.容器化.Docker.Kubernetes.ServiceMesh的发展历程.并重点介绍了容器化阶段之后,各项重点技术的安装.使用.运维知识.可以说 ...
- Docker的基本操作与示例
一.RunC RunC是一个由OCI(Open Container Initiative)制定的标准化轻量容器运行工具.OCI是专门致力于制定容器格式和运行时开放的工业化标准的组织.那容器标准化后Do ...
- Docker: docker container常用命令实战
容器管理,容器常用选项 选项 描述 -i, –interactive 交互式 -t, –tty 分配一个伪终端 -d, –detach 运行容器到后台 -e, –env 设置环境变量 -p, –pub ...
- Docker: docker image常用命令实战
#docker列出镜像[root@192 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 881bd08c0b08 ...
- 这20个Docker Command,有几个是你会的?
在这之前呢,也写过两篇关于Docker基础入门类的文章 Docker容器技术入门(一) Docker容器技术入门(二) 很多人都感觉这文章这么简单.这么基础,可是别忘记了"万丈高楼平地起&q ...
- Docker记录-Docker部署记录
1.Docker介绍 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...
- docker 系列 - 基础镜像环境和Docker常用命令整理
=======================docker 基础镜像环境 alpine=======================可以使用 docker search 命令搜索指定的 image, ...
随机推荐
- 硬件设计原理图Checklist 参考案例二 【转载】
类别 描述 检视规则 原理图需要进行检视,提交集体检视是需要完成自检,确保没有低级问题. 检视规则 原理图要和公司团队和可以邀请的专家一起进行检视. 检视规则 第一次原理图发出进行集体检视后所有的修改 ...
- Teamproject --人员职责
职责分配: 初步分工如下: PM:林豪森 Dev:宋天舒 张迎春 黄漠源 刘翔宇 叶露婷 旦增晋美 黄敬博 Test:林豪森 宋天舒 张迎春 刘翔宇 经过团队的讨论,认为对于职责的分配,并不存在绝对的 ...
- [BUAA_SE_2017]结对项目-数独程序扩展
结对项目-数独程序扩展 Runnable on x64 Only sudoku17.txt 须放置在可执行文件同目录中,可移步以下链接进行下载 Core-Github项目地址 GUI-Github项目 ...
- 20172321 2017-2018-2《Java程序设计》第三周学习总结
20172321 2017-2018-2<Java程序设计>第三周学习总结 教材学习内容总结 第三章要点: 要点1 :String类.Random类.Math类和枚举型,这几个是很有用的并 ...
- sampleFactory(女娲造人)
使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,如果传入参数R,则返回一个Robot对象. package c ...
- WebService有什么用?
入门之前先简单介绍下WCF.在用WebService做开发时,很多人都不知道WCF和WebService之间的关系.实际上WCF包含了WebService,这是一个很强悍的通信技术应用框架.微软把.N ...
- beat冲刺(4/7)
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(4/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 整理博客 ppt模板 接下来的计划 做好机动. ...
- Backlog和冲刺结果以及产品Demo市场调研
Backlog和第一阶段冲刺结果以及产品Demo 博客停更了一段时间,但是我们团队没有闲着,现在一次性汇报团队工作进度,Backlog和第一阶段冲刺结果以及产品Demo. 在一段时间的分工合作以及调整 ...
- Centos7 Zookeeper 集群安装
1:安装java 环境 -openjdk* 2:zookeeper 安装 (官网 http://www.apache.org/dyn/closer.cgi/zookeeper/) 2.1 目录创建 自 ...
- Internet History, Technology and Security (Week 8)
Week 8 Security: Encrypting and Signing This week we start two weeks of Internet Security. It is a l ...