DUICUO

ここでは、特にお勧めのオープンソース Docker ツール 5 つを紹介します。

Dockerコミュニティは、様々なユースケースに対応できるオープンソースツールを数多く開発してきました。この記事では、筆者が最も有用と考える5つのDockerツールを推奨します。Watchtower(Dockerコンテナの自動更新)、docker-gc(コンテナとイメージのガベージコレクション)、docker-slim(コンテナのスリム化)、rocker(Dockerfilesの限界を打破)、ctop(コンテナのトップレベルクラスインターフェース)です。

Docker コミュニティは、想像を超えるユースケースの処理に役立つオープンソース ツールを数多く作成しています。

オンラインでたくさんのクールなDockerツールを見つけることができます。そのほとんどはオープンソースで、GitHubで公開されています。私はここ2年間Dockerに非常に熱中しており、ほとんどの開発プロジェクトで使用してきました。Dockerを使い始めると、当初予想していたよりも多くのシナリオに適用できることに気付くでしょう。Dockerにできる限りのことをしてもらいたいと思うでしょうし、その期待を裏切ることはないでしょう。

Dockerコミュニティは非常に活発で、日々多くの便利なツールが登場しています。コミュニティで起こっているすべてのイノベーションについていくのは大変です。そこで、私が日々の仕事で使っている、興味深く実用的なDockerツールのリストをまとめました。これらのツールのおかげで、生産性が向上し、手作業で行わなければならなかったタスクが削減されました。

1. Watchtower: Dockerコンテナを自動更新する

Watchtowerは実行中のコンテナを監視し、コンテナが最初に起動時に使用したイメージへの変更を追跡します。Watchtowerはイメージの変更を検出すると、対応するコンテナを新しいイメージを使用して自動的に再起動します。私はローカル開発環境で最新のビルドイメージを試してみたかったので、Watchtowerを使用しました。

WatchtowerはDockerイメージとしてパッケージ化されているため、他のコンテナと同様に実行できます。Watchtowerを実行するには、以下のコマンドを実行する必要があります。

  1. $ docker run -d --name watchtower --rm -v /var/run/docker.sock:/var/run/docker.sock v2tec/watchtower --interval 30

上記のコマンドでは、マウントファイル `/var/run/docker.sock` を使用して Watchtower コンテナを起動しました。これは、Watchtower が Docker デーモン API とやり取りできるようにするために必要です。間隔オプション `interval` には 30 秒を指定しました。このオプションは Watchtower のポーリング間隔を定義します。Watchtower は他にも多くのオプションをサポートしており、ドキュメントの説明に従って使用できます。

ここで、Watchtower が監視できるコンテナを起動します。

  1. $ docker run -p 4000:80 --name friendlyhello shekhargulati/friendlyhello:latest

これで、Watchtower はこの friendlyhello コンテナを穏やかに監視し始めます。新しいイメージを Docker Hub にプッシュすると、Watchtower は次回の実行時に新しい利用可能なイメージを検出します。そして、そのコンテナを正常に停止し、この新しいイメージで起動します。先ほど実行コマンドに渡したオプションも渡されます。つまり、コンテナは引き続き 4000:80 という公開ポートを使用して起動します。

デフォルトでは、Watchtower は Docker Hub レジストリを更新イメージの有無についてポーリングします。環境変数 REPO_USER と REPO_PASS からレジストリ認証情報を渡すことで、Watchtower をプライベートレジストリをポーリングするように設定できます。

Watchtower について詳しく知るには、Watchtower のドキュメントを読むことをお勧めします。

  1. https://github.com/v2tec/watchtower/blob/master/README.md  
  2. GitHub アドレス: https://github.com/v2tec/watchtower

2. docker-gc: コンテナとイメージのガベージコレクション

Docker-gcツールは、不要なコンテナやイメージを削除することでDockerホストをクリーンアップするのに役立ちます。1時間以上経過したコンテナはすべて削除されます。さらに、残りのコンテナに属さないイメージも削除されます。

