通过案例学习 Secret - 每天5分钟玩转 Docker 容器技术(110)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过案例学习 Secret - 每天5分钟玩转 Docker 容器技术(110)相关的知识,希望对你有一定的参考价值。

在下面的例子中,我们会部署一个 WordPress 应用,WordPress 是流行的开源博客系统。

我们将创建一个 mysql service,将密码保存到 secret 中。我们还会创建一个 WordPress service,它将使用 secret 连接 MySQL。这个例子将展示如何用 secret 避免在 image 中存放敏感信息,或者在命令行中直接传递敏感数据。

实验步骤如下:

创建 secret

创建 secret 存放 MySQL 的管理员密码。

 

openssl rand -base64 20 | docker secret create mysql_root_password -

 

 

密码是由 openssl 生成的随机字符串。

技术分享图片

注意 ag7injh6juonwl09lq8st36o8 是新创建的 service 的 ID,而非 service 的内容。

上面这种方式是从标准输入读取 secret 的内容,也可以指定从文件中读取,例如:

 

openssl rand -base64 20 > password.txtdocker secret create my_password ./password.txt

 

 

一般情况下,应用不会直接用 root 密码访问 MySQL。我们会创建一个单独的用户 workpress,密码存放到 secret mysql_password中。

 

openssl rand -base64 20 | docker secret create mysql_password -

 

 

技术分享图片

 

创建自定义的 overlay 网络

MySQL 通过 overlay 网络 mysql_private 与 WordPress 通信,不需要将 MySQL service 暴露给外部网络和其他容器。

 

docker network create -d overlay mysql_private

 

 

创建 MySQL service

命令如下:

 

docker service create      --name mysql      --network mysql_private      --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

 

 

MYSQL_DATABASE 指明创建数据库 wordpress

MYSQL_USER  MYSQL_PASSWORD_FILE 指明创建数据库用户 workpress,密码从 secret mysql_password 中读取。

有关 mysql 镜像环境变量更详细的使用方法可参考 https://hub.docker.com/_/mysql/

技术分享图片

 

创建 WordPress service

MySQL service 已就绪,现在创建 WordPress service。命令如下:

 

docker service create      --name wordpress      --network mysql_private      --publish 30000:80      --secret source=mysql_password,target=wp_db_password      -e WORDPRESS_DB_HOST="mysql:3306"      -e WORDPRESS_DB_NAME="wordpress"      -e WORDPRESS_DB_USER="wordpress"      -e WORDPRESS_DB_PASSWORD_FILE="/run/secrets/wp_db_password"      wordpress:latest

 

 

WORDPRESS_DB_HOST 指明 MySQL service 地址 mysql:3306,这里用到了 DNS。

WORDPRESS_DB_NAME 指明 WordPress 的数据库为 wordpress,与前面 MYSQL_DATABASE 一致。

WORDPRESS_DB_USER 指明连接 WordPress 数据库的用户为 wordpress,与前面 MYSQL_USER 一致。

WORDPRESS_DB_PASSWORD_FILE 指明数据库的用户 wordpress 的密码,从 secret mysql_password 中获取。

有关 wordpress 镜像环境变量更详细的使用方法可参考 https://hub.docker.com/_/wordpress/

技术分享图片

 


验证 WordPress

访问 http://[swarm_master_ip]:30000/

技术分享图片

能正常显示初始化界面,表明 WordPress 已经连接到 MySQL,部署成功。

Secret 就讨论到这里,下一节我们学习 Stack。

技术分享图片书籍:

1.《每天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html

2.《每天5分钟玩转OpenStack》
https://item.jd.com/12086376.html

技术分享图片


以上是关于通过案例学习 Secret - 每天5分钟玩转 Docker 容器技术(110)的主要内容,如果未能解决你的问题,请参考以下文章

每天5分钟玩转Kubernetes | 查看Secret

每天5分钟玩转Kubernetes | 创建Secret

每天5分钟玩转Kubernetes | 在Pod中使用Secret

如何使用 Secret?- 每天5分钟玩转 Docker 容器技术(108)

volume 方式使用 Secret - 每天5分钟玩转 Docker 容器技术(157)

环境变量方式使用 Secret - 每天5分钟玩转 Docker 容器技术(158)