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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 在下面的例子中,我们会部署一个 WordPress 应用,WordPress 是流行的开源博客系统。我们将创建一个 MySQL service,将密码保存到 secret 中。我们还会创建一个 WordPress service,它将使用 secret 连接 MySQL。

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

557.png

注意 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 -

 

 

558.png
 
创建自定义的 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/

559.png
 
创建 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/

560.png
 


验证 WordPress

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

561.png

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

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

书籍:

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

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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
Java Go 开发者
Docker容器技术简介及其与Go语言的结合点
【2月更文挑战第23天】本文首先概述了Docker容器技术的核心概念和优势,接着探讨了Go语言与Docker容器技术的结合点。通过阐述Docker的轻量级、可移植性和版本控制等特性,以及Go语言在容器化应用中的优势,本文旨在说明两者结合能够实现更高效、灵活的应用开发和部署。
|
9天前
|
Linux Docker 容器
docker 容器常用命令
docker 容器常用命令
12 0
|
17天前
|
Kubernetes 网络协议 Docker
Docker 容器的DNS
Docker 容器的DNS
23 1
|
20天前
|
关系型数据库 MySQL Nacos
【深入浅出Nacos原理及调优】「实战开发专题」采用Docker容器进行部署和搭建Nacos服务以及“坑点”
【深入浅出Nacos原理及调优】「实战开发专题」采用Docker容器进行部署和搭建Nacos服务以及“坑点”
45 1
|
25天前
|
监控 数据可视化 虚拟化
Docker容器常用命令笔记分享
Docker容器常用命令笔记分享
50 2
|
1月前
|
消息中间件 Linux 开发工具
rabbitmq使用docker容器挂载宿主机配置文件时无法访问控制台
rabbitmq使用docker容器挂载宿主机配置文件时无法访问控制台
|
1月前
|
JavaScript Shell Docker
|
1月前
|
Kubernetes Go 开发者
Go语言与Docker容器结合的实践应用与案例分析
【2月更文挑战第23天】本文通过分析实际案例,探讨了Go语言与Docker容器技术结合的实践应用。通过详细阐述Go语言在容器化环境中的开发优势,以及Docker容器技术在Go应用部署中的重要作用,本文旨在为读者提供Go语言与Docker容器结合的具体实现方法和实际应用场景。
|
Docker 容器 Perl
环境变量方式使用 Secret - 每天5分钟玩转 Docker 容器技术(158)
本节讨论如何以环境变量的方式使用 Secret。
2641 0
|
Web App开发 Docker 容器
volume 方式使用 Secret - 每天5分钟玩转 Docker 容器技术(157)
本节讨论如何以 volume 方式使用 secret。
1673 0