docker-gc はスクリプトとしてもコンテナとしても使用できます。ここでは docker-gc をコンテナとして実行します。docker-gc を使用して削除可能なすべてのコンテナとイメージを検索するには、以下のコマンドを使用します。

  1. $ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -e  
  2. ドライラン= 1 spotify/docker-gc

上記のコマンドでは、`docker-gc` が Docker API とやり取りできるように `docker.sock` ファイルをロードしました。削除するコンテナとイメージを特定するために、環境変数 `DRY_RUN=1` を渡しました。このパラメータが指定されていない場合、`docker-gc` はすべてのコンテナとイメージを削除します。`docker-gc` が削除する対象を事前に確認しておくことをお勧めします。上記のコマンドの出力は以下の通りです。

  1. [2017-04-28T06:27:24] [INFO] : 次のコンテナは削除されました 0c1b3b0972bb792bee508 60c35a4 bc08ba32b527d53eab173d12a15c28deb931/vibrant_ yonath  
  2. [2017-04-28T06:27:24] [INFO] : 次のコンテナは削除されました 2a72d41e4b25e2782f7844e188643e395650a9ecca660e7a0dc2b7989e5acc28  
  3. /friendlyhello_ ウェブ 
  4. [2017-04-28T06:27:24] [INFO] : 次の画像は削除されました sha256:00f017a8c2a6e1 fe2f fd05c281 f27d069d2a99323a8cd514dd35f228ba26d2ff  
  5. [busybox: 最新]  
  6. [2017-04-28T06:27:24] [INFO] : 次の画像は削除されました sha256 :4a323b466a5ac4ce6524 8dd970b538922c54e535700cafe9448b52a3094483ea  
  7. [hello-world:最新]  
  8. [2017-04-28T06:27:24] [INFO] : 次の画像は削除されました sha256:4a323b4 66a5ac4ce65248dd970b538922c54e535700cafe9448b52a3094483ea  
  9. [python:2.7-slim]

docker-gc クリーンアップ アプローチに同意する場合は、DRY_RUN を使用せずに docker-gc を再度実行してクリーンアップ操作を実行できます。

  1. $ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock spotify/docker-gc

docker-gc は他にもいくつかのオプションをサポートしています。詳細については、docker-gc のドキュメントを参照することをお勧めします。

  1. https://github.com/spotify/docker-gc/blob/master/README.md  
  2. GitHub アドレス: https://github.com/spotify/docker-gc

3. docker-slim: コンテナ用の魔法の減量ピル

Docker イメージのサイズが心配な場合は、docker-slim が役立ちます。

docker-slimツールは、静的および動的解析手法を用いて、肥大化したイメージをスリム化します。docker-slimを使用するには、GitHubからLinuxまたはMacのバイナリパッケージをダウンロードしてください。ダウンロードが完了したら、システム変数PATHに追加してください。

説明のために、Dockerの公式ドキュメントに基づいてfriendlyhelloというDockerイメージを作成しました。このイメージのサイズは194MBです(下図参照)。

ご覧の通り、シンプルなアプリケーションでも194MBのデータをダウンロードする必要があります。docker-slimを使って、どれだけの容量を消費できるか確認してみましょう。

  1. $ docker-slim ビルド --http-probe friendlyhello

docker-slimツールは、太いイメージに対して一連のチェックと測定を行い、最終的にスリム化されたイメージを作成します。このスリム化されたイメージのサイズを見てみましょう。

ご覧のとおり、イメージサイズは24.9 MBに縮小されました。このコンテナを起動すると、同じように動作します。docker-slimツールは、Java、Python、Ruby、Node.jsアプリケーションをサポートしています。

ぜひご自身で試してみて、コストをどれだけ削減できるかご確認ください。私の個人的なプロジェクトでは、ほとんどの場合でうまく機能することがわかりました。docker-slimの詳細については、以下のドキュメントをご覧ください。

  1. https://github.com/docker-slim/docker-slim/blob/master/README.md  
  2. GitHub アドレス: https://github.com/docker-slim/docker-slim

