DUICUO

ttl.sh: 一時的な Docker イメージ用の非常に実用的で無料の匿名リポジトリ。

日々の業務で、テスト用にコンテナイメージをビルドすることが多く、必ずしもビルド環境で使用しないという状況に陥ったことはありませんか?そのような場合、まずはイメージをイメージリポジトリにプッシュし、その後、別の場所でコンテナをプルして実行する必要があります。しかし、時間が経つにつれて、イメージリポジトリのクリーンアップを忘れてしまい、不要なイメージが蓄積されていきます。

もちろん、自動クリーンアップ機能を備えたHarborのようなミラーリポジトリを使用することもできます。しかし、一時的なイメージ転送ポイントとしてのみ使用する場合は、Harborは扱いにくいです。

今回紹介する ttl.sh スクリプトは、このようなシナリオを処理するのに最適です。

ttl.sh

ttl.sh は、ログイン不要で無料で利用できる匿名の一時イメージリポジトリで、オープンソースです。ログインは不要で、イメージ名自体が機密性を確保します。例えば、UUID をイメージ名として使用し、同じ UUID でイメージのプッシュとプルを行うことができます。

使用

ttl.sh の使用は非常に簡単で、タグに注意する必要があることを除けば、Docker Hub や Docker Registry の使用と変わりません。

  1. ​docker build​を使用してイメージをビルドする際、タグを使用してイメージの有効期限を指定します(例: ​ttl.sh/b0a2c1c3-5751-4474-9dfe-6a9e17dfb927:1h​ :1h`)。デフォルトの有効期限は1時間で、最大は24時間です。有効なタグは​5m​​300s​​4h​​1d​です。有効期限が24時間を超える場合は24時間に設定されます。時間形式が無効な場合は、有効期限はデフォルトの1時間に設定されます。
  2. イメージをプッシュするには​docker push​を使用します。
  3. イメージをプルするには​docker pull​を使用します。

例えば:

 # macOS はデフォルトで大文字の UUID を生成するため、これを小文字に変換する必要があります。Linux では、uuidgen を直接使用できます。
# Dockerイメージは大文字のイメージ名をサポートしていません
$ IMAGE_NAME = $(uuidgen | tr "[:upper:]" "[:より低い:]"
$ docker build -t ttl.sh/ ${IMAGE_NAME} :5 分。
$ docker push ttl.sh/ ${IMAGE_NAME} :5分

成し遂げる

ttl.sh のソースコードは GitHub でオープンソース化されており、実装も複雑ではありません。

ttl.sh は Registry v2 をベースにしたイメージリポジトリです。Registry の通知機能を使用して、イメージプッシュイベントをHooks Web サービスに送信します。

フックは、Redis のイベント内のイメージ情報を解析して記録し、主にイメージの有効期限を記録します。同時に、 Reaper のスケジュールされたタスクは、定期的に Redis からイメージ情報を取得し、期限切れのイメージは、レジストリの REST API を呼び出すことによってクリーンアップされます。