DockerでAzuriteを使ってみる

AzureのStorageをエミュレートしてくれるやつ。
Azure Storage Emulator というのもあるが、Azuriteの使用が推奨されている。

ドキュメント

実際に使ってみるという流れがわかる。

https://learn.microsoft.com/ja-jp/azure/storage/blobs/use-azurite-to-run-automated-tests

以下はコマンドのオプションとか詳しく書いてあった。

https://learn.microsoft.com/ja-jp/azure/storage/common/storage-use-azurite?tabs=docker-hub

Dockerイメージの取得と実行

docker pullする

(base) takumi@ ~/Documents/src/private/azure/learn/230811$ docker pull mcr.microsoft.com/azure-storage/azurite
Using default tag: latest
latest: Pulling from azure-storage/azurite
c41833b44d91: Downloading [>                                                  ]  48.18kB/3.262MB
c41833b44d91: Pull complete 
683339ce8d6b: Pull complete 
4cf6a83c0e2a: Pull complete 
686172e40c38: Pull complete 
903a2e659fc6: Pull complete 
df5ecd7134d1: Pull complete 
2ce93ec9de04: Pull complete 
58a3304cc7b3: Pull complete 
Digest: sha256:f07aa0052d67ae1ff3e3c9624b36a1dcf7c087673b36c939f32bb898b3e2fbfc
Status: Downloaded newer image for mcr.microsoft.com/azure-storage/azurite:latest
mcr.microsoft.com/azure-storage/azurite:latest

以下を実行する。

docker run -p 10000:10000 mcr.microsoft.com/azure-storage/azurite azurite-blob –blobHost 0.0.0.0

(base) takumi@ ~/Documents/src/private/azure/learn/230811$ docker run -p 10000:10000 mcr.microsoft.com/azure-storage/azurite azurite-blob --blobHost 0.0.0.0
Azurite Blob service is starting on 0.0.0.0:10000
Azurite Blob service successfully listens on http://0.0.0.0:10000

これでローカルでストレージアカウントが作成されました。

確認のためにMirosoft Azure Storage Explorer を用意する

アカウント名とアカウントキーは自動で入ってた。
この部分がそれにあたるんだろう。

既知のストレージ アカウントとキー

Azurite は、従来の Azure ストレージ エミュレーターで使用されるものと同じ既知のアカウントとキーを受け入れます。

  • アカウント名: devstoreaccount1
  • アカウント キー: Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==

ここをカスタマイズしたければカスタム ストレージ アカウントとキーに書いてある。

接続できた。

ファイル格納をやってみる

なんか適当にファイル作っておく。

(base) takumi@ ~/Documents/src/private/azure/learn/230811$ echo hello >> sample.txt

ファイル格納する前に、まずはblobにコンテナを作る。
Blobのところで右クリックしたらコンテナー作成ができる。

アップロードはココから。今回はファイルアップロードする。

タグはなんか適当に入れてみた。

アップロードを押すと

ん?エラーが出てる。なんだ。

なんかAPIのバージョンとかが問題かもしれないし、よくわからんのでまずは更新しておくか。

これを開く押すと更新が始まる。

ダウンロードされて新しいのでやってみると、タグの入力のところが消えている。

今度はうまくアップロードできたようだ。

ダウンロード確認

Mirosoft Azure Storage Explorerだとサクッと確認できる。
これでダウンロードされた。

ブラウザ経由でダウンロードできるか確認

まずは、何も設定しないでやってみる。

URLのコピーをする。

そのままブラウザに打ち込む

認証に失敗するから何かしら変更しないといけないってわかる。

パブリックアクセスレベルの設定を変更する。

最初はパブリックアクセスなしが設定されている。
今回はローカルで動きを確認したいだけなのでパブリックにする。

この状態でさっきのURLを打ち込むと表示された。
あれ、でもダウンロードされないんだな。

Shared Access Signatureを使ってアクセスする。

もう一度パブリックアクセスレベルを戻して、URLで確認する。
Shared Access Signature(通称SASキー)についてはこちらのドキュメントを読んでください。

ざっくりうと、いろんな制限をつけれる鍵って感じですかね。
時間制限とか、読み込み削除の制限とか。

作成画面で制限できる内容がなんとなくわかる。

この中のURLをコピーしてブラウザに貼り付ける。
無事にアクセスできた。

永続化の設定

一回コンテナーを止めます。

コンテナーも一度削除する。

もちろん読み込めない。

この状態で再度コンテナーを起動する。

さっき作ったところを見に行くと何もない。

Docker runでディレクトリをマウントしてやる

macだとこうなる

docker run -p 10000:10000 -p 10001:10001 -p 10002:10002 \
    -v /path/to/azurite:/data mcr.microsoft.com/azure-storage/azurite

私の環境に合わせると

docker run -p 10000:10000 -p 10001:10001 -p 10002:10002 \
    -v ~/Documents/src/private/azure/learn/230811/data:/data mcr.microsoft.com/azure-storage/azurite

もう一度同じように作ってみる

ローカルでマウントしたディレクトリを確認してみると確かに色々格納されている。
これらファイルについてワークスペースの構造で説明されていた。

もう一度Dockerを再起動してみる。

docker_rm_containerは自分で作ってるコマンドのエイリアスみたいなもので、イメージを削除している。

その上で再度確認。
コンテナー削除後はもちろん読み込めない。

永続化できていることが確認できた。
ディレクトリマウントできているからそりゃそうだろうという感じかもしれないが、念の為実験した。

以下コマンドを見てもわかる通り、コンテナー内の/dataにも同じようにデータが格納されている。

docker run -p 10000:10000 -p 10001:10001 -p 10002:10002 \ -v /path/to/azurite:/data mcr.microsoft.com/azure-storage/azurite

これも確認しておくと