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

通过案例学习 Secret

在下面的例子中,我们会部署一个 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 生成的随机字符串。

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

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

openssl rand -base64 20 > password.txt

docker secret create my_password ./password.txt

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

openssl rand -base64 20 | docker secret create mysql_password -

创建自定义的 overlay 网络

MySQL 通过 overlay 网络与 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

指明创建数据库。

和指明创建数据库用户,密码从 secret中读取。

有关 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

指明 MySQL service 地址,这里用到了 DNS。

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

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

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

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

验证 WordPress

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

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

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

本文来自企鹅号 - CloudMan媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏奇梦博客

发帖UMEditor编辑器增加表情,附加表情包下载 PHP 配置 XiunoBBS

1655
来自专栏有趣的django

CRM客户关系管理系统(七) 第七章、动态modelform功能实现

2500
来自专栏前端萌媛的成长之路

url、href和src区别

1.4K4
来自专栏Python爬虫实战

MySQL 从零开始:02 MySQL安装

1443
来自专栏V站

Speed丨如何快速给网站添加Pjax?

Pjax是一种很多网站( facebook,  twitter)都支持的浏览方式, 当你点击一个站内链接的时候, 不是做页面跳转, 而是只是站内页面刷新。设置后...

2644
来自专栏九彩拼盘的叨叨叨

location 对象详解

Location 对象包含有关当前 URL 的信息。 可通过 window.location 属性来访问。

972
来自专栏Youngxj

一键删除&#65279字符造成的顶部空白行

1522
来自专栏Python爬虫与算法进阶

Python爬虫进阶(一)使用Selenium进行网页抓取

萌新要学习Selenium了,安装是个坑。还要下载相关配件,可以参考python 安装selenium环境(https://my.oschina.net/hyp...

3975
来自专栏技术博客

VS2010Web默认的浏览器设置和VS里调试JavaScript代码的设置

   重装系统后,VS调用的Web浏览器不是IE了,VS调式不了JavaScript代码了。这两天一直在试终于搞定了。这里查找的问题当然主要是VS里面调式Jav...

1914
来自专栏前端小叙

vue如何加入百度联盟广告

在百度联盟代码位管理中创建好对应的代码位之后,点击获取代码,会看到这样一段js ? 直接复制粘贴到自己网页中便可显示对应广告。 在vue中由于都是vue组件,不...

4978

扫码关注云+社区

领取腾讯云代金券