社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

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

CloudMan • 8 年前 • 190 次点击  

第110篇

通过案例学习 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 生成的随机字符串。

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

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

openssl rand -base64 20 > password.txt
docker 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


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/etMginJCwf
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/4829