4. ロッカー: Dockerfileの限界を克服する

Dockerを使用する開発者の多くは、イメージの構築にDockerfileを使用します。Dockerfileは、ユーザーがコマンドラインでイメージを組み立てるために実行できるすべてのコマンドを定義する宣言的な方法です。

Rocker (https://github.com/grammarly/rocker) は、Dockerfile の命令セットに新しい命令を追加します。Grammarly は、Dockerfile のフォーマットで発生した問題を解決するために Rocker を開発しました。Grammarly チームは、Rocker の開発理由を詳しく説明したブログ記事を執筆しました。Rocker をより深く理解するために、ぜひ読んでみてください。ブログ記事では、以下の 2 つの問題点が指摘されています。

Docker イメージのサイズ。

ビルド速度が遅い。

ブログでは、Rockerに追加されたいくつかの新しいコマンドについても触れています。Rockerでサポートされているすべてのコマンドについては、Rockerのドキュメントを参照してください。

  1. https://github.com/grammarly/rocker/blob/master/README.md

MOUNT は、ビルド間でボリュームを共有し、依存関係管理ツールで再利用できるようにするために使用されます。

Dockerfileには既に`FROM`命令が含まれています。Rockerでは複数の`FROM`命令を追加できます。つまり、1つのRockerfileから複数のイメージを作成できます。最初の命令群は製品のすべての依存関係をビルドし、2番目の命令群は製品自体をビルドします。これにより、イメージサイズを大幅に削減できます。

TAG はビルド プロセスのさまざまな段階でイメージを識別するために使用されるため、各イメージに手動でタグを付ける必要はありません。

PUSH はイメージをイメージ リポジトリにプッシュするために使用されます。

ATTACH を使用すると、中間ステップを対話的に実行できます。これはデバッグに非常に便利です。

Rockerを使用するには、まずマシンにインストールする必要があります。Macユーザーの場合は、brewコマンドをいくつか実行するだけです。

  1. $ ブリュータップ グラマーリー/タップ 
  2. $ brew で grammarly/tap/rocker をインストールします

インストールが完了したら、Rockerfile を渡して Rocker を使用してイメージをビルドできます。

  1. python:2.7-slimから 
  2. ワークディレクトリ /app  
  3. 追加 ./app  
  4. pip install -r requirements.txt を実行します。  
  5. エクスポーズ80  
  6. ENV NAME ワールド 
  7. コマンド ["python","app.Py"]  
  8. TAG shekhargulati/friendlyhello:{{ .VERSION }}  
  9. shekhargulati/friendlyhello をプッシュ:{{ .VERSION }}

イメージをビルドして Docker Hub にプッシュするには、次のコマンドを実行します。

  1. $ rocker d ビルド --push -var VERSION-1.0  
  2. GitHubアドレス: https://github.com/grammarly/rocker

5. `ctop`: コンテナクラスの最上位インターフェース。

ctopは最近使い始めたツールで、複数のコンテナのメトリクスをリアルタイムで表示できます。Macユーザーの方は、brewを使って以下のようにインストールできます。

  1. $ brew install ctop

インストールが完了したら、ctop を使い始めることができます。あとは DOCKER_HOST 環境変数を設定するだけです。

ctop コマンドを実行すると、すべてのコンテナのステータスを表示できます。

実行中のコンテナのみを表示する場合は、ctop -a コマンドを使用できます。

ctopは、ホストマシン上で実行されているコンテナを理解するのに役立つシンプルなツールです。詳細については、ctopのドキュメントをご覧ください。

  1. https://github.com/bcicen/ctop/blob/master/README.md  
  2. GitHub アドレス: https://github.com/bcicen/ctop

私が見つけた、とても便利なDockerツールを5つご紹介します。皆さんは日々の業務でDockerを使っていますか?これらのツールが少しでもお役に立てれば幸いです。