2021年11月8日月曜日

docker secret を使ってみる

docker secret を使ってみる

概要

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 件のコメント:

コメントを投稿