部署环境仍然是swarm集群环境

部署一个 WordPress 应用,WordPress 是流行的开源博客系统。

将创建一个 MySQL service,将密码保存到 secret 中。我们还会创建一个 WordPress service,它将使用 secret 连接 MySQL。这个例子将展示如何用 secret 避免在 image 中存放敏感信息,或者在命令行中直接传递敏感数据。

建议主机使用内存4G以上

下载镜像

如果使用label标签指定主机运行,则只需在指定主机下载即可,如果不设置标签则在所有swarm集群主机下载,推荐使用私库

[root@swarm-manager ~]# docker pull mysql
[root@swarm-manager ~]# docker pull wordpress

放行外部访问端口

firewall-cmd --add-port=7946/tcp
firewall-cmd --add-port=4789/udp

创建secret

swarm-manager

创建一个随机密钥

[root@swarm-manager ~]# openssl rand -base64 20 | docker secret create mysql_root_password -
3ynn8ta27iizvobo6fzirzto3

使用docker secret创建一个随机20位密码,使用base64进行编码加密

还有一种生成密钥的方法是从文件读取,文件中的内容已经是被加密了

[root@swarm-manager ~]# openssl rand -base64 20 > password
[root@swarm-manager ~]# cat password 
2LjmxVWohzhm7C9W4vfZhxLNtgQ=

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

[root@swarm-manager ~]# openssl rand -base64 20 | docker secret create mysql_password -
k3itgfoaju7of2kdo87njkhia

现在已经有两个文件mysql_root_passwordmysql_password

一个用于root用户登录mysql,一个用于wordpress用户登录mysql

创建overlay网络

MySQL 通过 overlay 网络 mysql_net 与 WordPress 通信,不需要将 MySQL service 暴露给外部网络和其他容器。

[root@swarm-manager ~]# docker network create -d overlay mysql_net
rm2k5nnxrroabbx5pyr720qmc

创建mysql service

[root@swarm-manager ~]# docker service create --name mysql --network mysql_net \
--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 --default-authentication-plugin=mysql_native_password

MYSQL_DATABASE 指明创建数据库 wordpress。

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

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

创建wordpress service

[root@swarm-manager ~]# docker service create  --name wordpress  --network mysql_net  \
--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端口

为保险起见,三台都放行

firewall-cmd --add-port=30000/tcp

验证访问

访问192.168.1.11:30000

搭建wordpress

wordpress_login

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0