經過案例學習 Secret - 天天5分鐘玩轉 Docker 容器技術(110)

在下面的例子中,咱們會部署一個 WordPress 應用,WordPress 是流行的開源博客系統。html

咱們將建立一個 MySQL service,將密碼保存到 secret 中。咱們還會建立一個 WordPress service,它將使用 secret 鏈接 MySQL。這個例子將展現如何用 secret 避免在 image 中存放敏感信息,或者在命令行中直接傳遞敏感數據。mysql

實驗步驟以下:sql

建立 secret

建立 secret 存放 MySQL 的管理員密碼。docker

 

openssl rand -base64 20 | docker secret create mysql_root_password -

 

 

密碼是由 openssl 生成的隨機字符串。數據庫

557.png

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

 

 

558.png
 
建立自定義的 overlay 網絡

MySQL 經過 overlay 網絡 mysql_private 與 WordPress 通訊,不須要將 MySQL service 暴露給外部網絡和其餘容器。ui

 

docker network create -d overlay mysql_private

 

 

建立 MySQL service

命令以下: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/

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

相關文章
相關標籤/搜索