Docker 首页投稿(暂停使用,暂停投稿)我是程序员

通过案例学习 Secret - 每天5分钟玩转 Docker 容

2017-12-26  本文已影响314人  阿里云云栖号

在下面的例子中,我们会部署一个 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,密码存放到 secretmysql_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,密码从 secretmysql_password中读取。

创建 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的密码,从 secretmysql_password中获取。

验证 WordPress

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

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

上一篇下一篇

猜你喜欢

热点阅读