查看官网介绍,Secret是daemon API 1.25之后引入的,它运行在swarm上的命令。
生产环境下,为了安全,我们不能把各项目的配置密码写入到配置文件。
我们可以引入docker的secret方式保护密码。
场景:
1、创建一个密码secret
2、用完就删
3、哪个服务想要使用只要暴露给他即可。
使用
echo "123456" |docker secret ceate xxx - # 传递参数 [root@node111 ~]# docker service create --name mysql --secret mysql_pwd -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql_pwd -p 3306:3306 mysql:5.7 # 写到yaml配置中 version: "3" services: mysql: image: mysql:5.7 ports: - 3306:3306 secrets: - mysql_pwd enviroment: - MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql_pwd # 探究 [root@node111 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 11b0a5f6eb2c mysql:5.7 "docker-entrypoint.s…" 24 seconds ago Up 23 seconds 3306/tcp, 33060/tcp mysql.1.xfll5c4mxp9d7h5uyz2u052pe [root@node111 ~]# docker exec -it 11b0 /bin/bash root@11b0a5f6eb2c:/# cd /run/secrets/ root@11b0a5f6eb2c:/run/secrets# ls mysql_pwd root@11b0a5f6eb2c:/run/secrets# cat mysql_pwd 123456root@11b0a5f6eb2c:/run/secrets# exit exit
原理:我们使用–secret mysql_pwd以后,secret密码文件就会被解码保存到容器内部的/run/secrets/secret名中。这样我们就可以在容器中任意使用。但是外部无感知。
不管怎么使用,secret最好提前创建好。到时候声明使用就行。其实是在内存中的。整个集群manager是利用raft同步的
1、如何声明
docker config create [OPTIONS] CONFIG file|- # 使用文件方式创建 docker config create redis.conf redis.conf docker config ls docker service create --config redis.conf --name redis redis #config内容base64编码,是可以inspect出来的。 docker config inspect redis.conf 在线解码工具:https://c.runoob.com/front-end/693/ #secret文件是在容器中 /run/secrets/xxxx 暴露的 #config默认是在根目录暴露的。 docker ps docker exec -it 容器id /bin/bash
2、如何使用
#指定位置 docker service create --name redis \ --config source=redis-conf,target=/etc/redis/redis.conf,mode=0400 redis:3.0.6 #2、compose文件 version: "3" services: mysql: image: redis ports: - 6379:6379 config: - redis_conf enviroment: - MYSQL_ROOT_PASSWORD_FILE: /