Docker Secret
在我們啟動docker或者service需要指定密碼,這種密碼我們有時不想被別人知道,所以可以采用docker secret方式管理。
創建secret可以有兩種方式,一種通過文件創建,一種通過命令行創建
我們在本地創建一個文件passwd
zack1024
接下我們可以通過如下命令創建secret
docker secret create my-pw passwd
運行后可以看到屏幕輸出如下
qq463dkw4da9s05rwinntmo09
這是一段加密后的數字,接下來我們查看下所有secret
docker secret list
可以看到secret列表
ID NAME DRIVER CREATED UPDATED qq463dkw4da9s05rwinntmo09 my-pw About a minute ago About a minute ago
為了保護隱私,我們可以將passwd這個文件刪除。
當然也可以通過命令行方式傳入,從而創建secret
echo "zack1024" | docker secret create mysql-root-pw -
接下來我們利用secret創建一些service
docker service create --name se-busybox --secret my-pw busybox sh -c "while true; do sleep 3600; done"
接下來我們查看下跑起來的service 列表
docker service list
可以看到服務列表,docker service ps se-busy的box 查看具體服務,可以看到這個服務運行的節點書和狀態
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 6xgkpk55tno7 se-busybox.1 busybox:latest VM-0-9-ubuntu Running Running 19 seconds ago
接下來我們在VM-0-9-ubuntu這台機器上執行docker ps 找到se-busybox服務運行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 23d0dce1b7cf busybox:latest "sh -c 'while true; …" 9 minutes ago Up 9 minutes se-busybox.1.6xgkpk55tno7fi6uiim4am00n
我們進入這個容器,docker exec -it 23d0dce1b7cf sh
在容器里,接下來我們進入這個目錄 cd /run/secrets/
/run/secrets # ls my-pw /run/secrets # cat my-pw zack1024
通過cat my-pw可以看到我們最初設定的密碼。
接下來我們利用secret構建mysql服務
docker service create --name se-db --secret my-pw -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/my-pw mysql
啟動mysql后進入容器內部也可以看到/run/secrets/目錄下有my-pw文件,其內部記錄的就是我們設置的密碼。
我們在容器內部執行
mysql -u root -p
錄入之前設置的密碼, 可以看到連接成功。
通過docker-compose使用secrete
可以通過secrets字段指定要使用的密鑰,這個密鑰必須提前通過docker secret create創建
也可以通過secrets字段單獨指定密鑰名稱,在其子域下指定file關鍵字,就是密碼保存的文件
version: '3.6'
services:
web:
image: wordpress
ports:
- 8080:80
secrets:
- my-pw
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_PASSWORD_FILE: /run/secrets/my-pw
networks:
- my-network
depends_on:
- mysql
deploy:
mode: replicated
replicas: 3
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
update_config:
parallelism: 1
delay: 10s
mysql:
image: mysql
secrets:
- my-pw
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/my-pw
MYSQL_DATABASE: wordpress
volumes:
- mysql-data:/var/lib/mysql
networks:
- my-network
deploy:
mode: global
placement:
constraints:
- node.role == manager
volumes:
mysql-data:
networks:
my-network:
driver: overlay
secrets:
my-pw:
file: ./password
然后我們通過docker stack 啟動服務
docker stack deploy wordpress -c=docker-compose.yml
感謝關注我的公眾號

