在下面的例子中,咱们会部署一个 WordPress 应用,WordPress 是流行的开源博客系统。html
咱们将建立一个 MySQL service,将密码保存到 secret 中。咱们还会建立一个 WordPress service,它将使用 secret 链接 MySQL。这个例子将展现如何用 secret 避免在 image 中存放敏感信息,或者在命令行中直接传递敏感数据。mysql
实验步骤以下:sql
建立 secret 存放 MySQL 的管理员密码。docker
openssl rand -base64 20 | docker secret create mysql_root_password -
密码是由 openssl 生成的随机字符串。数据库
注意 ag7injh6juonwl09lq8st36o8
是新建立的 service 的 ID,而非 service 的内容。网络
上面这种方式是从标准输入读取 secret 的内容,也能够指定从文件中读取,例如:wordpress
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 -
MySQL 经过 overlay 网络 mysql_private
与 WordPress 通讯,不须要将 MySQL service 暴露给外部网络和其余容器。ui
docker network create -d overlay mysql_private
命令以下:spa
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/
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/
访问 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