概要
docker を使ってパスワードなどの秘匿情報を使う場合に docker secret が使えます
ただ残念なことに Swarm 上でしか使えません
環境
- Ubuntu18.04
- docker 20.10.8
シークレットの作成
docker secret create コマンドを Swram のマネージャノードに対して実行します
-
printf "This is a secret" | docker -H swarm01:2376 secret create my_secret_data -
- docker -H swarm01:2376 secret ls
ID NAME DRIVER CREATED UPDATED
j7uusrvn44cczetr9qc3k5so7 my_secret_data About a minute ago About a minute ago
シークレットを使ったサービスの作成
service create 時に --secret オプションを付与します
これもマネージャノードに対して実行します
-
docker -H swarm01:2376 service create --name redis --secret my_secret_data redis:alpine
- docker -H swarm01:2376 service ps redis
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
hjfhde044own redis.1 redis:alpine swarm03 Running Running 45 seconds ago
動作確認
docker exec を実行するのでコンテナが動作しているノードに直接実行しましょう
secret はファイルとしてマウントされているのでファイルの内容を確認しましょう
-
docker -H swarm03:2376 container exec $(docker -H swarm03:2376 ps --filter name=redis -q) cat /run/secrets/my_secret_data
This is a secret
マウントを解除する
service update で --secret-rm オプションを付与すると次に作成されるコンテナではシークレットをマウントしなくなります
- docker -H swarm01:2376 service update --secret-rm my_secret_data redis
- docker -H swarm03:2376 container exec $(docker -H swarm03:2376 ps --filter name=redis -q) cat /run/secrets/my_secret_data
cat: can't open '/run/secrets/my_secret_data': No such file or directory
シークレットを削除する
シークレットを使っているサービスがある場合はシークレットを削除できないので先にサービスを削除しましょう
- docker -H swarm01:2376 service rm redis
- docker -H swarm01:2376 secret rm my_secret_data
最後に
テキストファイルとしてマウントされるのでアプリ側でそれを展開する処理などが必要になるのが少し面倒な気はします
コンテナ作成時に環境変数などに展開してあげればアプリ内でも簡単に使えるかなと思います
次回は docker-compose で使う方法を紹介します
0 件のコメント:
コメントを投稿