docker secret管理敏感数据及普通服务配置项--高级篇

版权声明:本文为博主原创,未经本人许可,请勿转载 https://blog.csdn.net/dkfajsldfsdfsd/article/details/79969507

        本文用一个WordPress服务与一个Mysql后端存储搭建一个博客系统,演示如何通过docker secret在WordPress与Mysql实例之间共享用户为Mysql设置的密码以及当Mysql密码改变后WordPress滚动升级。

参考地址:https://docs.docker.com/engine/swarm/secrets/

  • 利用WordPress与Mysql搭建简单的博客系统

1.为Mysql创建secret

        secret创建后其内容是不能更新的,只能删除掉旧的secret然后再重新创建,并且不能删除正在被使用的secret。如果secret需要变更的话,一般是在创建secret时加上版本号,变更的时候先创建一个新版本的secret,然后执行docker service update命令使服务使用新版本的secret,再释放掉旧版本的secret。

        执行如下命令创建两个secret,命令执行后的标准输出并不是secret的内容,而是secret的ID:

openssl rand -base64 20 | docker secret create mysql_password -
openssl rand -base64 20 | docker secret create mysql_root_password -

2.创建用户自定义的网络

        为WordPress与Mysql创建overlay网络专门用于两者之间的通信,创建的网络不需要具备连接外网的能力,连接在这个网络上的服务不会向外部暴露任何端口。执行如下指令:

docker network create -d overlay mysql_private

3.创建Mysql服务

docker service create \
     --name mysql \
     --replicas 1 \
     --network mysql_private \
     --mount type=volume,source=mydata,destination=/var/lib/mysql \
     --secret source=mysql_root_password,target=mysql_root_password \
     --secret source=mysql_password,target=mysql_password \
     -e MYSQL_ROOT_PASSWORD_FILE="/run/secrets/mysql_root_password" \
     -e MYSQL_PASSWORD_FILE="/run/secrets/mysql_password" \
     -e MYSQL_USER="wordpress" \
     -e MYSQL_DATABASE="wordpress" \
     mysql:latest

4.创建wordpress服务

docker service create \
     --name wordpress \
     --replicas 1 \
     --network mysql_private \
     --publish published=30000,target=80 \
     --mount type=volume,source=wpdata,destination=/var/www/html \
     --secret source=mysql_password,target=wp_db_password,mode=0400 \
     -e WORDPRESS_DB_USER="wordpress" \
     -e WORDPRESS_DB_PASSWORD_FILE="/run/secrets/wp_db_password" \
     -e WORDPRESS_DB_HOST="mysql:3306" \
     -e WORDPRESS_DB_NAME="wordpress" \
     wordpress:latest

5.在浏览器中访问192.168.56.103:30000

IP地址可以是集群中任何一个node的IP地址,如下图:


博客系统创建成功。

  • 滚动升级密码

        Mysql将用户名与密码维护在内部的一个表中,修改密码的话有两个条件。第一个是Mysql能同时读到旧的密码与新的密码,旧的密码用于登录,新的密码用于修改。第二个就是Mysql需要执行一条指令来完成修改密码的动作,这个指令是不会自动执行的。需要手动登录到Mysql容器上执行。为wordpress用户修改mysql密码,步骤如下:

1.生成新的secret,名称中加入了版本后v2

openssl rand -base64 20 | docker secret create mysql_password_v2 -

2.更新Mysql服务,使它能同时访问新旧两个版本的密码

docker service update \
     --secret-rm mysql_password mysql
docker service update \
     --secret-add source=mysql_password,target=old_mysql_password \
     --secret-add source=mysql_password_v2,target=mysql_password \
     mysql
此时Mysql服务能同时访问新旧两个版本的密码,这两个版本的密码以内存文件的形式分别挂在/run/secrets/old_mysql_password、/run/secrets/mysql_password两个目录之下.

3.在mydql容器中执行修改密码的指令

docker container exec <CONTAINER_ID> \
    bash -c 'mysqladmin --user=wordpress --password="$(< /run/secrets/old_mysql_password)" password "$(< /run/secrets/mysql_password)"'

4.更新wordpress服务,使新的密码生效

docker service update \
     --secret-rm mysql_password \
     --secret-add source=mysql_password_v2,target=wp_db_password,mode=0400 \
     wordpress

5.从Mysql回收旧密码并从系统中删除

docker service update \
     --secret-rm mysql_password \
     mysql
docker secret rm mysql_password
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页