docker查看管理配置信息(Docker Secret的管理和使用详解)
docker查看管理配置信息
Docker Secret的管理和使用详解一、什么是Docker Secret(一)情景展现
我们知道有的service是需要设置密码的,比如mysql服务是需要设置密码的:
version: '3' services: web: image: wordpress ports: - 8080:80 volumes: - ./www:/var/www/html environment: WORDPRESS_DB_NAME=wordpress WORDPRESS_DB_HOST: mysql WORDPRESS_DB_PASSWORD: root networks: - my-network depends_on: - mysql deploy: mode: replicated replicas: 3 restart_policy: condition: on-failure delay: 5s max_attempts: 3 update_config: parallelism: 1 delay: 10s mysql: image: mysql environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: wordpress volumes: - mysql-data:/var/lib/mysql networks: - my-network deploy: mode: global placement: constraints: - node.role == manager volumes: mysql-data: networks: my-network: driver: overlay
可以看到在这个docker-compose.yml中的两个service密码都是明文,这样就导致了不是很安全,那么究竟什么是Docker secret以及能否解决上面的问题呢?
(二)Docker Secret
我们知道manager节点保持状态的一致是通过Raft Database这个分布式存储的数据库,它本身就是将信息进行了secret,所以可以利用这个数据库将一些敏感信息,例如账号、密码等信息保存在这里,然后通过给service授权的方式允许它进行访问,这样达到避免密码明文显示的效果。
总之,secret的Swarm中secret的管理通过以下步骤完成:
- secret存在于Swarm Manager节点的的Raft Database里
- secret可以assign给一个service,然后这个service就可以看到这个secret
- 在container内部secret看起来像文件,实际上就是内存
(一)创建
我们先看看创建的一些帮助说明:
[root@centos-7 ~]# docker secret --help Usage: docker secret COMMAND Manage Docker secrets 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 Run 'docker secret COMMAND --help' for more information on a command.
第一个命令就是创建的命令,我们再来看看它有什么帮助信息:
[root@centos-7 ~]# docker secret create --help Usage: docker secret create [OPTIONS] SECRET [file|-] Create a secret from a file or STDIN as content Options: -d, --driver string Secret driver -l, --label list Secret labels --template-driver string Template driver
可以看到说明secret可以来自于一个文件或者一个标准输出。那么也就是Secret的创建有两种方式,分别是:
- 基于文件的创建
- 基于命令行创建
1、基于文件创建
首先先创建一个文件用于存放密码
[root@centos-7 ~]# vim mysql-password root
然后再进行创建secret
[root@centos-7 ~]# docker secret create mysql-pass mysql-password texcct9ojqcz6n40woe97dd7k
其中,mysql-pass是secret的名称,mysql-password是我们建立存储密码的文件,这样执行后就相当于将文件中的密码存储在Swarm中manager节点的Raft Database中了。为了安全起见,现在可以直接将这个文件删掉,因为Swarm中已经有这个密码了。
[root@centos-7 ~]# rm -f mysql-password
现在可以查看一下secret列表:
[root@centos-7 ~]# docker secret ls ID NAME DRIVER CREATED UPDATED texcct9ojqcz6n40woe97dd7k mysql-pass 4 minutes ago 4 minutes ago
已经存在了。
2、基于命令行创建
[root@centos-7 ~]# echo "root" | docker secret create mysql-pass2 - hrtmn5yr3r3k66o39ba91r2e4 [root@centos-7 ~]# docker secret ls ID NAME DRIVER CREATED UPDATED texcct9ojqcz6n40woe97dd7k mysql-pass 6 minutes ago 6 minutes ago hrtmn5yr3r3k66o39ba91r2e4 mysql-pass2 5 seconds ago 5 seconds ago
这种方式还是很简单的就创建成功了
(二)其它操作
那么secret还有什么其它操作吗?
[root@centos-7 ~]# docker secret --help Usage: docker secret COMMAND Manage Docker secrets 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 Run 'docker secret COMMAND --help' for more information on a command.
可以看到除了create命令外,还有inspect、ls、以及rm命令。
1、inspect
[root@centos-7 ~]# docker secret inspect mysql-pass2 [ { "ID": "hrtmn5yr3r3k66o39ba91r2e4", "Version": { "Index": 4061 }, "CreatedAt": "2020-02-07T08:39:25.630341396Z", "UpdatedAt": "2020-02-07T08:39:25.630341396Z", "Spec": { "Name": "mysql-pass2", "Labels": {} } } ]
展示secret的一些详情信息
2、rm
[root@centos-7 ~]# docker secret rm mysql-pass2 mysql-pass2 [root@centos-7 ~]# docker secret ls ID NAME DRIVER CREATED UPDATED texcct9ojqcz6n40woe97dd7k mysql-pass 12 minutes ago 12 minutes ago
删除一个secret
(三)Secret在单容器中的使用
1、容器中查看secret
我们创建了一个secret,如何在启动一个服务后,将其授权给特定的服务然后它才可以看到呢?先看看创建服务的命令中是否有类似的命令或者参数:
[root@centos-7 ~]# docker service create --help Usage: docker service create [OPTIONS] IMAGE [COMMAND] [ARG...] Create a new service Options: --config config Specify configurations to expose to the service ... --secret secret Specify secrets to expose to the service ... ...
确实是有这样的命令,在创建服务时可以给服务暴露出secret。
2、创建服务
[root@centos-7 ~]# docker service create --name demo --secret mysql-pass busybox sh -c "while true; do sleep 3600; done" zwgk5w0rpf17hn77axz6cn8di overall progress: 1 out of 1 tasks 1/1: running verify: Service converged
查看这个服务运行在那个节点上:
[root@centos-7 ~]# docker service ls ID NAME MODE REPLICAS IMAGE PORTS zwgk5w0rpf17 demo replicated 1/1 busybox:latest [root@centos-7 ~]# docker service ps demo ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS yvr9lwvg8oca demo.1 busybox:latest localhost.localdomain Running Running 51 seconds ago
可以看到这个服务运行在localhost.localdomain主机的节点上,我们去这个节点上进入到容器内部,看是否能查看secret:
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 36573adf21f6 busybox:latest "sh -c 'while true; …"4 minutes ago Up 4 minutes demo.1.yvr9lwvg8ocatym20hdfublhd [root@localhost ~]# docker exec -it 36573adf21f6 /bin/sh / # ls bin dev etc home proc root run sys tmp usr var / # cd /run/secrets /run/secrets # ls mysql-pass /run/secrets # cat mysql-pass root /run/secrets #
可以看到确实是可行的。
2、mysql服务
关于mysql镜像,详情查看https://hub.docker.com/_/mysql其中有关于secret的描述:
作为通过环境变量传递敏感信息的替代方法,_FILE可以将其附加到先前列出的环境变量中,从而使初始化脚本从容器中存在的文件中加载那些变量的值。特别是,这可用于从/run/secrets/<secret_name>文件中存储的Docker Secret加载密码。例如:
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d mysql:tag
目前,这仅支持MYSQL_ROOT_PASSWORD,MYSQL_ROOT_HOST,MYSQL_DATABASE,MYSQL_USER,和MYSQL_PASSWORD。
所以我们需要先创建一个文件secret用于存储数据库的敏感信息,因为之前已经创建过,这里无需再创建:
[root@centos-7 ~]# docker secret ls ID NAME DRIVER CREATED UPDATED texcct9ojqcz6n40woe97dd7k mysql-pass 4 hours ago 4 hours ago
启动mysql服务:
[root@centos-7 ~]# docker service create --name db --secret mysql-pass -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-pass mysql sbpagzqvpwt8ifymavf8o5xmi overall progress: 1 out of 1 tasks 1/1: running verify: Service converged
查看mysql服务在那个节点上:
[root@centos-7 ~]# docker service ls ID NAME MODE REPLICAS IMAGE PORTS sbpagzqvpwt8 db replicated 0/1 mysql:latest [root@centos-7 ~]# docker service ps db ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS qlmfm6u7lg8u db.1 mysql:latest localhost.localdomain Running Starting 2 seconds ago
在worker节点中进入该服务的容器中查看secret:
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2ac2a810e931 mysql:latest "docker-entrypoint.s…" 3 minutes ago Up 2 minutes 3306/tcp, 33060/tcp db.1.qlmfm6u7lg8u8i1v2m2c3ls3r [root@localhost ~]# docker exec -it 2ac2a810e931 /bin/sh # cd /run/secrets/ # ls mysql-pass # cat mysql-pass root
这样知道了密码就可以进入到mysql数据库中了。
# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 8.0.19 MySQL Community Server - GPL Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
(四)Secret在Stack中的使用
Stack利用的就是docker-compose.yml文件来部署stack,那么如何在docker-compose.yml中来定义secret呢?
version: '3' services: web: image: wordpress ports: - 8080:80 secrets: - my-pw environment: WORDPRESS_DB_HOST: mysql WORDPRESS_DB_PASSWORD_FILE: /run/secrets/wordpress-pass networks: - my-network depends_on: - mysql deploy: mode: replicated replicas: 3 restart_policy: condition: on-failure delay: 5s max_attempts: 3 update_config: parallelism: 1 delay: 10s mysql: image: mysql secrets: - my-pw environment: MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql-pass MYSQL_DATABASE: wordpress volumes: - mysql-data:/var/lib/mysql networks: - my-network deploy: mode: global placement: constraints: - node.role == manager volumes: mysql-data: networks: my-network: driver: overlay
上面通过在environment中定义WORDPRESS_DB_PASSWORD_FILE以及MYSQL_ROOT_PASSWORD_FILE来制定secret,显然我们在运行这个docker-compose.yml文件之前必须先要进行对应的secret文件的创建。然后就可以通过docker stack deploy命令来部署这个stack了。
到此这篇关于Docker Secret的管理和使用详解的文章就介绍到这了,更多相关Docker Secret内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- docker启动sqlserver(用docker运行postgreSQL的方法步骤)
- docker容器卡死(Docker容器不识别宋体等字体的解决方案)
- docker容器重启配置没了(docker修改未启动容器的配置信息操作)
- docker redis安装配置(在docker中部署并启动redis的方法)
- docker如何解绑容器(如何进入、退出docker的container实现)
- docker数据卷是什么(Docker数据卷容器创建及使用方法解析)
- docker安装教程图解(Docker在线、离线安装及其常用命令操作)
- rocketmq安装linux(docker安装rocketMQ教程最详细)
- 将docker中的镜像打包教程(本地使用docker打包部署镜像的方法)
- 关于docker安全之Docker-TLS加密通讯问题(关于docker安全之Docker-TLS加密通讯问题)
- docker容器编排入门教程(laradock环境docker-compose操作详解)
- 如何查看本机docker的安装目录(使用rpm安装指定版本docker1.12.6的详细步骤)
- harbor镜像仓库扫描原理(Harbor搭建Docker私有仓库的实现方法)
- docker如何加volume(Dockerfile 中 VOLUME 与 docker -v 的区别说明)
- docker线上部署流程(Docker部署Rancher的方法无坑)
- dockernginx怎么设置容器(docker nginx + https 子域名配置详细教程)
- 靳东领衔打造高精职场 新丽出品《精英律师》曝定妆照(靳东领衔打造高精职场)
- 靳东新剧《精英律师》定档,众星云集,这剧可追(靳东新剧精英律师定档)
- 精英律师 廖佳敏封印恋情曝光,顾婕马失前蹄 你个老不死的(廖佳敏封印恋情曝光)
- 以家人之名广受好评,剧情生动引起观众共鸣,演员张新成圈粉无数(以家人之名广受好评)
- 三兄妹感情再遇波折,人设接连崩塌 《以家人之名》剧情猜不透(三兄妹感情再遇波折)
- 《小敏家》金波想要复婚 这只是他圈套的第1步,更可恶的在后面(小敏家金波想要复婚)
热门推荐
- python支持面向对象的程序设计(Python面向对象程序设计之类的定义与继承简单示例)
- group by是底层如何实现分组的(group by 按某一时间段分组统计并查询推荐)
- springboot怎么用docker(使用docker部署spring boot并接入skywalking的方法)
- 面试如何回答 5年内职业规划是什么?
- WebStorm前端开发工具
- 织梦dedecms专题页制作详细教程(织梦Dedecms系统SEO优化之网站URL目录优化)
- react常用组件及作用(React中的Context应用场景分析)
- php自定义函数返回多少个值(PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法)
- pythonhtml文件转换成pdf库(Python3转换html到pdf的不同解决方案)
- canvas绘制二进制图片(Canvas获取视频第一帧缩略图的实现)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9