Docker Secret
在我们启动docker或者service需要指定密码,这种密码我们有时不想被别人知道,所以可以采用docker secret方式管理。
创建secret可以有两种方式,一种通过文件创建,一种通过命令行创建
我们在本地创建一个文件passwd
1 | zack1024 |
接下我们可以通过如下命令创建secret
1 | docker secret create my-pw passwd |
运行后可以看到屏幕输出如下
1 | qq463dkw4da9s05rwinntmo09 |
这是一段加密后的数字,接下来我们查看下所有secret
1 | docker secret list |
可以看到secret列表
1 | ID NAME DRIVER CREATED UPDATED |
为了保护隐私,我们可以将passwd这个文件删除。
当然也可以通过命令行方式传入,从而创建secret
1 | echo "zack1024" | docker secret create mysql-root-pw - |
接下来我们利用secret创建一些service
1 | docker service create --name se-busybox --secret my-pw busybox sh -c "while true; do sleep 3600; done" |
接下来我们查看下跑起来的service 列表
1 | docker service list |
可以看到服务列表,docker service ps se-busy的box 查看具体服务,可以看到这个服务运行的节点书和状态
1 | ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS |
接下来我们在VM-0-9-ubuntu这台机器上执行docker ps 找到se-busybox服务运行的容器
1 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
我们进入这个容器,docker exec -it 23d0dce1b7cf sh
在容器里,接下来我们进入这个目录 cd /run/secrets/
1 | /run/secrets # ls |
通过cat my-pw可以看到我们最初设定的密码。
接下来我们利用secret构建mysql服务
1 | docker service create --name se-db --secret my-pw -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/my-pw mysql |
启动mysql后进入容器内部也可以看到/run/secrets/目录下有my-pw文件,其内部记录的就是我们设置的密码。
我们在容器内部执行
1 | mysql -u root -p |
录入之前设置的密码, 可以看到连接成功。
通过docker-compose使用secrete
可以通过secrets字段指定要使用的密钥,这个密钥必须提前通过docker secret create创建
也可以通过secrets字段单独指定密钥名称,在其子域下指定file关键字,就是密码保存的文件
1 | version: '3.6' |
然后我们通过docker stack 启动服务
1 | docker stack deploy wordpress -c=docker-compose.yml |